Lors du développement d'un client de service Web Java, j'ai rencontré un problème. L'authentification pour le service Web utilise un certificat client, un nom d'utilisateur et un mot de passe. Le certificat client que j'ai reçu de la société derrière le webservice est au .cer
format. Lorsque j'inspecte le fichier à l'aide d'un éditeur de texte, il a le contenu suivant:
-----BEGIN CERTIFICATE-----
[Some base64 encoded data]
-----END CERTIFICATE-----
Je peux importer ce fichier en tant que certificat dans Internet Explorer (sans avoir à saisir de mot de passe!) Et l'utiliser pour m'authentifier auprès du webservice.
J'ai pu importer ce certificat dans un magasin de clés en supprimant d'abord la première et la dernière ligne, en les convertissant en nouvelles lignes Unix et en exécutant un décodage base64. Le fichier résultant peut être importé dans un magasin de clés (à l'aide de la keytool
commande). Lorsque je répertorie les entrées dans le magasin de clés, cette entrée est du type trustedCertEntry
. En raison de ce type d'entrée (?), Je ne peux pas utiliser ce certificat pour m'authentifier auprès du service Web. Je commence à penser que le certificat fourni est un certificat public qui est utilisé pour l'authentification ...
Une solution de contournement que j'ai trouvée consiste à importer le certificat dans IE et à l'exporter sous forme de .pfx
fichier. Ce fichier peut être chargé en tant que fichier de clés et peut être utilisé pour s'authentifier auprès du service Web. Cependant, je ne peux pas m'attendre à ce que mes clients effectuent ces étapes chaque fois qu'ils reçoivent un nouveau certificat. Je voudrais donc charger le .cer
fichier directement dans Java. Des pensées?
Informations supplémentaires: la société derrière le service Web m'a dit que le certificat devrait être demandé (en utilisant IE et le site Web) au PC et à l'utilisateur qui importerait le certificat plus tard.
la source
L'importation du
.cer
fichier de certificat téléchargé à partir du navigateur (ouvrez l'URL et fouillez pour plus de détails) dans le magasin de clés de cacerts ajava_home\jre\lib\security
fonctionné pour moi, par opposition aux tentatives de générer et d'utiliser mon propre magasin de clés.java_home\jre\lib\security
cmd
et CTRL+ SHIFT+ENTERyourAliasName
etpath\to\certificate.cer
respectivement)De cette façon, vous n'avez pas besoin de spécifier d'options JVM supplémentaires et le certificat doit être reconnu par le JRE.
la source
java_home\jdk_x.xx\jre\lib\security
Pour un chemin absolu, utilisez une barre oblique inverse, par exemple, les"C:\myCert.crt"
guillemets sont facultatifs si le chemin ne contient pas d'espaces.Voici le code que j'ai utilisé pour importer par programme des fichiers .cer dans un nouveau KeyStore.
la source
Vous ne devriez pas avoir à apporter de modifications au certificat. Êtes-vous sûr d'exécuter la bonne commande d'importation?
Ce qui suit fonctionne pour moi:
où mycert.cer contient:
la source
Un outil GUI open source est disponible sur keystore-explorer.org
Les écrans suivants vous aideront (ils proviennent du site officiel)
Écran par défaut que vous obtenez en exécutant la commande:
Et aller
Examine
etExamine a URL
option, puis donner l'URL Web que vous souhaitez importer.La fenêtre de résultat sera comme ci-dessous si vous donnez un lien vers le site google.
C'est l'un des cas d'utilisation et le reste appartient à l'utilisateur (tous les crédits vont au keystore-explorer.org )
la source
Le certificat que vous avez déjà est probablement le certificat du serveur ou le certificat utilisé pour signer le certificat du serveur. Vous en aurez besoin pour que votre client de service Web puisse authentifier le serveur.
Mais si vous devez également effectuer l'authentification client avec SSL, vous devez obtenir votre propre certificat pour authentifier votre client de service Web. Pour cela, vous devez créer une demande de certificat; le processus consiste à créer votre propre clé privée et la clé publique correspondante et à attacher cette clé publique ainsi que certaines de vos informations (e-mail, nom, nom de domaine, etc.) à un fichier appelé la demande de certificat. Ensuite, vous envoyez cette demande de certificat à l'entreprise qui vous l'a déjà demandée, et ils créeront votre certificat, en signant votre clé publique avec leur clé privée, et ils vous renverront un fichier X509 avec votre certificat, que vous pouvez ajoutez maintenant à votre fichier de clés et vous serez prêt à vous connecter à un service Web en utilisant SSL nécessitant une authentification client.
Pour générer votre demande de certificat, utilisez "keytool -certreq -alias -file -keypass -keystore". Envoyez le fichier résultant à l'entreprise qui va le signer.
Lorsque vous récupérez votre certificat, exécutez "keytool -importcert -alias -keypass -keystore".
Vous devrez peut-être utiliser -storepass dans les deux cas si le magasin de clés est protégé (ce qui est une bonne idée).
la source
Voici un script que j'ai utilisé pour importer par lots un tas de fichiers crt dans le répertoire actuel dans le magasin de clés java. Enregistrez-le simplement dans le même dossier que votre certificat et exécutez-le comme suit:
import_all_certs.sh
la source
Voici comment cela a fonctionné pour moi:
la source