Я пытаюсь использовать бесплатный клиентский сертификат cacert.org в вызове curl. проверьте следующее …
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://url.com');
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_SSLCERT, 'cert.crt');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
Я скачал сертификат как PEM, теперь я получаю следующую ошибку …
unable to set private key file: 'cert.crt' type PEM
Я перепробовал все пути, но не смог исправить, попробовал также и Google. Пожалуйста помоги.
Я считаю, что проблема в том, что ваш файл сертификата не содержат закрытый ключ, и он не поставляется отдельно с помощью CURLOPT_SSLKEY
опция, которая указывает на соответствующий закрытый ключ для сертификата.
Я предполагаю, что сертификат был выдан вам из центра сертификации и установлен в вашем браузере. Когда это происходит, закрытый ключ хранится браузером в безопасном месте отдельно от сертификата (зависит от ОС & браузер).
Большинство браузеров не позволяют экспортировать сертификат и закрытый ключ без его шифрования (указав пароль). Но в зависимости от содержимого вашего файла PEM соответствующий закрытый ключ отсутствует.
Чтобы решить эту проблему, вам, вероятно, придется пройти несколько шагов:
Проблема сейчас в том, что закрытый ключ зашифрован, и, насколько я знаю, он должен быть незашифрован для cURL.
openssl
расшифровать закрытый ключ и экспортировать сертификат и ключ в формат PEMopenssl pkcs12 -in cert.p12 -nodes
(при этом будет запрашиваться пароль, используемый для шифрования при экспорте из браузера) (cert.p12 — это сертификат & закрытый ключ в формате PKCS12. -nodes
позволяет экспортировать закрытый ключ без шифрования)Это распечатает на стандартный вывод сертификат и ключ в формате PEM.
Вы должны увидеть два раздела:
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
а также
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
Скорее всего, у вас уже есть сертификат, но вам нужно сохранить закрытый ключ в другом файле. Поскольку он не зашифрован на сервере, соблюдайте осторожность, чтобы правильно установить разрешения, как правило, 0400
так что другие пользователи не могут получить к нему доступ
Других решений пока нет …