Impossible d'utiliser libcurl pour accéder à un site nécessitant l'authentification du client
Je suis en utilisant le ci-dessous ciselée pour le réglage du certificat et de la clé pour l'authentification du client.
curl_easy_setopt(curl,CURLOPT_SSLCERT,"clientCert.pem");
curl_easy_setopt(curl,CURLOPT_SSLCERTPASSWD,"changeit");
curl_easy_setopt(curl,CURLOPT_SSLCERTTYPE,"PEM");
curl_easy_setopt(curl,CURLOPT_SSLKEY,"privateKey.pem");
curl_easy_setopt(curl,CURLOPT_SSLKEYPASSWD,"changeit");
curl_easy_setopt(curl,CURLOPT_SSLKEYTYPE,"PEM");
Le certificat n'a pas un mot de passe, je ne sais pas pourquoi sur la terre l'option SSLCERTPASSWD existe, je l'ai juste fourni une valeur factice.
Quand je lance le programme sur Linux, je reçois un code d'erreur de 58 et un message d'erreur
impossible de définir le fichier de clé privée: 'privateKey.pem' type PEM
Sur Windows mais j'ai
incapables d'utiliser le certificat du client (pas de clé ou mauvais mot de passe?)
Il semble suggérer le certificat et la clé ne correspondent pas, mais je ne sais pas comment. J'ai extrait les deux le cert et la clé à partir d'un fichier p12 à l'aide de commandes.
La commande que j'ai utilisé pour extraire la clé est
openssl.exe pkcs12 -in client.p12 -nocerts -out privateKey.pem
et la commande utilisée pour extraire le cert est
openssl.exe pkcs12 -in client.p12 -nokeys -out clientCert.pem
Le fichier p12 a été utilisé avec succès dans un navigateur pour accéder à l'authentification du client de l'url.
S'il vous plaît aider avant que je tire moi-même.
Edit:
Ici est la preuve que la clé privée et du certificat correspondant à chacune des autres:
[debugbld@nagara ~/curlm]$ openssl x509 -noout -modulus -in clientCert.pem | openssl md5
d7207cf82b771251471672dd54c59927
[debugbld@nagara ~/curlm]$ openssl rsa -noout -modulus -in privateKey.pem | openssl md5
Enter pass phrase for privateKey.pem:
d7207cf82b771251471672dd54c59927
Alors pourquoi ne peut-il pas travailler?
OriginalL'auteur Hugh Darling | 2011-05-25
Vous devez vous connecter pour publier un commentaire.
À l'aide de la ligne de commande curl, j'ai eu la même erreur à l'aide d'un .fichier pem qui a également été obtenue avec openssl à partir d'un fichier p12 p12 a également été en mesure de travailler correctement, de faire de l'authentification du client lors de leur importation dans un navigateur. Comme vous l'avez décrit, je pense.
Mon problème a été causé parce que le .fichier pem n'était pas la liste des certificats dans le bon ordre: il semble que chaque certificat dans le fichier doit être suivie de son certificat de l'émetteur. J'ai édité le fichier et modifier l'ordre des sections et la boucle était heureux.
Pour l'enregistrement, mon original .fichier p12 a été obtenue par la sauvegarde d'un certificat à partir de Firefox.
Également noter que dans mon cas, je n'allais pas invité à entrer le mot de passe et obtient la
avant l'invite de mot de passe
OriginalL'auteur xverges
J'ai été confronté à des problèmes similaires, j'ai découvert que le problème était lié à des autorisations de fichier du certificat et de la clé privée de fichiers. Le processus de l'exécution de PHP n'ont pas lu l'accès à ces fichiers.
Une chose que vous pouvez essayer (et qui m'a aidé à trouver ce out) consiste à exécuter le code suivant:
et de vérifier si la valeur retournée n'est pas faux et il n'y a pas d'erreurs. J'ai été faire:
OriginalL'auteur raugfer
Merci Hugues pour le fil et raugfer pour la openssl soupçon. Le plus tard: à la fois utile et trompeuse. 😉
En fait, j'ai résolu le problème en faisant en sorte que le chemin d'accès du fichier de clé est correcte. Et ici, c'est pourquoi la openssl soupçon est trompeur, bien m'aider à vérifier si mon fichier PEM était ok:
cURL besoins le chemin d'accès complet, mais sans 'file://' préfixe. Alors que fopen est heureux avec un chemin relatif, cURL n'est pas. Donc, tous mes tests d'ouvrir le fichier de clé avait été couronnée de succès, tandis que cURL n'a pas été.
Btw.:
ne sont pas nécessaires, comme le mot de passe n'est utilisé que pour déchiffrer la clé privée et le PEM est la valeur par défaut.
OriginalL'auteur Andreas Stankewitz