我正在尝试连接到需要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服务出现问题?
答案 0 :(得分:0)
问题不在我的脚本中,而是服务器本身。此特定服务使用的证书已过时。但是我的PHP脚本在更新版本的RedHat上运行,该版本具有最新的CURL版本。
此curl版本不支持较小的Diffie-Hellman键。恰恰是,它不支持小于1023的密钥。因此,我通过修改nss配置将服务器修改为接受小至768的密钥。
我的服务提供商将更新其证书。
在此问题上找到了非常好的文章-Mahesh Chopker的CURL issue with NSS 3.28.4-3.0.1 - curl: (35) SSL connect error - ciphers rsa_rc4_128 only working