使用PHP / curl突然SSL证书失败

时间:2014-02-04 16:40:38

标签: php xml curl ssl

出乎意料的是,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

0 个答案:

没有答案