На веб-сайте написано: «Вы не аутентифицированы с помощью цифрового сертификата, или, возможно, истекло время соединения. Повторная аутентификация с вашим цифровым сертификатом.».
Я получаю это сообщение каждый раз, а не соединениевремя истекает, я думаю, что моя попытка аутентификации просто не работает.
То, как я это делаю, я начинаю с простого файла pfx и парольной фразы, чтобы открыть его.Я делаю сертификат pem с openssl и pfx.
Код:
<?php
$pfx_path = 'me.pfx';
$pfx_pass = 'foopass123';
$pfx_values = [];
openssl_pkcs12_read(file_get_contents($pfx_path), $pfx_values, $pfx_pass);
$cert_path = 'me.pem';
file_put_contents($cert_path, $pfx_values['cert'] . "\n" . $pfx_values['pkey']);
$postfields = 'field1=val1&field2=val2&field3=val3';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL , 'https://www.example.com');
curl_setopt($ch, CURLOPT_POST , true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS , $postfields);
curl_setopt($ch, CURLOPT_SSLCERT , $cert_path);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
$curl_result = curl_exec($ch);
$curl_info = curl_getinfo($ch);
curl_close($ch);
Результат выполнения кода (показывает только цитату из HTML $ curl_result):
Вы не заверены с цифровым сертификатом, или, возможно, время подключения истекло.Повторная аутентификация с цифровым сертификатом.
Кстати, $curl_info['ssl_verify_result']
равен 0, что, я думаю, означает, что по крайней мере сервер был правильно аутентифицирован.
РЕДАКТИРОВАТЬ: удалено CURLOPT_SSLCERTPASSWD
, поскольку в этом нет необходимости, файл pfx уже был открыт с паролем, а его закрытый и открытый ключи были обнажены в $cert_path
.