例如php通过 file_get_contents() 访问网站信息,在升级https后出现异常。
file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed
C#客户端访问网站API时也发生了异常:
System.AggregateException HResult = 0x80131500 Message =发生一个或多个错误。SocketException:现有连接被远程主机强行关闭
主要是https的加密协议兼容性问题,目前的证书一般都开启了tls1.2以上的加密协议,避免低版本加密协议的漏洞。
也有可能是证书信任问题。
PHP 访问https的调整修正方式:
$url = '请求地址';
或者使用 curl 来处理:
[复制到剪贴板] |
$option=array('ssl'=>array('verify_peer' => false,'verify_peer_name' => false));
$txt = @file_get_contents($url, false, stream_context_create($option)
或者使用 curl 来处理:
[复制到剪贴板] |
function curl_get($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSLVERSION,3);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
C# 中的处理方式
证书验证问题可以用下面的代码关闭:
TLS协议版本的问题可以用下面的代码初始化:
[复制到剪贴板] |
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
TLS协议版本的问题可以用下面的代码初始化:
[复制到剪贴板] |
ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
// | SecurityProtocolType.Ssl3;