中原威科

微擎微赞解决SSL connect error及CURLOPT_SSLVERSION解释

研究微信公众平台,用虚拟机安装了一个微赞,自定义菜单出现ssl错误,其他授权都不行,错误如下:

获取微信公众号授权失败, 请稍后重试!错误详情: SSL connect error

很是郁闷,看了一下源码,文件位置:./framework/function/communication.func.php

curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);

打印CURL_SSLVERSION_TLSv1看到其值为int(1)

phpinfo()查看ssl版本为NSS/3.21 Basic ECC

cURL版本(cURL Information)为7.19.7

CURL_SSLVERSION_TLSv1是在7.34.0版本中加入的(看下文详细介绍中的描述),所以出错就对了。。。

查看curl文档,的值应为:

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)

中的其中一个。

还有个提示:你最好别设置这个值,让它使用默认值。设置为 23 比较危险,在 SSLv2SSLv3 中有弱点存在。


所以根据提示,现在设置的值为也就是CURL_SSLVERSION_TLSv1的值为1,出现了SSL connect error,如果设置为23,文档提示比较危险,那就改为4吧,代码为:

curl_setopt($ch, CURLOPT_SSLVERSION, 4);

改完之后要更新一下缓存,再打开自定义菜单设置项,发现问题已解决。


测试CURLOPT_SSLVERSION的值设置为45都可以,6会出错,其实这段代码删了也一样。。。


OK,再来看看为什么VPS不会出错

VPS查看ssl版本为:OpenSSL/1.0.2jCURL_SSLVERSION_TLSv1的值为:int(1),cURL版本(cURL Information)为7.51.0

大致因为版本高吧,所以不会出错

搞不定了留言看看:)


另:虚拟机的SSL版本为NSS和VPS的SSL版本为openssl的区别,NSS 比 OpenSSL 大,并且需要其他外部库来对库进行编译,支持SSL v2和v3,TLS,PKCS # 5,PKCS # 7,PKCS # 11,PKCS # 12,S / MIME,X.509 v3证书,和其他安全标准。参考链接:https://developer.mozilla.org/zh-CN/docs/NSS

名称

CURLOPT_SSLVERSION - 设置首选TLS / SSL版本

概要

#include <curl / curl.h>

CURLcode curl_easy_setopt(CURL * handle,CURLOPT_SSLVERSION,long version);

描述

通过长参数来控制要使用哪个版本的SSL / TLS。

为此目的使用一个可用的定义。可用的选项有:

CURL_SSLVERSION_DEFAULT

默认动作。这将试图找出远程SSL协议版本。


CURL_SSLVERSION_TLSv1

TLSv1.x


CURL_SSLVERSION_SSLv2

SSLv2


CURL_SSLVERSION_SSLv3

SSLv3


CURL_SSLVERSION_TLSv1_0

TLSv1.0(在7.34.0中添加)


CURL_SSLVERSION_TLSv1_1

TLSv1.1(在7.34.0中添加)


CURL_SSLVERSION_TLSv1_2

TLSv1.2(在7.34.0中添加)


CURL_SSLVERSION_TLSv1_3

TLSv1.3(在7.52.0中添加)


CURL_SSLVERSION_MAX_DEFAULT

该标志将支持的最大TLS版本定义为TLSv1.2或SSL库中的默认值。只有NSS库目前允许一个获得最大支持的TLS版本。(在7.54.0中添加)


CURL_SSLVERSION_MAX_TLSv1_0

该标志将支持的最大TLS版本定义为TLSv1.0。(在7.54.0中添加)


CURL_SSLVERSION_MAX_TLSv1_1

该标志将支持的最大TLS版本定义为TLSv1.1。(在7.54.0中添加)


CURL_SSLVERSION_MAX_TLSv1_2

该标志将支持的最大TLS版本定义为TLSv1.2。(在7.54.0中添加)


CURL_SSLVERSION_MAX_TLSv1_3

该标志将支持的最大TLS版本定义为TLSv1.3。(在7.54.0中添加)

默认

CURL_SSLVERSION_DEFAULT

PROTOCOLS

所有基于TLS的协议:HTTPS,FTPS,IMAPS,POP3S,SMTPS等

CURL * curl = curl_easy_init();if(curl){  curl_easy_setopt(curl,CURLOPT_URL,“https://example.com”);   / *请求libcurl使用TLS版本1.1或更高版本* /  
curl_easy_setopt(curl,CURLOPT_SSLVERSION,CURL_SSLVERSION_TLSv1_1 | CURL_SSLVERSION_MAX_DEFAULT);   / *执行请求* /
curl_easy_perform(卷曲);}

可用性

自7.18.1起,SSLv2默认禁用。其他SSL版本的可用性可能会因为使用哪个后端libcurl而有所不同。

默认情况下,自7.39.0起禁用SSLv3。

返回值

返回CURLE_OK如果选项是支持的,并且不是CURLE_UNKNOWN_OPTION


赞 (0)
分享到: +More |