PHP: Использование CURL с сертифкатом
Задача: Некий удаленный ресурс проверяет сертификат пользователя, при попытке получить с него данные. В наличии только стандартные сертификаты выданные LetEncrypt.
Решение:
Сертификаты необходимо сконвертировать. В наличии:
- sert.crt — сертификат домена в PEM формате
- sert.key — приватный ключ PEM формате
Конвертируем используя промежуточную конвертацию в формат p12:
1 2 |
openssl pkcs12 -export -in sert.crt -inkey sert.key -out sert.p12 openssl pkcs12 -in sert.p12 -nodes -out result.pem |
По итогу получили файл result.pem. Далее его и будем использовать при работе с curl:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://некий ресурс"); curl_setopt($ch, CURLOPT_SSLCERT, WUO_ROOT."result.pem" ); curl_setopt($ch,CURLOPT_SSLCERTTYPE,"PEM"); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, True); curl_setopt($ch, CURLOPT_POST, True); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $post=http_build_query($post, '', '&'); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); curl_setopt($ch, CURLOPT_VERBOSE, true); $result = curl_exec($ch); curl_close($ch); |