今天在对接内部关键字处理接口时发生一个报错CURLOPT_SSLVERSION ,因为之前一直用的是HTTP,后观接口地址改为HTTPS。一直报证书问题
文档地址 :http://www.php.net/manual/zh/function.curl-setopt.php
http 请求的CURL
/**
* [service description]
* @Author Jerry
* @DateTime 2018-11-24T17:07:50+0800
* @Example eg:
* @param [type] $url [description]
* @param [type] $header [description]
* @param [type] $json [description]
* @return [type] [description]
*/
protected function service($url,$header,$json){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS,$json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_HTTPHEADER,$header);
$result = curl_exec($ch);
if (curl_errno($ch)) {
print curl_error($ch);
}
curl_close($ch);
return $result;
}
> 结果一直报SSL: no alternative certificate subject name matches target host name 'xxx.xxx.xxx.xxx',我以为是对方证书的问题
排错后
protected function service($url,$header,$json){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS,$json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_HTTPHEADER,$header);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // 从证书中检查SSL加密算法是否存在
curl_setopt($ch, CURLOPT_SSLVERSION, 4);//设置SSL协议版本号
$result = curl_exec($ch);
if (curl_errno($ch)) {
print curl_error($ch);
}
curl_close($ch);
return $result;
}
注意点
CURLOPT_SSLVERSION 值的设定
CURL_SSLVERSION_DEFAULT (0), CURL_SSLVERSION_TLSv1 (1), CURL_SSLVERSION_SSLv2 (2), CURL_SSLVERSION_SSLv3 (3), CURL_SSLVERSION_TLSv1_0 (4), CURL_SSLVERSION_TLSv1_1 (5) , CURL_SSLVERSION_TLSv1_2 (6) 中的其中一个
Note:
你最好别设置这个值,让它使用默认值。 设置为 2 或 3 比较危险,在 SSLv2 和 SSLv3 中有弱点存在。