Php curl https ssl证书问题错误#35

Php curl https ssl证书问题错误#35,php,ssl,curl,Php,Ssl,Curl,我有一台机器,具有https地址,并通过user和pass进行身份验证,ssl无效。所以我可以用linux命令行连接它: curl -k --anyauth -u username:password -d '{"flag":"all"}' -H "Content-Type:application/json" https://example.com 但我无法将其与此php连接: $curl=curl_init(); curl_setop

我有一台机器,具有https地址,并通过user和pass进行身份验证,ssl无效。所以我可以用linux命令行连接它:

curl -k --anyauth -u username:password -d '{"flag":"all"}' -H "Content-Type:application/json" https://example.com
但我无法将其与此php连接:

$curl=curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://example.com');
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY ) ;
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type:application/json;"));
curl_setopt($curl, CURLOPT_USERPWD, "username:password");
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_VERBOSE, 0);
$content = curl_exec($curl);
当我尝试将其与php连接时,出现以下错误:

Curl failed with error #35: error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure

一个可能的错误源是客户端试图使用服务器不支持的SSL3


您可以尝试使用
curl\u setopt($ch,CURLOPT\u SSLVERSION,curl\u SSLVERSION\u TLSv1\u 0)强制TLS1.0并查看是否有帮助。

不太可能。OpenSSL错误消息中的
sslv3
通常并不意味着实际使用了SSL 3.0,而是使用了同样的代码库,该代码库也实现了SSL 3.0。这可能是任何内容:没有通用TLS协议,没有共享密码,缺少客户端证书。它与服务器证书无关,因此禁用证书验证将没有帮助。因为它与命令行curl一起工作,而与PHP不一起工作,所以curl可能是因为两者都有不同的后端和/或版本。请提供curl--version
和的详细信息。@SteffenUllrich感谢您的评论。我在命令行中检查curl版本,即:curl 7.29.0,在phpinfo()中检查curl版本,即7.72.0。现在您至少有了一个解释,为什么curl命令行和PHP的行为不同,因为它们是不同的版本。考虑到旧版本可以工作,而新版本不能工作,我认为问题在于服务器的安全设置:较旧版本的curl可能接受比新版本更弱的协议和/或密码。不过,这只是猜测。为了更有用,需要curl(命令行和PHP)提供的详细版本信息,而不仅仅是版本号。我们还需要知道导致问题的目标域。@SteffenUllrich所以我认为必须将curl的php版本降级到7.29。可能需要在目标域中进行一些更改?我可以使用php中的curl访问其他域。对于测试,我使用无效的ssl运行另一个域,我可以使用php中的curl访问该域。请参阅我的评论,了解我需要哪些信息来提供有关问题原因的更多详细信息。只有知道问题的原因,我才能提出修复建议或解决问题。