我有一个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)
任何帮助都是非常感谢的。
发布于 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的版本。
发布于 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
https://stackoverflow.com/questions/30654044
复制相似问题