сбой 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.

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

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

2 ответов


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

я использовал openssl программа CLI для преобразования .P12 key-file to a .PEM key-file. Фокус в том, как происходит преобразование.

сначала я конвертировал его с помощью этой команды и у меня была проблема, как описано в вопросе:

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


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

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