自签名认证SSL证书存在问题

时间:2020-11-01 13:27:20

标签: php openssl self-signed-certificate

我按照本指南在本地主机上安装了经过认证的自签名SSL证书,并且在Chrome中都可以正常运行(不再显示任何警告,如果在本地主机页面上使用https,则所有内容均为绿色):

Getting Chrome to accept self-signed localhost certificate

但是,如果我通过CURL在Ubuntu控制台上运行相同的请求,则会得到无法获取本地发行者证书

aherne@home-NUC8i7INH:~$ curl https://localhost
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html

使用https://curl.haxx.se/ca/cacert.pem的证书在PHP中重现此问题:

$ch = curl_init("https://localhost");
curl_setopt($ch, CURLOPT_CAINFO, "cacert.pem");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$body = curl_exec($ch);
if ($body===false) {
    throw new Exception(curl_error($ch), curl_errno($ch));
}
curl_close($ch);

在进一步验证时,使用openssl命令复制了问题:

aherne @ home:〜$ openssl s_client -connect localhost:443 \ n 已连接(00000005) 深度= 0 C = RO,ST =布加勒斯特,L =布加勒斯特,O =家,OU =家,CN =本地主机 验证错误:num = 20:无法获取本地颁发者证书 验证回报:1 深度= 0 C = RO,ST =布加勒斯特,L =布加勒斯特,O =家,OU =家,CN =本地主机 验证错误:num = 21:无法验证第一个证书 验证返回:1


有什么办法欺骗CURL接受我的证书以及认证它的权威(与Chrome相同)? 使cURL跳过SSL验证不是解决方案!

1 个答案:

答案 0 :(得分:1)

我相信可以让curl接受您的证书颁发机构的方法如下:

https://curl.haxx.se/docs/sslcerts.html

我怀疑这是最简单的方法:

如果使用curl命令行工具,则可以通过将环境变量CURL_CA_BUNDLE设置为所选路径来指定自己的CA证书文件。

相关问题