web-dev-qa-db-fra.com

Utiliser un certificat auto-signé avec cURL?

J'ai une application flask exécutée à l'aide d'un certificat auto-signé. Je peux envoyer une demande curl en utilisant:

curl -v -k -H "Content-Type: application/json" -d '{"data":"value1","key":"value2"}' https://<server_ip>:<port>

Les journaux détaillés montrent que tout s'est bien passé.

Je voulais éviter d'utiliser l'option -k (--insecure) et spécifier à la place un fichier .pem que curl pourrait utiliser. En regardant la page de manuel curl, j'ai découvert que vous pouviez le faire en utilisant l'option --cert. J'ai donc créé un fichier .pem en utilisant ceci:

openssl rsa -in server.key -text > private.pem

CURL me renvoie cette erreur lors de l'utilisation du fichier private.pem:

curl: (58) unable to use client certificate (no key found or wrong pass phrase?)

Aucune suggestion? - ou est-ce possible uniquement avec un certificat correctement signé?

Tnx

23
wholly_cow

Ceci est juste une autre version de cette question: tiliser openssl pour obtenir le certificat d'un serveur

Ou, plus franchement:

Utiliser curl --cert est faux, c'est pour les certificats clients.

Tout d'abord, obtenez les certificats que votre serveur utilise:

$ echo quit | openssl s_client -showcerts -servername server -connect server:443 > cacert.pem

(-servername est nécessaire pour SNI afin que vous obteniez le bon certificat du serveur virtuel)

Ensuite, faites en sorte que votre ligne de commande curl utilise cet ensemble pour vérifier le serveur dans les opérations suivantes:

$ curl --cacert cacert.pem https://server/ [and the rest]
48
Daniel Stenberg