出乎意料的是,php脚本中的单个XML curl调用停止了工作,抱怨证书问题:
SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
php中的curl getInfo返回:
array (
'url' => 'https://xmlpi-ea.dhl.com/XMLShippingServlet',
'content_type' => NULL,
'http_code' => 0,
'header_size' => 0,
'request_size' => 0,
'filetime' => -1,
'ssl_verify_result' => 0,
'redirect_count' => 0,
'total_time' => 0,
'namelookup_time' => 0.034813,
'connect_time' => 0.16098,
'pretransfer_time' => 0,
'size_upload' => 0,
'size_download' => 0,
'speed_download' => 0,
'speed_upload' => 0,
'download_content_length' => -1,
'upload_content_length' => -1,
'starttransfer_time' => 0,
'redirect_time' => 0,
'certinfo' =>
array (
)
)
查询沿着一个soap查询(到FedEx)和另外两个xml查询(到UPS和USPS)运行。 UPS查询还使用https链接,并没有出现此问题。我已经从DHL中提取并确认了PEM文件,我们使用ubuntu推荐的方法将其添加到服务器的ca-certificates.crt文件中,验证它已附加到该文件的末尾。
我尝试在代码中设置CAPATH以指向正确的目录:
curl_setopt($ ch,CURLOPT_CAPATH,'/ etc / ssl / certs /');
我可以让交换工作的唯一方法是设置验证,这是我们不想做的事情。 (如果可以获得安全性,我更愿意使用它)如上所述,直到几天前它才能正常工作。据我们所知,服务器上的任何内容都没有改变,DHL声称与ssl /证书相关的任何内容都没有改变,而且使用https的UPS也可以正常工作,没有添加证书或没有其他特殊处理。
另一个奇怪的是,DHL在我们所有的开发机器上仍然可以正常工作(虽然它们使用的是更新版本的curl,openssl等)。任何版本的curl或openssl都有任何已知问题,或者是否有人有还有其他任何可以尝试的建议吗?
我们服务器上的版本如下:
libcurl3 7.19.7-1ubuntu1.5
libcurl3-gnutls 7.19.7-1ubuntu1.5
php5-curl 5.3.2-1ubuntu4.22
libssl-dev 0.9.8k-7ubuntu8.15
libssl0.9.8 0.9.8k-7ubuntu8.15
openssl 0.9.8k-7ubuntu8.15
ssl-cert 1.0.23ubuntu2