Php 使用curl时,出于安全原因,如何保持cacert.pem的最新状态?

Php 使用curl时,出于安全原因,如何保持cacert.pem的最新状态?,php,curl,mozilla,pem,php-openssl,Php,Curl,Mozilla,Pem,Php Openssl,我想让我的根证书保持最新,以便与cURL和PHP的内部cURL命令一起使用,但是目前没有参数可以下载正确安全连接所需的当前文件并保持其最新状态 在PHP中使用curl进行安全连接的示例如下,该连接需要名为cacert.pem的文件(用于验证远程连接的pem编码证书链): $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://www.google.com"); curl_setopt($ch, CURLOPT_CONNECTTIMEOU

我想让我的根证书保持最新,以便与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\u SSL\u VERIFYPEER
设置为false,从而忽略了这个问题。你可以

我所要求的是一种合法的方式来维护
cacert.pem
的本地副本,这样当我在PHP中使用
curl
与其他服务器通信时,我就可以安全地继续这样做


这不是对外部资源或非现场链接等的请求,但是由于问题的性质,这可能是解决此问题的唯一方法,因为它需要在证书链被撤销时不断更新。到目前为止,无论是作为curl本身发行版的一部分,还是作为php发行版的一部分,还是作为php的curl库的一部分,都无法获取该文件并继续对其进行维护。虽然令人沮丧的是,这不是像
curl--update root ca
这样的简单更新命令所能做到的,但它并没有以任何形式存在。

自从最初撰写本文以来,(因此这次重写),我能够解决我自己的问题,包括直接链接到维护该文件的唯一合法来源,该文件由
curl
at的作者维护

此外,随着技术的进步,这个问题已经更新,以显示如何在PHP中使用
curl
,并强制TLS v1.2连接(某些事务提供商要求或推荐,但可能不提供如何执行此操作的信息)

关于证书颁发机构,有几个关键根颁发机构,例如:

  • 赛门铁克
  • RapidSSL
  • 解冻
  • 地理信托
  • 科摩多
以及其他性质的机构,如

  • 微软
  • Mozilla
  • 谷歌

这可以成为任何希望维护自己的cacert.pem的人的框架。请记住,您需要从相应的crl下载其吊销列表(已被违反或过期的证书),以维护适当的信任机制,虽然您应该能够下载它们的根证书链,并将它们作为本地授权文件作为您的cacert.pem使用,但是
cacert.pem使用。不存在信任证书的最终权限,但是web浏览器使用的列表是一个很好的来源。由于CA变更和安全实践的变更,这些列表会不断更新

curl
的作者维护了一个工具,可以从Firefox中提取
cacert.pem
,并在他们的网站上发布合理的最新输出:

  • curl
  • :对于最具安全意识的,请下载该工具,检查源代码并在您自己的Firefox上运行

你得到赏金是因为没有其他人给出好的答案,但我觉得这并不能真正解决什么是官方来源的问题。所以我发布了我自己的答案。有趣的是,该网站不支持基于https的下载,所以如果你从那里获得证书,你可能正在下载受威胁的授权!显然,有一个用于引导的http版本是有用的。@android.weasel-这是一个很好的评论,但是对于受损的权限来说,这是不正确的。该文件为纯文本。托管在非ssl上(这绝对是讽刺的),这只意味着信息可以被传输中的其他人查看。因为在该页面上没有代码,所以考虑XSS/ETC作为注入攻击是不现实的,因为没有数据攻击是因为原始的非Excel文本。(我确实投票赞成你的评论,虽然我同意没有在SSL/TLS上主持的讽刺)@萨努埃尔杰克逊,我想MITM取代比XSS更多-有人把我转移到一个带有受损证书的网站的克隆,虽然老实说,我正处于一个令人沮丧的问题当中,而证书只是一步。因此,我没有深入思考除此之外,其他人可能会做些什么——我认为,利用一个受损的证书将是一件轻松的事情。我最终从Firefox中导出了我需要的一个,这让我感觉很安全。现在这是一个更好的答案。我删除了我的评论和否决票:)