【问题标题】:How do I add a Certificate Authority to PHP so the file() function trusts certificates signed by it?如何将证书颁发机构添加到 PHP,以便 file() 函数信任由它签名的证书?
【发布时间】:2017-06-05 22:55:42
【问题描述】:

我需要打开由私人公司的证书颁发机构签名的远程资源。目前,PHP 不会打开资源,因为它不信任证书签名者。

我知道你可以用流上下文对象做证书,但我正在寻找一种方法给 PHP 一个新证书颁发机构的公钥,并让file() 和类似的方法信任由该颁发机构签署的远程证书无需每次都创建流上下文

有没有办法向 php.ini 添加新的证书颁发机构?我尝试将 CA 的公钥添加到 /etc/ssl/certs/,但似乎无法识别。

【问题讨论】:

    标签: php ssl


    【解决方案1】:

    这是我的做法

    1- 我从 https://curl.se/docs/caextract.html 下载了 cacert.pem

    2- 我将证书复制到/usr/local/etc/ssl/certs/cacert.pem

    3- 我将这一行添加到 php.ini openssl.cafile= "/usr/local/etc/ssl/certs/cacert.pem" 并且对于 curl 支持这一行 curl.cainfo = "/usr/local/etc/ssl/certs/cacert.pem"

    4- 重启服务器并完成。

    【讨论】:

      【解决方案2】:

      Curl 使用包含所有 CA 的单个文件。要将新的 CA 添加到 Curl/PHP,您需要获取完整的包,将您的证书添加到包中,然后告诉 PHP 使用自定义包。

      1. 从 CURL 下载最新包并保存到 /etc/ssl/certs/cacert.pem:

      curl --remote-name --time-cond cacert.pem https://curl.haxx.se/ca/cacert.pem

      1. 编辑 /etc/ssl/certs/cacert.pem 文件,并将新的 CA 公钥添加到底部。

      2. 编辑php.ini并将openssl.cafile=/etc/ssl/certs/cacert.pem行添加到顶部(或底部)。

      3. 重启网络服务器。

      【讨论】:

      • 正确的地址是(现在):curl --remote-name --time-cond cacert.pem https://curl.se/ca/cacert.pem
      猜你喜欢
      • 2014-07-13
      • 1970-01-01
      • 2011-09-24
      • 2016-08-30
      • 2014-12-25
      • 1970-01-01
      • 2014-02-13
      相关资源
      最近更新 更多