J'essaye de me connecter à un serveur SSL qui m'oblige à m'authentifier. Pour utiliser SSL sur Apache MINA, j'ai besoin d'un fichier JKS approprié. Cependant, je n'ai reçu qu'un fichier .PEM.
Comment créer un fichier JKS à partir d'un fichier PEM?
J'essaye de me connecter à un serveur SSL qui m'oblige à m'authentifier. Pour utiliser SSL sur Apache MINA, j'ai besoin d'un fichier JKS approprié. Cependant, je n'ai reçu qu'un fichier .PEM.
Comment créer un fichier JKS à partir d'un fichier PEM?
Réponses:
Commencez par convertir votre certificat au format DER:
Et après, importez-le dans le keystore:
la source
Si vous souhaitez uniquement importer un certificat au format PEM dans un keystore, keytool fera le travail:
la source
J'ai développé http://code.google.com/p/java-keyutil/ qui importe les certificats PEM directement dans un keystore Java. Son objectif principal est d'importer des ensembles de certificats de système d'exploitation PEM en plusieurs parties, tels que ca-bundle.crt. Ceux-ci incluent souvent des en-têtes que keytool ne peut pas gérer
la source
keytool
déjà tout cela pour vous (et plus). (Au fait, vous devriez fermer votreFileOutputStream
, et fermer vos flux d'E / Sfinally
, si une exception se produit.)Dans mon cas, j'avais un fichier pem qui contenait deux certificats et une clé privée cryptée à utiliser dans l'authentification SSL mutuelle. Donc, mon fichier pem ressemblait à ceci:
Voici ce que j'ai fait
Divisez le fichier en trois fichiers séparés, de sorte que chacun ne contienne qu'une seule entrée, commençant par
---BEGIN..
et se terminant par des---END..
lignes. Supposons aussi que nous avons maintenant trois fichiers:cert1.pem
,cert2.pem
etpkey.pem
.Convertissez
pkey.pem
au format DER en utilisant openssl et la syntaxe suivante:Notez que si la clé privée est cryptée, vous devez fournir un mot de passe (obtenez-le auprès du fournisseur du fichier pem d'origine) pour convertir au format DER,
openssl
vous demandera le mot de passe comme ceci: "entrez une phrase de passe pourpkey.pem
:".Si la conversion réussit, vous obtiendrez un nouveau fichier appelé
pkey.der
.Créez un nouveau keystore java et importez la clé privée et les certificats:
(facultatif) Vérifiez le contenu de votre nouveau magasin de clés:
Type de fichier de clés: Fournisseur de fichier de clés JKS: SUN
Votre keystore contient 3 entrées:
cn = ..., ou = ..., o = .., 2 septembre 2014, trustedCertEntry, Empreinte du certificat (SHA1): 2C: B8: ...
importkey, 2 septembre 2014, PrivateKeyEntry, Empreinte du certificat (SHA1): 9C: B0: ...
cn = ..., o = ...., 2 septembre 2014, trustedCertEntry, Empreinte du certificat (SHA1): 83:63: ...
(facultatif) Testez vos certificats et votre clé privée de votre nouveau magasin de clés par rapport à votre serveur SSL: (Vous pouvez activer le débogage en tant qu'option VM: -Djavax.net.debug = all)
Enfin, enregistrez vos certificats avec HttpsURLConnection si vous prévoyez de l'utiliser:
la source
session.getPeerHost()
ne renvoie pas le nom dans le certificat, mais le nom avecurlHostName
lequel vous vous êtes connecté (c'est-à-dire l' ici), donc ce sera toujours vrai. Vous revenez toujours detrue
toute façon.Si vous avez besoin d'un moyen simple de charger des fichiers PEM en Java sans avoir à gérer des outils externes (opensll, keytool) , voici mon code que j'utilise en production:
S'amuser.
la source
J'oublie toujours comment faire cela parce que c'est quelque chose que je ne fais que de temps en temps, c'est une solution possible, et cela fonctionne:
Exécutez les deux lignes de code suivantes:
Si vous exécutez dans l'environnement Java SE, ajoutez les options suivantes:
Ou ajoutez ce qui suit au code java:
L'autre option pour l'étape 2 consiste simplement à utiliser la
keytool
commande. Ci-dessous est un exemple avec une chaîne de certificats:la source
J'ai utilisé Keystore Explorer
la source
Il existe également un outil GUI qui permet la création visuelle de JKS et l'importation de certificats.
http://portecle.sourceforge.net/
la source
Je l'ai eu sur Internet. Cela fonctionne assez bien pour les fichiers pem contenant plusieurs entrées.
la source