我想让我的根证书保持最新,以便与 cURL 和 PHP 的内部curl
命令一起使用,但是目前没有参数可以下载正确安全连接所需的当前文件并保持最新。
在 PHP 中使用安全连接的示例curl
需要一个名为cacert.pem
(PEM 编码的证书链用于验证远程连接)的文件,如下所示:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.google.com");
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_CAINFO, "pathto/cacert.pem");
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
if (!($data = curl_exec($ch))) {
echo "No data received";
} else {
echo strlen($data) + " total byte(s)";
}
curl_close($ch);
而大多数人只是简单地设置CURLOPT_SSL_VERIFYPEER
为 false,从而忽略了这个问题,这很糟糕。您可以在此处看到证书颁发机构显示,如果您没有当前文件,则连接到安全服务器的唯一方法是禁用证书检查并进一步警告禁用对等验证背后的含义。
我要求的是一种维护本地副本的合法方式,cacert.pem
以便当我curl
在 PHP 中使用与其他服务器通信时,我可以继续安全地这样做。
这不是对外部资源或非现场链接等的请求,但是由于问题的性质,这可能是解决此问题的唯一方法,因为它需要在证书链被吊销时不断更新。迄今为止,无论是作为 curl 本身、php 或 php 的 curl 库的一部分,都无法获取此文件并继续维护它。虽然令人沮丧的是,这不是一个简单的更新命令curl --update-root-ca
会很好的东西,但它不以任何形式存在。