Невозможно использовать libcurl для доступа к сайту, требующему аутентификации клиента

Я использую приведенный ниже фрагмент для установки сертификата и ключа для аутентификации клиента.

  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");

У сертификата нет пароля, я не знаю почему опция SSLCERTPASSWD существует, я просто указал фиктивное значение. Когда я запускаю программу в Linux, я получаю код ошибки 58 и сообщение об ошибке. невозможно установить файл закрытого ключа: 'privateKey.pem' тип PEM

Однако в Windows я получаю невозможно использовать сертификат клиента (ключ не найден или неверный пароль?)

Кажется, сертификат и ключ не совпадают, но я не знаю как. Я извлек и сертификат, и ключ из файла p12 с помощью команд openssl. Для извлечения ключа я использовал команду

openssl.exe pkcs12 -in client.p12 -nocerts -out privateKey.pem

, а для извлечения сертификата -

openssl.exe pkcs12 -in client.p12 -nokeys -out clientCert.pem

. Файл p12 был успешно использован в браузере для доступа к URL-адресу аутентификации клиента. Пожалуйста, помогите, прежде чем я застрелюсь.

Изменить: Вот доказательство того, что закрытый ключ и сертификат соответствуют друг другу:

[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

Так почему он не может работать?

5
задан Hugh Darling 25 May 2011 в 14:57
поделиться