php使用curl扩展请求HTTPS链接报sslv3 alert 错误

报错信息

使用php的curl请求https链接时报"error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure" 错误

原因分析

使用php的curl扩展时,curl_setop的CURLOPT_SSLVERSION取值为3,对应协议为ssl v3,因为之前的POODLE 病毒爆发,许多网站禁用了sslv3(nginx默认是禁用的,ssl_protocols 默认值为TLSv1 TLSv1.1 TLSv1.2;)

解决办法

curl_setopt($ch, CURLOPT_SSLVERSION, 3);   

改为

curl_setopt($ch, CURLOPT_SSLVERSION, 4);

CURLOPT_SSLVERSION 取值及含义

  • CURL_SSLVERSION_TLSv1_2 需要php版本>=5.5.19
  • TLS 1.1 and TLS 1.2 are supported since OpenSSL 1.0.1
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).

REF

function.curl-setopt

tls-1-2-not-working-in-curl

php-35-error14094410ssl-routinesssl3-read-bytessslv3-alert-handshake-failur

when-was-tls-1-2-support-added-to-openssl

how-to-disable-sslv3-in-linux

原文地址:https://blog.51cto.com/xoyabc/2417615

时间: 2024-10-06 10:24:52

php使用curl扩展请求HTTPS链接报sslv3 alert 错误的相关文章

Linux下PHP5.2安装curl扩展支持https

问题: 线上运行的LNMP服务器,因历史原因安装的curl模块只支持http,不支持https.类似请求或POST微信接口(小程序),都无法正常使用. 一.解决方法: 编译安装curl,重新编译php,使php的curl模块支持https. cd /data0/software1.下载安装curlwget http://curl.haxx.se/download/curl-7.44.0.tar.gztar zxvf curl-7.44.0.tar.gzcd curl-7.44.0./config

在 .NET 中远程请求 https 内容时,发生错误:根据验证过程,远程证书无效。

当访问 https 内容的时候,有时候经常会看到证书错误(不在操作系统的证书信任链中?)的提示,在浏览器中我们可以忽略错误的证书,继续访问网页内容. 但是在 .NET 程序中,需要由代码来判断是否忽略错误的证书.   解决方案: 在任意访问 https 内容的程序代码之前,设置一个证书处理程序,代码如下: ServicePointManager.ServerCertificateValidationCallback = (sender, cert, chain, error) => { retu

file_get_contents无法请求https连接的解决方法 php开启curl

file_get_contents无法请求https连接的解决方法 方法1: PHP.ini默认配置下,用file_get_contents读取https的链接,就会如下错误: Warning: fopen() [function.fopen]: Unable to find the wrapper "https" - did you forget to enable it when you configured PHP? 解决方案有3:1.windows下的PHP,只需要到php.i

PHP Curl请求Https接口

在请求http的时候只需要 file_get_contents("http://www.sojson.com/open/api/weather/json.shtml?city=$Position");就可以了,但是发现这个接口现在变成了https协议了还用这种方法就会403首先看看PHP有没有curl扩展,我是7.2 我用的是Laravel社区的封装好的方法 public static function curl($url, $params = false, $ispost = 0,

curl 请求https内容,返回空

$ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$api); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//禁止直接显示获取的内容 重要 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //不验证证书下同 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // $json = curl_exec($ch);

nginx+php下curl请求https报502错

在做公司项目的时候使用了第三方的API接口,且接口采用的是https请求,在本地的wamp集成环境开发测试正常,放到服务器上结果报错 nginx 502 bad gateway.在论坛中爬楼了几天今天终于找到原因,php版本问题: 公司项目线上环境: 服务器安装了wdcp其中nginx是1.4.2版本 php是5.2.17版本 部署项目上去后,怎么运行都报502错,刚开始怀疑是nginx配置问题,百度了许久说请求https需要ssl于是配置了nginx的ssl后问题依旧,无奈只好继续搜索答案.

PHP:CURL分别以GET、POST方式请求HTTPS协议接口api

1.curl以GET方式请求https协议接口 //注意:这里的$url已经包含参数了,不带参数你自己处理哦GET很简单 function curl_get_https($url){ $curl = curl_init(); // 启动一个CURL会话 curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1)

PHP函数CURL分别以GET、POST方式请求HTTPS协议接口api

1.curl以GET方式请求https协议接口 1 function curl_get_https($url){ 2 $curl = curl_init(); // 启动一个CURL会话 3 curl_setopt($curl, CURLOPT_URL, $url); 4 curl_setopt($curl, CURLOPT_HEADER, 0); 5 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 6 curl_setopt($curl, CURL

curl分别以get,post方式请求https协议接口api

1.curl以GET方式请求https协议接口 //注意:这里的$url已经包含参数了,不带参数你自己处理哦GET很简单 function curl_get_https($url){ $curl = curl_init(); // 启动一个CURL会话 curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1)