Comment importer un X. 509 certificat et la clé privée en Java fichier de clés à utiliser dans le protocole SSL?
J'ai ceci dans un ActiveMQ config:
<sslContext>
<sslContext keyStore="file:/home/alex/work/amq/broker.ks"
keyStorePassword="password" trustStore="file:${activemq.base}/conf/broker.ts"
trustStorePassword="password"/>
</sslContext>
J'ai une paire de X. 509 cert et un fichier de clé.
Comment puis-je importer les deux, afin de les utiliser dans le protocole SSL le protocole SSL+stomp connecteurs? Tous les exemples que je pourrais google toujours générer la clé eux-mêmes, mais j'ai déjà une clé.
J'ai essayé
keytool -import -keystore ./broker.ks -file mycert.crt
mais cela ne importe le certificat et non pas le fichier de clé et les résultats dans
2009-05-25 13:16:24,270 [localhost:61612] ERROR TransportConnector - Could not accept connection : No available certificate or key corresponds to the SSL cipher suites which are enabled.
J'ai essayé la concaténation du cert et la clé, mais il a obtenu le même résultat.
Comment puis-je importer la clé?
- Vous avez réellement besoin d'écrire un peu de code pour ce faire, et les détails dépendent du format de la clé privée que vous essayez d'importer. Quel est le format de votre clé? Pouvez-vous expliquer quels sont les outils que vous avez utilisé pour générer la clé et le certificat que vous avez?
Vous devez vous connecter pour publier un commentaire.
Croyez-le ou pas, keytool ne fournit pas ces fonctionnalités de base comme l'importation de la clé privée de magasin de clés. Vous pouvez essayer cette solution de contournement avec la fusion PKSC12 fichier avec la clé privée dans un fichier de clés.
Ou tout simplement plus convivial KeyMan d'IBM pour le fichier de stockage des clés de la manipulation au lieu de keytool.exe.
J'ai utilisé les deux étapes suivantes, que j'ai trouvé dans les commentaires/posts liés dans les autres réponses:
Première étape: Convertir les.x.509 cert et la clé d'un fichier pkcs12
Remarque: assurez-vous de mettre un mot de passe sur le fichier pkcs12 - sinon vous obtiendrez une exception de pointeur null lorsque vous essayez d'importer. (Au cas où quelqu'un d'autre a eu ce mal de tête). (Grâce jocull!)
Note 2: Vous pouvez ajouter la
-chain
option pour conserver toute la chaîne de certificats. (Grâce Mafuba)Étape deux: Convertir le fichier pkcs12 à un keystore Java
Fini
Étape FACULTATIVE zéro: Créer un certificat auto-signé
Cheers!
-CAfile ca.crt -caname root
n'a pas correctement en sortie les certificats d'autorité de certification. Au lieu de cela j'ai utilisé-certfile concatenedCAFiles.pem
-chain
argument avec openssl pour inclure la totalité de la chaîne de certification dans votre pfx/p12 fichier si vous voulez que votre magasin de clés.pvk2pfx
(standard VS outil disponible dans le VScmd
invite de commandes) s'cracher un.pfx
--équivalent à un.p12
. @jocull conseils sont toujours pertinents; mettre un mot de passe sur elle. Pas deopenssl
nécessaire.some-alias
dans l'exemple)? Si vous n'avez: pourriez-vous s'il vous plaît créer un pastebin/gist liste de toutes les étapes et leur pleine puissance..p12
la clé aurez le mot de passe de l'original.p12.
Tomcat va échouer avecjava.security.UnrecoverableKeyException: Cannot recover key
. En d'autres termes: si vous avez besoin d'exécuter-deststorepass changeit -srcstorepass some-password
avec différentes les mots de passe, alors vous doit inclure-destkeypass changeit
(avec le même mot de passe que-deststorepass
)-chain
option, vous devez importer l'autorité de certification Racine et peut-être aussi à l'autorité de certification Intermédiaire Certficates comme décrit ici: gagravarr.org/writing/openssl-certs/others.shtml#ca-openssl dans le openssl Certficate dossierp12
fichier produit paropenssl
est déjà un keystore Java. Étape 2 fusionne simplement ce fichier de clés dans un existant, qui n'est nécessaire que si vous pour un existant (ancienne) de magasin de clés. Suis-je manqué quelque chose?openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -name [some-alias] -passin pass:some-password -passout pass:some-password -CAfile ca.crt -caname root
Keytool dans la version 6 de Java n'ont cette capacité: L'importation de clés privées dans un keystore Java à l'aide de keytool
Voici les détails de base de ce poste.
De convertir les cert à un PKCS12 utilisant OpenSSL. Un mot de passe est requis lors de la demande ou de la 2ème étape va se plaindre.
Convertir PKCS12 à Java Fichier de magasin de clés.
Et un de plus:
Oui, c'est en effet un triste fait que keytool n'a pas de fonctionnalité d'importation d'une clé privée.
Pour l'enregistrement, à la fin, je suis allé avec la solution décrite ici
D'abord les convertir à p12:
Créer de nouveaux JKS de p12:
Dans mon cas, j'ai eu un fichier pem qui contenait deux certificats et chiffrée de la clé privée utilisée dans la mutuelle authentification SSL.
Donc mon fichier pem ressemblait à ceci:
Voici ce que j'ai fait:
Diviser le fichier en trois fichiers distincts, de sorte que chacun d'eux contient juste une entrée,
en commençant par "---COMMENCER.." et finissant par "---FIN.." lignes. Supposons que nous avons maintenant trois fichiers: cert1.pem cert2.pem et pkey.pem
Convertir pkey.pem dans DER format à l'aide d'openssl et de la syntaxe suivante:
openssl pkcs8 -topk8 -nocrypt -in pkey.pem -inform PEM -out pkey.der -outform DER
Noter, que si la clé privée est chiffrée, vous devez fournir un mot de passe( l'obtenir à partir du fournisseur de l'original du fichier pem )
pour convertir au format DER,
openssl va vous demander le mot de passe comme ceci: "entrez un pass phraze pour pkey.pem:"
Si la conversion est réussie, vous obtiendrez un nouveau fichier appelé "pkey.der"
Créer un nouveau java magasin de clés et importer les clés privées et les certificats:
(facultatif) Vérifiez le contenu de votre nouveau magasin de clés:
keytool -list -keystore mykeystore -storepass password
(en option) Test de votre certificat et la clé privée à partir de votre nouveau magasin de clés à l'encontre de votre serveur SSL:
( Vous souhaiterez peut-être activer le débogage comme une VM option: -Djavax.net.debug=tous )
Enfin enregistrer vos certificats avec HttpsURLConnection si l'intention de l'utiliser:
HttpsURLConnection
au lieu d'essayer de rédiger votre propre. (Un autre problème avec votre exemple est que vous utilisez le même fichier de clés en tant que fichier de clés et d'un truststore, ce qui n'est pas toujours une bonne idée...)Sur la base des réponses ci-dessus, voici comment créer un nouveau fichier de stockage des clés pour votre java serveur web, d'une manière indépendante créée Comodo cert et la clé privée à l'aide de keytool (nécessite JDK 1.6+)
Problème de cette commande et à l'invite de mot de passe entrez somepass - serveur.crt' est de votre serveur cert et server.key " est la clé privée que vous avez utilisé pour la délivrance de la RSE:
openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -name www.yourdomain.com -CAfile AddTrustExternalCARoot.crt -caname "AddTrust External CA Root"
Puis utiliser l'utilitaire keytool pour convertir le keystore p12 dans un jks keystore:
keytool -importkeystore -deststorepass somepass -destkeypass somepass -destkeystore keystore.jks -srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass somepass
De l'importer ensuite les deux autres de la racine/certificats intermédiaires que vous avez reçu de Comodo:
Importation COMODORSAAddTrustCA.crt:
keytool -import -trustcacerts -alias cert1 -file COMODORSAAddTrustCA.crt -keystore keystore.jks
Importation COMODORSADomainValidationSecureServerca.crt:
keytool -import -trustcacerts -alias cert2 -file COMODORSADomainValidationSecureServerCA.crt -keystore keystore.jks
Vous pouvez utiliser ces étapes pour importer la clé d'un fichier de clés existant. Les instructions sont associées à partir des réponses dans ce fil et sur d'autres sites. Ces instructions ont travaillé pour moi (le keystore java):
openssl pkcs12 -export -in yourserver.crt -inkey yourkey.key -out server.p12 -name somename -certfile yourca.crt -caname root
(Si nécessaire, mettre la chaîne en option. La mise qui a échoué pour moi).
Cela va demander le mot de passe, vous devez donner le mot de passe correct sinon vous obtiendrez un message d'erreur
(erreur de cap ou de rembourrage d'erreur, etc).
*.jks
de l'exécution du fichier:keytool -importkeystore -srckeystore server.p12 -srcstoretype PKCS12
-destkeystore yourexistingjavakeystore.jks -deststoretype JKS -deststorepass existingjavastorepassword -destkeypass existingjavastorepassword
(Très important - ne pas laisser les deststorepass et la destkeypass paramètres).
Le certificat et la clé est maintenant importé dans votre keystore java.
Réponses précédentes point de manière correcte, que vous ne pouvez le faire avec la norme JDK outils en convertissant le fichier JKS en format PKCS #12 premier. Si vous êtes intéressés, j'ai mis en place un compact utilitaire d'importation OpenSSL-clés dérivées dans un JKS format du fichier de clés sans avoir à convertir le keystore PKCS #12 en premier: http://commandlinefanatic.com/cgi-bin/showarticle.cgi?article=art049
Vous utilisez liés utilitaire comme ceci:
(signe de la RSE, de revenir localhost.cer)
Si vous avez un fichier PEM (par exemple
server.pem
) contenant:vous pouvez ensuite importer le certificat et la clé dans un JKS keystore comme ceci:
1) Copie de la clé privée à partir du fichier PEM dans un fichier ascii (par exemple,
server.key
)2) Copier le cert à partir du fichier PEM dans un fichier ascii (par exemple,
server.crt
)3) Exporter le certificat dans un fichier PKCS12:
-CAfile
option.winpty
le début de la commande si l'exportation de mot de passe peuvent être saisis.4) de Convertir le fichier PKCS12 à un JKS keystore:
srcstorepass
mot de passe doit correspondre à l'exportation mot de passe à partir de l'étape 3)Ce que je cherche à réaliser a l'aide déjà fournie clé privée et le certificat pour signer le message qui allait quelque part que nécessaire pour s'assurer que le message venait de moi (clés privées signent alors que les clés de chiffrement).
Donc, si vous avez déjà un .fichier de clé et un .crt fichier?
Essayez ceci:
Etape 1: Convertir la clé et cert pour .fichier p12
Étape 2: Importer la clé et créer un .jsk fichier avec une seule commande
Étape 3: Dans votre java:
Si vous avez besoin de signer une chaîne de caractères à l'aide de cette clé, procédez de la manière suivante:
Étape 1: Convertir le texte que vous souhaitez crypter
Étape 2: Obtenir encodées en base64 clé privée
Références:
Programme Final
Il suffit de faire une PKCS12 keystore Java peut l'utiliser directement maintenant. En fait, si vous indiquez un Java-style de magasin de clés, keytool lui-même vous alerte sur le fait que PKCS12 est maintenant le format préféré.
Vous devriez avoir reçu tous les trois fichiers (serveur de.crt, serveur.la clé, ca.crt) à partir de votre fournisseur de certificats. Je ne suis pas sûr de ce que "-caname racine" signifie réellement, mais il semble être définis de cette façon.
Dans le code Java, assurez-vous de spécifier le bon type de magasin de clés.
J'ai obtenu mon comodo.com-délivré un certificat SSL fonctionne très bien dans NanoHTTPD de cette façon.
dans un cas d'une Courbe Elliptique et de répondre à la question importer un certificat x509 et la clé privée dans le keystore Java, vous voudrez peut-être avoir un coup d'oeil également à ce fil Comment lire CE de la clé Privée en java, ce qui est dans .pem format de fichier
À l'aide de Let's Encrypt certificats
En supposant que vous avez créé vos certificats et les clés privées avec Let's Encrypt dans
/etc/letsencrypt/live/you.com
:1. Créer un PKCS #12 fichier
Cette combine votre certificat SSL
fullchain.pem
et votre clé privéeprivkey.pem
en un seul fichier,pkcs.p12
.Vous serez invité à entrer un mot de passe pour
pkcs.p12
.La
export
option indique qu'un fichier PKCS#12 sera créé plutôt que analysée (à partir de le manuel).2. Créer le keystore Java
Si
keystore.jks
n'existe pas, il sera créé contenant lepkcs.12
fichier créé ci-dessus. Sinon, vous allez importerpkcs.12
dans le fichier de clés existant.Ces instructions sont dérivées à partir de ce blog.
Voici plus d' sur les différents types de fichiers dans
/etc/letsencrypt/live/you.com/
.