Я пытаюсь подключиться к удаленному хосту с помощью 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
,
Вещи, которые я пробовал до сих пор:
openssl_private_key()
дает мне ресурс, а не логическое. Так что это кажется хорошим.SLL_VERIFY_PEER
, SSL_VERIFY_HOST
, SSL_CERTTYPE
и другие варианты, которые казались тривиальными в отношении официальных PHP-документов. Пока не повезло.Я почти уверен, что проблема кроется в моей конфигурации, но я не уверен, где искать.
Я исправил эту проблему. Я думаю, что из-за количества вопросов, касающихся этой проблемы и количества различных решений, другие получат пользу от решения. Вот оно:
Я использовал 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
На случай, если это будет полезно для других, ищущих эту проблему, я обнаружил, что CURLOPT_SSLCERT и CURLOPT_SSLKEY, похоже, не работают с относительными путями.
Это с WAMP, php версии 5.5 на Windows.