首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate验证失败

错误:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate验证失败
EN

Stack Overflow用户
提问于 2015-06-04 20:59:33
回答 2查看 1.1K关注 0票数 0

我有一个FreeBSD服务器FreeBSD hotspot.brightlan.net 6.2-RELEASE p6 FreeBSD 6.2-RELEASE p6 #0: Sat Jul 21 13:42:25

在这个服务器上,我有一个使用curl的php应用程序,它通过它们的api连接到Authorize.net。最近,他们更新了他们的SSL证书以支持sha256,因此SSL证书也发生了变化。此更改后,应用程序无法连接。如果我做了一个curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE),它连接成功,但是我想在SSL握手期间对服务器进行完整的验证。我注意到通过使用CURLOPT_CAINFO选项更新ca证书文件后,从不同的Linux服务器连接相同的gets。

但是在这个FreeBSD上,它没有连接。我还注意到,SSL证书是在通配符(即*.authorize.net )上颁发的。因此,在ubuntu服务器上,我还必须禁用CURLOPT_SSL_VERIFYHOST。但是在这个FreeBSD服务器上,它甚至根本不使用这个选项。服务器使用php版本PHP4.4.7(Cgi)有点陈旧(构建日期:2007年5月4日13:35:10)

任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-23 07:20:50

我终于发现openssl版本是问题背后的原因。直到0.9.8o才支持SHA256。因此,我尝试将openssl升级到最新的。由于我的系统很旧,所以不支持最新版本。因此,我成功地开始编译0.9.8o,但它破坏了内部使用的SSH。因此,我现在的目标是在不破坏SSH服务器的情况下将openssl升级到0.9.8o。

我开始深入研究,并找到了链接Openssl不同版本的方法,就像上面"Steffen“中提到的那样。我能够静态和动态地编译和链接OpenSSL0.9.8o,并且可以在下面的观察中找到。

当我们在启用openssl的情况下编译php时,curl不使用其链接的openssl连接到站点。在这里,我使用openssl的不同版本编译了php和curl (我甚至尝试过用静态openssl编译并链接curl )。使用php编译的openssl版本在连接到站点时使用优先,因此在我的示例中无法连接(由于SHA256 ssl证书& php-openssl-0.9.7e)。但是,如果我用更高版本的openssl(0.9.8o)重新编译php,那么它就能够连接。

另外,如果我在不启用openssl的情况下编译php,那么curl就能够在使用其链接的openssl 0.9.8o时进行连接。

我不知道这是否是一个bug,或者在php中是这样的,或者是在php/curl的最新版本中修复的。

但我认为从curl的角度来看,使用与php链接的openssl版本连接到站点是不正确的。它应该使用其链接的openssl版本(0.9.8o)连接到站点。当有人连接到网站时,应该使用openssl(0.9.7e)链接到php的版本。

票数 0
EN

Stack Overflow用户

发布于 2015-06-05 19:40:37

请注意,您正在运行的是一个非常老的系统,它不再受支持,并且可能已经积累了许多安全问题。我不确定,但我认为这个版本的FreeBSD附带了OpenSSL0.9.7,它太老了,无法支持用SHA-256签署的证书。

使用openssl version检查您的版本,请参阅https://support.globalsign.com/customer/portal/articles/1499561-sha-256-compatibility

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30654044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档