PHP cURL: Fixing the “SSL certificate problem: unable to get local issuer certificate” error.

如果你使用PHP的cURL函数来请求一个HTTPS URL,你可能会遇到以下错误:

SSL证书问题:无法获得本地颁发者证书。(cURL error code 60)

当您试图使用PHP的cURL函数请求到HTTPS网站时,这是一个常见的错误。实际上,您的cURL客户端还没有配置启用ssl去请求URL网站。

快速修复。

如果您不关心安全性,并且正在寻找快速解决方案,那么您可以简单地禁用以下cURL选项:

  • CURLOPT\u SSL\u VERIFYHOST:这个选项告诉cURL它必须验证服务器证书中的主机名。
  • CURLOPT\u SSL\u VERIFYPEER:这个选项告诉cURL验证服务器上SSL证书的真实性。

禁用这两个选项将禁用SSL验证。
要禁用这两个选项,可以使用curl\u setopt函数,如下所示:

//The URL we are connecting to.
$url = 'https://google.com';

//Initiate cURL.
$ch = curl_init($url);

//Disable CURLOPT_SSL_VERIFYHOST and CURLOPT_SSL_VERIFYPEER by
//setting them to false.
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

//Execute the request.
curl_exec($ch);

//Check for errors.
if(curl_errno($ch)){
    throw new Exception(curl_error($ch));
}

上面的代码本质上告诉cURL,我们不关心服务器是否具有有效的SSL证书。我们无论如何都想连接到它。
这个方法的问题是它不安全,而且会让你受到中间人攻击。简单地说,这意味着攻击者可能会截获您在cURL请求中发送的数据。

在PHP的cURL函数中使用cert

要将证书与PHP的cURL函数一起使用,可以从官方网站下载cacert.pem公司证书, 一旦你下载了cacert.pem公司文件,您应该将其移动到对您和您的设置最有意义的目录。在Windows上,我把包移到了C:\wamp\cacert.pem公司
然后,您可以使用cURL\u setopt函数简单地告诉cURL您的证书包位于何处:

//Tell cURL where our certificate bundle is located.
$certificate = "C:\wamp\cacert.pem";
curl_setopt($ch, CURLOPT_CAINFO, $certificate);
curl_setopt($ch, CURLOPT_CAPATH, $certificate);

这允许我们向服务器发出安全请求,并防止任何中间人攻击。

将证书添加到php.ini文件文件。

如果您不喜欢在PHP代码中指定证书包的位置,那么可以将其路径信息添加到php.ini文件:

curl.cainfo="C:\wamp\cacert.pem" 
openssl.cafile="C:\wamp\cacert.pem"

一旦你把上面的行添加到你的php.ini文件文件中,请确保重新启动web服务器/PHP进程,以便更改生效。

用PHP的filter_var函数验证IP地址
包含所有基本功能的最小bash脚本范例
Tags:,