J'ai ceci dans une configuration ActiveMQ:
<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 cert X.509 et un fichier clé.
Comment importer ces deux afin de les utiliser dans les connecteurs SSL et SSL + stomp? Tous les exemples que j'ai pu google génèrent toujours 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 fait qu'importer le certificat et non le fichier clé et se traduit par
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é de concaténer le certificat et la clé, mais j'ai obtenu le même résultat.
Comment importer la clé?
Réponses:
Croyez-le ou non, keytool ne fournit pas de fonctionnalités de base telles que l'importation de clés privées dans le magasin de clés. Vous pouvez essayer cette solution de contournement en fusionnant le fichier PKSC12 avec la clé privée dans un magasin de clés.
Ou utilisez simplement KeyMan plus convivial d'IBM pour la gestion des magasins de clés au lieu de keytool.exe.
la source
J'ai utilisé les deux étapes suivantes que j'ai trouvées dans les commentaires / articles liés dans les autres réponses:
Première étape: convertir le certificat et la clé x.509 en un fichier pkcs12
Remarque: assurez-vous de mettre un mot de passe sur le fichier pkcs12 - sinon vous obtiendrez une exception de pointeur nul lorsque vous essayez de l'importer. (Au cas où quelqu'un d'autre aurait eu ce mal de tête). ( Merci jocull! )
Remarque 2: vous souhaiterez peut-être ajouter l'
-chain
option de conservation de la chaîne de certificats complète. ( Merci Mafuba )Deuxième étape: convertir le fichier pkcs12 en un fichier de clés Java
Fini
FACULTATIF Étape zéro: créer un certificat auto-signé
À votre santé!
la source
-CAfile ca.crt -caname root
n'a pas correctement émis les certificats CA. Au lieu de cela, j'ai utilisé-certfile concatenedCAFiles.pem
-chain
argument avec openssl pour inclure la chaîne de certificats complète dans votre fichier pfx / p12 si vous le souhaitez dans votre magasin de clés.pvk2pfx
(un outil VS standard disponible dans l'cmd
invite VS ) crachera un -.pfx
équivalent à un.p12
. Les conseils de @ jocull sont toujours d'actualité; mettre un mot de passe dessus. Pasopenssl
nécessaire..p12
clé, le mot de passe du.p12.
Tomcat d' origine échouerajava.security.UnrecoverableKeyException: Cannot recover key
. En d'autres termes: si vous devez exécuter-deststorepass changeit -srcstorepass some-password
avec des mots de passe différents , vous devez inclure-destkeypass changeit
(avec le même mot de passe que-deststorepass
)Keytool dans Java 6 a cette capacité: Importation de clés privées dans un magasin de clés Java à l'aide de keytool
Voici les détails de base de ce post.
Convertissez le certificat existant en PKCS12 à l'aide d'OpenSSL. Un mot de passe est requis lorsque demandé ou la 2ème étape se plaindra.
Convertissez le PKCS12 en un fichier de clés Java.
la source
Et encore un:
la source
Convertissez d'abord en p12:
Créez un nouveau JKS à partir de p12:
la source
Oui, c'est en effet un triste fait que keytool n'a pas de fonctionnalité pour importer une clé privée.
Pour mémoire, à la fin, je suis allé avec la solution décrite ici
la source
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 distincts, de sorte que chacun ne contienne qu'une seule entrée, commençant par "--- BEGIN .." et se terminant par "--- END ..". Supposons que nous avons maintenant trois fichiers: cert1.pem cert2.pem et pkey.pem
Convertissez pkey.pem au format DER en utilisant openssl et la syntaxe suivante:
openssl pkcs8 -topk8 -nocrypt -in pkey.pem -inform PEM -out pkey.der -outform DER
Notez que si la clé privée est cryptée, vous devez fournir un mot de passe (à obtenir auprès du fournisseur du fichier pem d'origine) pour la convertir au format DER, openssl vous demandera le mot de passe comme ceci: "entrez une passe phraze pour pkey .pem: "Si la conversion réussit, vous obtiendrez un nouveau fichier appelé" pkey.der "
Créez un nouveau magasin de clés java et importez la clé privée et les certificats:
(facultatif) Vérifiez le contenu de votre nouveau magasin de clés:
keytool -list -keystore mykeystore -storepass password
(facultatif) Testez vos certificats et votre clé privée à partir de votre nouveau magasin de clés par rapport à votre serveur SSL: (Vous pouvez activer le débogage en tant qu'option de machine virtuelle: -Djavax.net.debug = all)
Enfin, enregistrez vos certificats avec HttpsURLConnection si vous prévoyez de l'utiliser:
la source
HttpsURLConnection
au lieu d'essayer d'écrire le vôtre. (Un autre problème avec votre exemple est que vous utilisez le même keystore qu'un keystore et un truststore, ce qui n'est pas toujours une bonne idée ...)Utilisation des certificats Let's Encrypt
En supposant que vous avez créé vos certificats et clés privées avec Let's Encrypt dans
/etc/letsencrypt/live/you.com
:1. Créez un fichier PKCS # 12
Celui - ci combine votre certificat SSL
fullchain.pem
et votre clé privéeprivkey.pem
dans un seul fichier,pkcs.p12
.Vous serez invité à entrer un mot de passe pour
pkcs.p12
.L'
export
option spécifie qu'un fichier PKCS # 12 sera créé plutôt qu'analysé (à partir du manuel ).2. Créez le magasin de clés Java
S'il
keystore.jks
n'existe pas, il sera créé contenant lepkcs.12
fichier créé ci-dessus. Sinon, vous importerezpkcs.12
dans le magasin de clés existant.Ces instructions sont dérivées de cet article de blog .
Voici plus sur les différents types de fichiers dans
/etc/letsencrypt/live/you.com/
.la source
Sur la base des réponses ci-dessus, voici comment créer un tout nouveau magasin de clés pour votre serveur Web basé sur java, à partir d'un certificat Comodo créé indépendamment et d'une clé privée à l'aide de keytool (nécessite JDK 1.6+)
Exécutez cette commande et à l'invite de mot de passe, saisissez somepass - 'server.crt' est le certificat de votre serveur et 'server.key' est la clé privée que vous avez utilisée pour émettre le CSR:
openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -name www.yourdomain.com -CAfile AddTrustExternalCARoot.crt -caname "AddTrust External CA Root"
Utilisez ensuite keytool pour convertir le magasin de clés p12 en magasin de clés jks:
keytool -importkeystore -deststorepass somepass -destkeypass somepass -destkeystore keystore.jks -srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass somepass
Importez ensuite les deux autres certificats racine / intermédiaires que vous avez reçus de Comodo:
Importez COMODORSAAddTrustCA.crt:
keytool -import -trustcacerts -alias cert1 -file COMODORSAAddTrustCA.crt -keystore keystore.jks
Importez COMODORSADomainValidationSecureServerCA.crt:
keytool -import -trustcacerts -alias cert2 -file COMODORSADomainValidationSecureServerCA.crt -keystore keystore.jks
la source
Vous pouvez utiliser ces étapes pour importer la clé dans un magasin de clés existant. Les instructions sont combinées à partir des réponses de ce fil et d'autres sites. Ces instructions ont fonctionné pour moi (le magasin de clés java):
openssl pkcs12 -export -in yourserver.crt -inkey yourkey.key -out server.p12 -name somename -certfile yourca.crt -caname root
(Si nécessaire, mettez l'option -chain. Mettre cela a échoué pour moi). Cela vous demandera le mot de passe - vous devez donner le mot de passe correct sinon vous obtiendrez une erreur (erreur de cap ou erreur de remplissage, etc.).
*.jks
fichier exécuté:keytool -importkeystore -srckeystore server.p12 -srcstoretype PKCS12 -destkeystore yourexistingjavakeystore.jks -deststoretype JKS -deststorepass existingjavastorepassword -destkeypass existingjavastorepassword
(Très important - ne laissez pas de côté les paramètres deststorepass et destkeypass.)
la source
Les réponses précédentes indiquent correctement que vous ne pouvez le faire qu'avec les outils JDK standard en convertissant d'abord le fichier JKS au format PKCS # 12. Si vous êtes intéressé, j'ai mis en place un utilitaire compact pour importer des clés dérivées d'OpenSSL dans un magasin de clés au format JKS sans avoir à convertir d'abord le magasin de clés en PKCS # 12: http://commandlinefanatic.com/cgi-bin/showarticle. cgi? article = art049
Vous utiliseriez l'utilitaire lié comme ceci:
(signez le CSR, récupérez localhost.cer)
la source
Si vous avez un fichier PEM (par exemple
server.pem
) contenant:vous pouvez ensuite importer le certificat et la clé dans un fichier de clés JKS comme celui-ci:
1 ) Copiez la clé privée du fichier PEM dans un fichier ascii (par exemple
server.key
)2 ) Copiez le certificat du fichier PEM dans un fichier ascii (par exemple
server.crt
)3 ) Exportez le certificat et la clé dans un fichier PKCS12:
-CAfile
option .winpty
au début de la commande afin que le mot de passe d'exportation puisse être entré.4 ) Convertissez le fichier PKCS12 en un fichier de clés JKS:
srcstorepass
mot de passe doit correspondre au mot de passe d'exportation de l'étape 3)la source
Ce que j'essayais de réaliser était d'utiliser la clé privée et le certificat déjà fournis pour signer un message qui allait quelque part et qui devait s'assurer que le message venait de moi (les clés privées signent pendant que les clés publiques cryptent).
Donc, si vous avez déjà un fichier .key et un fichier .crt?
Essaye ça:
Étape 1: convertir la clé et le certificat en fichier .p12
Étape 2: importez la clé et créez un fichier .jsk avec une seule commande
Étape 3: Dans votre java:
Si vous devez signer une chaîne à l'aide de cette clé, procédez comme suit:
Étape 1: convertir le texte que vous souhaitez crypter
Étape 2: obtenir la clé privée encodée en base64
Références:
Programme final
la source
Créez simplement un magasin de clés PKCS12, Java peut l'utiliser directement maintenant. En fait, si vous répertoriez un fichier de clés de style Java, keytool lui-même vous avertit que PKCS12 est désormais le format préféré.
Vous devez avoir reçu les trois fichiers (server.crt, server.key, ca.crt) de votre fournisseur de certificats. Je ne suis pas sûr de ce que signifie réellement "-caname root", mais cela semble devoir être spécifié de cette façon.
Dans le code Java, assurez-vous de spécifier le bon type de fichier de clés.
J'ai obtenu mon certificat SSL émis par comodo.com qui fonctionne bien dans NanoHTTPD de cette façon.
la source
dans le cas d'Elliptic Curve et répondre à la question importer un certificat x509 existant et une clé privée dans le magasin de clés Java , vous pouvez également consulter ce fil Comment lire la clé privée EC en java qui est au format de fichier .pem
la source