淘先锋技术网

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