如何向PHP添加证书颁发机构,以便file()函数信任由其签名的证书?

11
我需要打开由私人公司证书颁发机构签名的远程资源,目前,PHP无法打开这些资源,因为它不信任证书签名者。
我知道你可以使用流上下文对象处理证书,但我正在寻找一种方法,即通过给PHP新的证书颁发机构的公钥,让file()和类似方法信任由该颁发机构签名的远程证书而无需每次创建流上下文
是否有办法将新的证书颁发机构添加到php.ini中?我尝试将CA的公钥添加到/etc/ssl/certs/中,但似乎没有被识别。
3个回答

16
``` 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
2. 编辑“/etc/ssl/certs/cacert.pem”文件,在底部添加您新的CA公钥。 3. 编辑“php.ini”并在顶部(或底部)添加一行“openssl.cafile=/etc/ssl/certs/cacert.pem”。 4. 重启web服务器。 ```

1
正确的地址是(现在):curl --remote-name --time-cond cacert.pem https://curl.se/ca/cacert.pem - Remo
此外,在Ubuntu上,php默认使用“操作系统管理的证书存储”。因此,您只需将其他文件放入/etc/ssl/certs即可。但是,似乎curl不使用此存储,而是使用自己的存储,这使得事情有些混乱和不直观。 - undefined

4

以下是我完成这个操作的步骤:

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- 重新启动服务器即可完成操作。


谢谢,这对我有用。在某些情况下,你会有cert.pem而不是cacert.pem。这里的相同步骤应该可以工作。 - Czar Pino

2

我想出了以下步骤:

使用以下命令找到你的php.ini文件

php -i | grep "Loaded Configuration File"

php.ini 中验证/指定证书路径。
curl.cainfo =/your/path/cacert.pem
openssl.cafile=/your/path/cacert.pem

最棘手的部分:

如果您需要添加自定义证书,请将其附加到/your/path/cacert.pem,它应该长这样。

-----BEGIN CERTIFICATE-----
BLABLABLABLABLABLABLABLABLA
BLABLABLABLABLABLABLABLABLA
-----END CERTIFICATE-----

在我的情况下,我没有必要重新启动任何东西(只有 PHP 脚本本身),但我猜这取决于具体情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接