ssl — ошибка PHP CURL: невозможно использовать сертификат клиента (ключ не найден или неверная парольная фраза?)

Я делаю это:

$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, '1');
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, '2');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, '1');
curl_setopt($ch, CURLOPT_CAINFO,  getcwd().'/public.pem');
curl_setopt($ch, CURLOPT_SSLCERT, getcwd().'/private.key');
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, '1234');
curl_setopt($ch, CURLOPT_SSLKEYPASSWD, '1234');
curl_setopt($ch, CURLOPT_URL, "http://api-xxxxxx.duosecurity.com/auth/v2/preauth");
$dataa = curl_exec($ch);

Я получаю эту ошибку: unable to use client certificate (no key found or wrong pass phrase?)

Что мне не хватает? Если код в порядке, не могли бы вы, пожалуйста, как сгенерировать пару сертификатов для этой цели используется либо openssl ИЛИ ЖЕ ssh-keygen?

1

Решение

Вот как вы подключаетесь к Yahoo через HTTPS

$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, '1');
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, '2');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, '1');
curl_setopt($ch, CURLOPT_URL, "https://m.yahoo.com/");
$dataa = curl_exec($ch);

Вы не используете клиентские сертификаты для связи с узлами HTTPS.

Причины, по которым браузеры / клиенты не используют клиентские сертификаты, слишком разнообразны, чтобы перечислять их здесь.

Кажется, что клиентские сертификаты являются методом аутентификации или входа в систему на веб-сайте — они не являются частью шифрования связи с сервером.

https://en.wikipedia.org/wiki/Client_certificate

https://pilif.github.io/2008/05/why-is-nobody-using-ssl-client-certificates/

http://blogs.msdn.com/b/kaushal/archive/2012/02/18/client-certificates-v-s-server-certificates.aspx

Обновить

Узнав, что первоначальный вопрос касается API duosecurity, а не обычного http-соединения Yahoo, я посмотрел на API-документы duo и JS & Клиентские библиотеки PHP. Я не могу найти ссылку на клиентские SSL-сертификаты.

Чтобы вернуться назад и решить исходную ошибку «ключ не найден или неверная парольная фраза», мы должны взглянуть на настройки CURLOPT_ *.

В исходном вопросе сертификат и ключ неправильно определены в настройках curlopt.

$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, '1');
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, '2');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, '1');

curl_setopt($ch, CURLOPT_SSLCERT,  getcwd().'/public.pem');
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, '1234');

curl_setopt($ch, CURLOPT_SSLKEY, getcwd().'/private.key');
curl_setopt($ch, CURLOPT_SSLKEYPASSWD, '1234');
curl_setopt($ch, CURLOPT_URL, "http://api-xxxxxx.duosecurity.com/auth/v2/preauth");
$dataa = curl_exec($ch);

Используйте SSLCERT (ПАРОЛЬ) и SSLKEY (ПАРОЛЬ), чтобы включить сертификаты на стороне клиента. Маловероятно, что вашим сертификатам на стороне клиента требуется CA — CURLOPT_CAINFO используется только для идентификации партнера, а не для вас.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]