使用 PHP 中的 curl 连接到在证书包中显示过期根证书的站点
Connect to a site presenting an expired root certificate in the certificate bundle with curl in PHP
周末,Sectigo AddTrust External CA Root expired。对于现代浏览器,这对受影响网站的用户应该没有任何影响。
我们的 PHP 应用程序连接到我们无法控制的站点,该站点在其证书包中包含此过期的根目录。我们使用 curl 进行连接,并验证证书。但是由于这个根现在已经过期了,curl 现在拒绝连接,错误是证书已过期。
在 https://addtrustchain.test.certificatetest.com/
有一个示例站点表现出相同的行为
表现出相同行为的示例代码是
$ch = curl_init();
$url = 'https://addtrustchain.test.certificatetest.com/';
//$url = 'https://google.com';
$caPath = '/path/to/cacert.pem';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch,CURLOPT_CAINFO, $caPath);
$output = curl_exec($ch);
var_dump($output);
var_dump(curl_getinfo($ch));
var_dump(curl_errno($ch));
var_dump(curl_error($ch));
curl_close($ch);
是否有 php 方面的解决方法,我们可以忽略捆绑包中提供的过期根证书?我们正在尝试与另一方的各方合作,以 remove/update 从他们的捆绑包中获取过期的根目录,但如果下次出现这种情况时能从我们这边得到解决方案就太好了。
我已经尝试更新我们的本地 cacert.pem 以包括实际证书本身和提供的中介,但这些似乎都无法解决问题。
您需要从 cacert.pem 中删除 AddTrust External Root
。
对于那些想知道的人,您可以从那里获取 Mozilla 的 cacert.pem:https://curl.haxx.se/docs/caextract.html
然后您需要删除 AddTrust External Root
.
删除 AddTrust External Root
强制软件使用正确的路径认证(当您有多个时)。
例如,twinoid.com 有 3 条路径。其中两个有效,最后一个包含 AddTrust External Root
。 https://www.ssllabs.com/ssltest/analyze.html?d=twinoid.com&hideResults=on(你可以在那里查看 3 条路径)
周末,Sectigo AddTrust External CA Root expired。对于现代浏览器,这对受影响网站的用户应该没有任何影响。
我们的 PHP 应用程序连接到我们无法控制的站点,该站点在其证书包中包含此过期的根目录。我们使用 curl 进行连接,并验证证书。但是由于这个根现在已经过期了,curl 现在拒绝连接,错误是证书已过期。
在 https://addtrustchain.test.certificatetest.com/
有一个示例站点表现出相同的行为表现出相同行为的示例代码是
$ch = curl_init();
$url = 'https://addtrustchain.test.certificatetest.com/';
//$url = 'https://google.com';
$caPath = '/path/to/cacert.pem';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch,CURLOPT_CAINFO, $caPath);
$output = curl_exec($ch);
var_dump($output);
var_dump(curl_getinfo($ch));
var_dump(curl_errno($ch));
var_dump(curl_error($ch));
curl_close($ch);
是否有 php 方面的解决方法,我们可以忽略捆绑包中提供的过期根证书?我们正在尝试与另一方的各方合作,以 remove/update 从他们的捆绑包中获取过期的根目录,但如果下次出现这种情况时能从我们这边得到解决方案就太好了。
我已经尝试更新我们的本地 cacert.pem 以包括实际证书本身和提供的中介,但这些似乎都无法解决问题。
您需要从 cacert.pem 中删除 AddTrust External Root
。
对于那些想知道的人,您可以从那里获取 Mozilla 的 cacert.pem:https://curl.haxx.se/docs/caextract.html
然后您需要删除 AddTrust External Root
.
删除 AddTrust External Root
强制软件使用正确的路径认证(当您有多个时)。
例如,twinoid.com 有 3 条路径。其中两个有效,最后一个包含 AddTrust External Root
。 https://www.ssllabs.com/ssltest/analyze.html?d=twinoid.com&hideResults=on(你可以在那里查看 3 条路径)