Я использую приведенный ниже код для настройки сертификата и ключа для аутентификации клиента.
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-адресу аутентификации клиента.
Пожалуйста, помогите, прежде чем я застрелюсь.
Edit:
Вот доказательство того, что закрытый ключ и сертификат соответствуют друг другу:
[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
Так почему же это не работает?