web-dev-qa-db-fra.com

Ajout d'une chaîne de certificats au certificat p12 (pfx)

J'ai une application dans Java et cxf qui se connecte aux WebServices avec le certificat client.

J'ai obtenu le certificat du propriétaire du WebService

  • certificate.p12
  • certificate.pem
  • certificate.crt
  • trusted_ca.cer
  • root_ca.cer

J'ai un problème avec la conversion directe de ce certificat p12 en keystore jks fonctionnel requis par Java.

J'ai fait ça:

keytool -importkeystore -srckeystore certificate.p12 -srcstoretype PKCS12 -destkeystore certificate1.jks -deststoretype JKS -storepass secret
keytool -import -alias root -file root_ca.cer -trustcacerts -keystore certificate1.jks -storepass secret
keytool -import -alias trusted -file trusted_ca.cer -trustcacerts -keystore certificate1.jks -storepass secret

mais ce jks ne fonctionne pas et j'obtiens la réponse HTTP '403: Interdit' lors de l'utilisation de ce certificat1.jks

Cependant, si j'importe ce certificat p12 (pfx) vers Internet Explorer, puis que j'exporte ce certificat depuis IE au format pfx en sélectionnant la case "Inclure tous les certificats dans le chemin de certification" et que j'utilise:

keytool -importkeystore -srckeystore certificate.pfx -srcstoretype PKCS12 -destkeystore certificate2.jks -deststoretype JKS -storepass secret
keytool -import -alias root -file root_ca_kir.cer -trustcacerts -keystore certificate2.jks -storepass secret
keytool -import -alias trusted -file trusted_ca_kir.cer -trustcacerts -keystore certificate2.jks -storepass secret

Ensuite, tout fonctionne correctement et je peux me connecter à WebService en utilisant certificate2.jks.

J'ai trouvé que le certificat original.p12 (pfx) ne contient qu'une seule entrée (longueur de la chaîne de certificats: 1):

keytool -list -keystore certificate.p12 -storepass secret -storetype PKCS12 -v


*******************************************
*******************************************

Alias name: alias
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=MyCompany, [email protected], O=bla, C=PL
Issuer: CN=Trusted CA, O=ble, C=PL
Serial number: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Valid from: ... until: ...
Certificate fingerprints:
         MD5:  XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
         SHA1: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
         Signature algorithm name: SHA1withRSA
         Version: 3

Extensions:

#1: ObjectId: X.X.XX.XX Criticality=false
KeyUsage [
  DigitalSignature
  Key_Encipherment
]

...

*******************************************
*******************************************

tandis que certificate.pfx exporté de IE avec "Inclure tous les certificats dans le chemin de certification" contient une chaîne de certificats avec un deuxième certificat de CA de confiance (Longueur de la chaîne de certificats: 2):

keytool -list -keystore certificate.p12 -storepass secret -storetype PKCS12 -v



*******************************************
*******************************************

Alias name: alias
Entry type: PrivateKeyEntry
Certificate chain length: 2
Certificate[1]:
Owner: CN=MyCompany, [email protected], O=bla, C=PL
Issuer: CN=Trusted CA, O=ble, C=PL
Serial number: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Valid from: ... until: ...
Certificate fingerprints:
         MD5:  XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
         SHA1: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
         Signature algorithm name: SHA1withRSA
         Version: 3

Extensions:

#1: ObjectId: X.X.XX.XX Criticality=false
KeyUsage [
  DigitalSignature
  Key_Encipherment
]

...

Certificate[2]:
Owner: CN=Trusted CA, O=ble ble ble, C=PL
Issuer: CN=ROOT CA, O=ble ble ble, C=PL
Serial number: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Valid from: ... until: ...
Certificate fingerprints:
         MD5:  XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
         SHA1: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
         Signature algorithm name: SHA1withRSA
         Version: 3

Extensions:


*******************************************
*******************************************

Donc, pour résoudre mon problème, j'ai besoin d'un certificat p12 avec une chaîne vers un certificat CA de confiance. Je peux le faire en important p12 dans IE puis en réexportant avec "Inclure tous les certificats dans le chemin de certification".

Comment puis-je le faire sans IE en utilisant keytool ou un autre outil?

Bary

16
bary

Propre réponse.

J'ai compris comment faire cela avec OpenSSL:

openssl pkcs12 -in certificate.p12 -out clientcert.pem -nodes -clcerts
openssl x509 -in trusted_ca.cer -inform DER -out trusted_ca.pem
openssl x509 -in root_ca.cer -inform DER -out root_ca.pem
cat clientcert.pem trusted_ca.pem root_ca.pem >> clientcertchain.pem
openssl pkcs12 -export -in clientcertchain.pem -out clientcertchain.pfx
37
bary

Si vous travaillez sous Windows OS, vous pouvez installer le certificat comme d'habitude via IIS, puis ouvrir mmc.exe -> Fichier -> Ajouter/Supprimer un composant logiciel enfichable -> Double-cliquez sur "Certificats" Sélectionnez "Compte d'ordinateur", ensuite, terminer, OK.

enter image description here

Développez les certificats, si nécessaire, ajoutez les certificats de l'autorité de certification dans "Autorités de certification intermédiaires" ou "Autorités de certification racines de confiance".

enter image description here

Ensuite, allez dans "Hébergement Web", voici vos certificats de site Web, sélectionnez le certificat, faites un clic gauche dessus, sélectionnez Exporter et suivez l'assistant, les choses importantes à vérifier sont "Inclure la clé privée", Inclure tous les certificats sur la chaîne, exporter toutes les propriétés étendues, vous devez définir un mot de passe, sélectionner le nom de la sortie flie et c'est tout. Vous avez maintenant un certificat avec la chaîne complète dessus. Plus de problèmes avec Facebook ou similaire.

0