【问题标题】:Source of PEM files for web service access用于 Web 服务访问的 PEM 文件源
【发布时间】:2012-08-13 05:52:44
【问题描述】:

我应该更加关注涉及安全的课程。我对某事感到很困惑。首先,这是我要完成的工作的背景。

我有一个需要访问的网络服务。 Web 服务设置为 HTTPS。客户端和服务器之间的流量是加密的(这与身份验证无关)。

我正在通过 cURL 和 PHP 与 Web 服务进行交互。我已经获得了一个通过 HTTP 在本地工作的示例,并且我相当有信心在 cURL/PHP 方面我走在正确的轨道上。

当使用 HTTP 版本的代码通过 HTTPS 访问 Web 服务时,我得到一个 error code 60 "SSL certificate problem, verify that the CA cert is OK" (error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed)

从我的阅读来看,我似乎需要一个 PEM 文件,并且我需要设置额外的 cURL 选项,例如:

  • CURLOPT_CAINFO
  • CURLOPT_SSLCERT
  • CURLOPT_SSLKEYPASSWD

我的问题是我如何知道从哪里获取 PEM 文件或者我是否可以简单地制作它?这可能是一个显而易见的答案,因为我确定我错过了一些东西但我想我只需要询问并了解我所缺少的背景。

修正:Web 服务使用由 VeriSign 签署的证书。所以它不是自签名证书。此外,Web 服务由外部组织拥有和运营。

谢谢。

【问题讨论】:

  • 您使用的是自签名证书还是由证书颁发机构颁发的证书?
  • 我不知道——你是说网络服务吗? Web 服务不是我的……它是一个客户。我需要找出来吗?
  • CA = 证书颁发机构 -- 像 Digicert 这样的公司。它们基本上是创建浏览器接受的证书的寡头政治。是的,客户应该拥有所有相关信息。例如,如果您在浏览器中访问google.com,您可以查看由 Thawte Consulting (Pty) Ltd 签署的证书。该公司向您保证 google.com 的证书是合法的。
  • 我了解 CA。这不是问题......有问题的网络服务正在使用由 VeriSign 签名的证书。
  • 那我有点困惑。如果这是标准设置,则您不必在这里做任何特别的事情,除非他们的 Web 服务希望您发送自己的证书来验证您是否是 Web 服务的有效用户。我认为您确实需要与他们联系以获取更多信息。

标签: php curl public-key-encryption pem


【解决方案1】:

尽管在问这个问题之前四处搜索,但似乎我在与“thatidiotguy”(他的用户名,而不是我对他的名字。;-))进行了一些倒退之后偶然发现了答案。

cURL 开箱即用,不信任任何 CA(VeriSign 或其他)。这需要在您的服务器上进行设置。要“解决”问题,您有两种选择。您可以使用以下命令绕过验证:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

请注意,这在安全性方面并不是最佳的。任何证书,无论是否由 CA 签名,都将被接受为受信任的。

正确的解决方法包括获取原始证书(在我的情况下,这意味着 Web 服务)并将证书“导出”为 X.509 证书 (PEM)。然后证书需要适当地移动到服务器并设置以下配置:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); //Check that the common name exists and that it matches the host name of the server
curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/path/to/cert/my-exported.crt"); //PEM file

来源http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/

【讨论】:

    【解决方案2】:

    答案很简单。您需要下载一个证书包,它也随常规浏览器一起提供。

    幸运的是,这里已经为您完成了这项工作:

    http://curl.haxx.se/docs/caextract.html

    下载后,您可以使用 CURLOPT_CAINFO 指定此文件的路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      • 2012-04-27
      相关资源
      最近更新 更多