Я пытаюсь собрать некоторые данные с помощью Curl
, подключаясь к сервису, предоставленному какой-либо внешней компанией. Они, помимо адреса, отправили мне файл сертификата p12
, необходимый для установления соединения.
Когда я пытаюсь использовать его с curl
, я получаю следующую ошибку:
#58: not supported file type 'P12' for certificate
До сих пор я пробовал обновлять завиток и php-curl. Ничего не изменилось.
Мой код:
... curl_setopt($ch, CURLOPT_SSLCERT, 'cert_path'); curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'P12'); curl_setopt($ch, CURLOPT_SSLCERTPASSWD, 'my_pass'); ...
Смешно, что этот код работает в нашей производственной среде, в то время как он не работает на моей локальной машине (Linux Mint 16).
Нашел решение.
Самый простой способ сделать это – извлечь ключ .pem
и сертификат из файла .p12
.
Например (проверено на linux
):
openssl pkcs12 -in file.p12 -out file.key.pem -nocerts -nodes openssl pkcs12 -in file.p12 -out file.crt.pem -clcerts -nokeys
Будет создана пара ключей / сертификатов в текущем каталоге.
Теперь, чтобы использовать его:
curl_setopt($ch, CURLOPT_SSLCERT, 'file.crt.pem'); curl_setopt($ch, CURLOPT_SSLKEY, 'file.key.pem'); curl_setopt($ch, CURLOPT_SSLCERTPASSWD, 'pass'); curl_setopt($ch, CURLOPT_SSLKEYPASSWD, 'pass');
Где pass
пароль из файла .p12
.