PHP cURL 函数是一个在 PHP 中处理 URL 的强大工具。它允许我们模拟 HTTP 请求并与远程服务器进行交互。在使用 cURL 发送https请求时,常常会涉及到证书的验证,本文将讨论如何在 PHP cURL 函数中使用证书。
首先,让我们看一下使用 cURL 发送 https 请求的基本用法:CURLOPT_SSL_VERIFYHOST 和CURLOPT_SSL_VERIFYPEER 开启 SSL 验证,这意味着当我们访问一个远程 https 站点时,会验证远程站点 SSL 证书是否是有效、不过期的,并且证书颁发机构是否被自己所信任。但在某些场景下(如测试环境,一些自签发的 SSL 证书、部分 CA 证书等),需要关闭 SSL 验证或者使用自定义证书验证。
1、关闭 SSL 验证
我们可以使用CURLOPT_SSL_VERIFYHOST 和CURLOPT_SSL_VERIFYPEER 设置来关闭 SSL 验证。在实际应用中,有些场景下确实无法验证 SSL 证书有效性,因为即使证书过期或者不被信任,也不影响我们使用这个网站。error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 比如我们现在的情况是我们访问的域名为 https://www.example.com。首先,我们需要通过 openssl 命令行工具获得证书:/path/to/your/www.example.com.crt 替换成相应的证书路径。
通过上述两种方式,我们可以实现在 PHP cURL 函数中使用证书的效果,从而提高 https 请求的安全性,并确保数据的可靠性和完整性。
$url="https://www.example.com/test.php"; $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER =>1, CURLOPT_URL =>$url, CURLOPT_SSL_VERIFYHOST =>2, CURLOPT_SSL_VERIFYPEER =>true )); $resp = curl_exec($curl); curl_close($curl);以上代码通过设置
//关闭证书认证 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);使用这种方式建立的 https 连接虽然可以把数据传输出去,但并不能保证数据的安全性。 2、使用自定义证书 在我们访问部分 https 站点时,可能会遭遇到以下的错误情况:
openssl s_client -connect www.example.com:443|openssl x509 >www.example.com.crt获得证书后,在 PHP cURL 函数中设置:
$url="https://www.example.com/test.php"; $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER =>1, CURLOPT_URL =>$url, CURLOPT_SSL_VERIFYHOST =>2, CURLOPT_SSL_VERIFYPEER =>true, CURLOPT_CAINFO =>"/path/to/your/www.example.com.crt" )); $resp = curl_exec($curl); curl_close($curl);注意,需要把