0

我正在尝试连接到需要 SSL 证书固定的 Web 服务。以前的实现是用 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

有没有人遇到过这个问题。是我做错了什么还是 Web 服务有问题。

4

1 回答 1

0

问题不在于我的脚本,而在于服务器本身。此特定服务使用的证书已过时。但是我的 PHP 脚本在具有最新 CURL 版本的更新版本的 RedHat 上运行。

此 curl 版本不支持较小的 Diffie-Hellman 密钥。准确地说,它不支持小于 1023 的密钥。所以我通过修改 nss 配置修改了我的服务器以接受小至 768 的密钥。

我的服务提供商将更新他们的证书。

在这个问题上找到了一篇非常好的文章 - NSS 3.28.4-3.0.1 的 CURL 问题 - curl: (35) SSL 连接错误 - 密码 rsa_rc4_128 仅由 Mahesh Chopker工作

于 2018-07-25T05:56:47.737 回答