web-dev-qa-db-fra.com

curl: (58) Impossible de charger la clé client -8178

Je rencontre un problème SSL avec la commande curl. Je souhaite accéder à une URL à l'aide de mon certificat client SSL et de ma clé privée.

Voici ma commande:

$ curl -k -v "https://myurl.com/" --cert ./certificate.pem --key ./private.key

* About to connect() to xx.xx.xx.xx port 23444 (#0)
*   Trying xx.xx.xx.xx... connected
* Connected to xx.xx.xx.xx (xx.xx.xx.xx) port 23444 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* warning: ignoring value of ssl.verifyhost
* Unable to load client key -8178.
* NSS error -8178
* Closing connection #0
curl: (58) Unable to load client key -8178.

La clé est protégée par mot de passe, curl ne me demande pas de saisir le mot de passe, ce qui est très étrange. Même si je passe le mot de passe avec --pass, Je reçois toujours la même erreur.

Il semble que l'argument --key n'est pas pris en compte, car si j'ai remplacé par foo.key, qui n'existe pas sur mon système de fichiers, j'obtiens toujours la même erreur.

Cependant, si vous utilisez:

$ wget --certificate=./certificate.pem --private-key=private.key "https://myurl.com/" --no-check-certificate

Je peux accéder à mon URL.

Avez-vous une idée?

22
hzrari

J'ai vécu le même problème et j'ai finalement trouvé une solution, peut-être que cela peut vous aider.

L'échec était dû à la clé privée au format PKCS # 8 :

  • une clé privée PKCS # 8 commence par -----BEGIN ENCRYPTED PRIVATE KEY----- entête
    ou
    -----BEGIN PRIVATE KEY----- entête

    Avec cette clé curl + openssl fonctionnera, mais curl + nss + libnsspem.so non.

  • avec une clé privée RSA qui commence par
    -----BEGIN RSA PRIVATE KEY----- entête

    curl + openssl et curl + nss + libnsspem.so marchera.

Alors utilisez cette commande

openssl pkcs8 -in path/to/your/pkcs8/key -out path/to/rsa/key

pour convertir la clé PKCS # 8 en clé RSA traditionnelle.

21
jfly

Si votre certificat a une phrase secrète, vous devez l'ajouter après le nom du certificat:

curl -k -v "https://myurl.com/" --cert ./certificate.pem:passphrase --key ./private.key
2
whats_done_is