返回

解决cURL SSL证书错误:证书链中的自签名证书

php

攻克 SSL 证书错误:证书链中的自签名证书

当使用 cURL 向 VK OAuth API 发送请求时,你可能遇到过错误代码 60:“SSL 证书错误:证书链中的自签名证书”。这个错误表示服务器返回的 SSL 证书是由一个不受 cURL 信任的自签名证书颁发机构颁发的。

成因

自签名证书通常用于内部测试和开发环境,因为它们不是由受信任的证书颁发机构颁发的。当 cURL 尝试验证服务器证书时,它会检查颁发证书的证书颁发机构是否受信任。如果没有,它就会触发 SSL 证书错误。

解决方法

解决这个错误有几种方法:

  • 忽略 SSL 证书验证:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

不建议使用此方法,因为它会使你的应用程序容易受到中间人攻击。

  • 使用受信任的证书:

替换服务器证书为受信任的证书颁发机构颁发的 SSL 证书。这将确保 cURL 可以验证服务器证书并成功建立连接。

  • 将自签名证书添加到信任存储:

将自签名证书添加到 cURL 的信任存储中,让 cURL 可以识别和信任该证书。在 macOS 上,使用以下命令:

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain /path/to/self-signed-certificate.crt

在 Linux 上,使用以下命令:

sudo update-ca-certificates --fresh
sudo cp /path/to/self-signed-certificate.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
  • 使用第三方库:

使用第三方库处理 SSL 证书验证,例如 Guzzle 或 Buzz。这些库通常提供更高级别的控制和灵活性。

推荐的方法

强烈建议使用受信任的证书或将自签名证书添加到信任存储。 忽略 SSL 证书验证会使你的应用程序容易受到攻击。

常见问题解答

1. 为什么会出现这个错误?

可能是因为服务器使用的是自签名证书,而 cURL 无法验证该证书。

2. 忽略 SSL 证书验证安全吗?

不安全。忽略 SSL 证书验证会使你的应用程序容易受到中间人攻击。

3. 如何获得受信任的 SSL 证书?

你可以从受信任的证书颁发机构(如 Comodo、GoDaddy、DigiCert)购买一个受信任的 SSL 证书。

4. 如何将自签名证书添加到信任存储?

在 macOS 上,使用命令 sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain /path/to/self-signed-certificate.crt。在 Linux 上,使用命令 sudo update-ca-certificates --fresh; sudo cp /path/to/self-signed-certificate.crt /usr/local/share/ca-certificates/; sudo update-ca-certificates

5. 是否有其他方法可以解决这个错误?

是的,你可以使用第三方库(如 Guzzle 或 Buzz)来处理 SSL 证书验证。