Закрепление сертификата с PHP не работает - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь подключиться к веб-службе, для которой требуется закрепление SSL-сертификата. Предыдущая реализация была сделана с Java, и теперь я должен преобразовать ее в PHP.

Я преобразовал JKS в файл pem и использовал его, как показано ниже.

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSLKEY, "F:\www\key.pem"); 
curl_setopt($ch, CURLOPT_SSLVERSION, 6);
/// END     - CERTIFICATION ///

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_user_registration);
//curl_setopt($ch, CURLOPT_VERBOSE, true);
$result = curl_exec($ch);


if ($result == false) {
    echo "Satrt:";
    echo curl_error($ch);
    echo $result;
    echo ":End";
}
else{
    echo "No Error";
}

Но я получаю ошибку ниже.

error:14082174:SSL routines:ssl3_check_cert_and_algorithm:dh key too small

Кто-нибудь сталкивался с этой проблемой. Я что-то не так делаю или проблема в веб-сервисе.

1 Ответ

0 голосов
/ 25 июля 2018

Проблема была не с моим скриптом, а с самим сервером. Сертификат, используемый этой конкретной службой, устарел. Но мои PHP-скрипты работают на более новой версии RedHat, которая имеет последнюю версию CURL.

Эта версия curl не поддерживает меньшие ключи Диффи-Хеллмана. Точно, он не поддерживает ключи меньше 1023. Поэтому я изменил свой сервер так, чтобы принимать ключи размером всего 768, изменив конфигурации nss.

Мой поставщик услуг собирается обновить свой сертификат.

Нашел очень хорошую статью по этой проблеме - Проблема CURL с NSS 3.28.4-3.0.1 - curl: (35) Ошибка соединения SSL - шифры rsa_rc4_128 работают только от Mahesh Chopker

...