【问题标题】:CURL error: SSL certificate error: self signed certificate in certificate chainCURL 错误:SSL 证书错误:证书链中的自签名证书
【发布时间】:2018-06-20 12:32:55
【问题描述】:

除非我设置以下内容,否则我会收到上述错误:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

这是不安全的,违背了 SSL 的目的。

我已经从https://curl.haxx.se/ca/cacert.pem 下载了最新的 cacert.pem 证书。

我在 php.ini 中设置了以下内容并重新启动了 apache。

curl.cainfo = /etc/ssl/cacert.pem

这产生了同样的错误。 所以我尝试在运行时设置:

curl_setopt($curl,CURLOPT_CAINFO, "/etc/ssl/cacert.pem");

仍然出现同样的错误。

【问题讨论】:

  • 您确定自签名证书是由您正在使用的证书存储中的 CA 签名的吗?

标签: php ssl curl


【解决方案1】:

如果 SSL 证书由任何证书颁发机构 (CA) 签署,客户端应用程序(例如浏览器)会使用 CA 验证 SSL 证书。 CA 告诉客户端它是否是受信任的服务器。

当您使用自签名证书而不使用此选项时

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

您将收到错误消息,因为您的客户端应用程序将尝试使用证书颁发机构验证您的自签名 SSL 证书,而 CA 将给出错误,因为它是自签名证书。

这就是我们必须使用此选项来跳过 SSL 证书验证步骤的原因。

【讨论】:

  • 这不会导致 MITM 攻击吗?
  • 嗨@Kyle,这是我为您的问题找到的内容,“使用自签名证书并不意味着 MITM 是可能的,使用公共 CA 颁发的证书并不意味着 MITM 是不可能的。但是,如果使用自签名证书,则 MITM 更有可能是可能的,因为处理自签名证书的客户端通常以错误的方式处理这些。”阅读这篇文章的答案:link
最近更新 更多