web-dev-qa-db-fra.com

Importer un certificat en tant que PrivateKeyEntry

J'installe SSL sur un serveur Tomcat et suis ces instructions de l'émetteur https://knowledge.rapidssl.com/support/ssl-certificate-support/index?page=contentactp=CROSSLINKid=SO16181 et il déclare:

Verify the following information:

The SSL certificate is imported into the alias with the "Entry Type" of 
PrivateKeyEntry or KeyEntry.  If not, please import the certificate into 
the Private Key alias.

Lorsque j'importe le certificat (Tomcat) j'utilise:

keytool -import -trustcacerts -alias your_alias_name -keystore your_keystore_filename
-file your_certificate_filename

mais quand je le fais, il importe en tant que trustCertEntry

Keystore type: JKS
Keystore provider: Sun

Your keystore contains 3 entries

primaryca, Jul 26, 2014, trustedCertEntry,
Certificate fingerprint (SHA1): <snip>
Tomcat, Jul 26, 2014, trustedCertEntry,
Certificate fingerprint (SHA1):  <snip>
secondaryca, Jul 26, 2014, trustedCertEntry,
Certificate fingerprint (SHA1):  <snip>

Comment faire pour que l'alias Tomcat soit importé en tant que PrivateKeyEntry?

14
bhttoan

Débarasse-toi du -trustcacerts option. Ce n'est pas un certificat CA. C'est votre certificat. Et utilisez le même alias que la clé privée avait déjà.

7
user207421

Ces directives de l'AC sont un peu trompeuses. @EJP a dit à juste titre que vous ne devriez pas utiliser -trustcacerts pour votre certificat.

De plus, ce document d'autorité de certification suggère d'importer les certificats d'autorité de certification primaire et intermédiaire dans des opérations distinctes, ce qui devrait vous donner un résultat comme celui-ci:

primaryca, Jul 26, 2014, trustedCertEntry,
Certificate fingerprint (SHA1): <snip>
secondaryca, Jul 26, 2014, trustedCertEntry,
Certificate fingerprint (SHA1):  <snip>
Tomcat, Jul 26, 2014, PrivateKeyEntry,
Certificate fingerprint (SHA1):  <snip>

Malheureusement, l'importation des certificats CA dans votre magasin de clés comme celui-ci est inutile. (Il serait utile dans un truststore , mais l'autorité de certification que vous utilisez est probablement déjà dans le truststore par défaut.)

Il est utile d'avoir les certificats CA de votre certificat dans le magasin de clés pour présenter une chaîne de certificats complète lorsque des certificats intermédiaires sont requis. Cependant, le gestionnaire de clés (sauf peut-être une implémentation personnalisée) ne construira pas la chaîne pour vous, même s'il trouve des certificats CA appropriés à côté de votre certificat d'entité finale (dans PrivateKeyEntry).

Vous devez importer ces certificats ensemble , sous forme de chaîne, par rapport à l'entrée où se trouve votre clé privée. Pour ce faire, concaténez les certificats ensemble dans un fichier texte (codé PEM), votre certificat de serveur en premier, suivi du certificat utilisé pour le délivrer, etc. Ensuite, importez ce fichier dans votre magasin de clés à l'aide de cet alias de clé privée. (C'est exactement le même problème que dans cette question , mais avec un certificat de serveur.)

(Je ne sais pas si votre autorité de certification vous donne déjà votre fichier de cert en tant que chaîne, mais en général, vous obtenez au moins votre certificat dans un seul fichier et l'autorité de certification intermédiaire dans un autre. Le document auquel vous liez semble trompeur car il ne mentionnez pas plus d'un bloc entre --BEGIN/END CERT--, mais en quelque sorte leur exemple de capture d'écran a une longueur de certificat de 4 par rapport à ce seul alias.)

Comme l'a souligné @jww dans un commentaire sur votre question, vous n'avez pas besoin du certificat d'autorité de certification "racine" (celui qui est auto-signé) dans cette chaîne, car soit votre client le fait déjà confiance, soit il n'a aucune raison de le faire. faites-lui confiance lorsque vous l'envoyez. Ce n'est pas mal de l'avoir dans votre chaîne, mais c'est inutile, et cela pourrait ajouter un peu de surcharge réseau.

4
Bruno

Vous essayez d'ajouter un certificat et vous attendez à ce qu'il s'agisse d'une clé privée - sa confusion entre deux choses différentes.

Généralement, lorsque vous créez un fichier de clés (.jks), il contient la clé privée à l'intérieur. S'il est vide (supprimé), vous devez générer un ensemble (fichier .p12) à partir de votre clé et de vos certificats.

Afin de créer de nouvelles clés et certificats gratuits, vous pouvez utiliser cette implémentation de openSSl https://zerossl.com .

Ensuite, vous avez une clé et un certificat que vous devez générer à partir d'eux (.p12) le fichier de bundle: (sur une machine Linux)

openssl pkcs12 -export -in [filename-certificate] -inkey [filename-key] -name [Host] -out [filename-new-PKCS-12.p12]

Maintenant, ajoutez simplement le fichier bundle (fichier .p12) à un magasin de clés (.jks) en exécutant la commande suivante:

keytool -importkeystore -deststorepass [password] -destkeystore [filename-new-keystore.jks] -srckeystore [filename-new-PKCS-12.p12] -srcstoretype PKCS12
4
Eitan Rimon