web-dev-qa-db-fra.com

cURL avec un certificat PKCS # 12 dans un script bash

je dois me connecter à un service Web, où un certificat pkcs12 est indispensable. L'idée était d'utiliser curl dans un script bash (sous OS X, pour être précis).

j'ai appris que l'une des rares choses que Curl ne peut pas faire en communication est la gestion des certificats pkcs12 (.p12). Quelles sont mes options?

j'ai lu que la conversion du certificat au format PEM fonctionnerait (avec openssl), mais je ne sais pas comment dire à curl qu'il obtient un PEM et qu'il devrait communiquer avec un service Web demandant des certificats PKCS12.

la conversion de pkcs12 en pem se ferait comme ceci (par exemple), cela a fonctionné pour moi, mais je ne les ai pas utilisées avec succès avec curl:

openssl pkcs12 -in mycert.p12 -out file.key.pem -nocerts -nodes
openssl pkcs12 -in mycert.p12 -out file.crt.pem -clcerts -nokeys

des allusions? ou des alternatives à curl? la solution doit être basée sur la ligne de commande.

32
svenson

Je pense que vous avez déjà résolu mais j'ai eu le même problème. Je réponds pour partager ma solution.

Si vous avez un fichier .p12, votre approche est la bonne. Tout d’abord, vous devez obtenir le certificat et la clé séparés du fichier p12. Par exemple, si vous avez un fichier mycert.p12, exécutez-le.

openssl pkcs12 -in mycert.p12 -out file.key.pem -nocerts -nodes
openssl pkcs12 -in mycert.p12 -out file.crt.pem -clcerts -nokeys

Ensuite, vous devez faire l'appel à votre URL. Par exemple, supposons que vous souhaitiez obtenir le wsdl d’un service Web spécifique

curl -E ./file.crt.pem --key ./file.key.pem https://myservice.com/service?wsdl

Si les fichiers file.crt.pem et file.key.pem se trouvent dans votre dossier de travail, "./" est obligatoire.

64
Smalltree1989

Vérifiez si vous avez une nouvelle boucle. Les versions plus récentes peuvent gérer PKCS12 directement.

curl --cert-type P12 --cert cert.p12:password https://yoursite.com
7
bioffe