cURL с сертификатами SSL завершается ошибкой: ошибка 58 не может установить файл закрытого ключа

Я пытаюсь подключиться к удаленному хосту с помощью cURL. Соединение требует использования сертификата и закрытого ключа, который защищен паролем. До сих пор я не смог с этим кодом ниже:

<?php
$wsdl       = 'https://domain.com/?wsdl';
$certFile   = getcwd() . '/auth/cert.pem';
$keyFile    = getcwd() . '/auth/key.pem';
$password   = 'pwd';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,           $wsdl);
curl_setopt($ch, CURLOPT_SSLCERT,       $certFile);
curl_setopt($ch, CURLOPT_SSLKEYPASSWD,  $password);
curl_setopt($ch, CURLOPT_SSLKEY,        $keyFile);
#curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
#curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
#curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$output = curl_exec($ch);

var_dump(curl_errno($ch));
var_dump(curl_error($ch));

В результате я получаю ошибку 58: unable to set private key file: '/home/.../domains/.../public_html/auth/key.pem' type PEM,

Вещи, которые я пробовал до сих пор:

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

7

Решение

Я исправил эту проблему. Я думаю, что из-за количества вопросов, касающихся этой проблемы и количества различных решений, другие получат пользу от решения. Вот оно:

Я использовал openssl Программа CLI для преобразования файла ключей .p12 в файл ключей .pem. Хитрость в том, как происходит преобразование.

Сначала я преобразовал это с этой командой, и у меня была проблема, как описано в вопросе:

openssl pkcs12 -in key.p12 -out key.pem -nodes -clcerts

В то время как команда ниже сделала настоящий трюк:

openssl pkcs12 -in key.p12 -out key.pem -clcerts

Для получения дополнительной информации см. Источник, который я использовал: https://community.qualys.com/docs/DOC-3273

11

Другие решения

На случай, если это будет полезно для других, ищущих эту проблему, я обнаружил, что CURLOPT_SSLCERT и CURLOPT_SSLKEY, похоже, не работают с относительными путями.

Это с WAMP, php версии 5.5 на Windows.

0

По вопросам рекламы [email protected]