`

PHP的cURL选项CURLOPT_SSL_VERIFYPEER详解

 
阅读更多

在开发微信支付的过程中,遇到了关于cURL加密传输的问题,做下记录方便今后查阅。

提交数据到https时,需要pem证书来加密。
我们使用浏览器访问https的时候,浏览器会自动加载网站的安全证书进行加密。但是你用curl请求https时,没有通过浏览器,就只有自己手动增加一个安全证书进行加密。


代码示例:

01 private function httpGet($url) {
02     $curl = curl_init();
03     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
04     curl_setopt($curl, CURLOPT_TIMEOUT, 500);
05     // 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。
06     // 如果在部署过程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。
07     curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
08     curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);
09     curl_setopt($curl,CURLOPT_CAINFO,dirname(__FILE__).'/cacert.pem');//这是根据http://curl.haxx.se/ca/cacert.pem 下载的证书,添加这句话之后就运行正常了
10     curl_setopt($curl, CURLOPT_URL, $url);
11  
12     $res = curl_exec($curl);
13     curl_close($curl);
14  
15     return $res;
16 }

知识点摘要:
CURLOPT_SSL_VERIFYPEER 设置为FALSE 禁止 cURL 验证对等证书(peer’s certificate)。要验证的交换证书可以在 CURLOPT_CAINFO 选项中设置,或在 CURLOPT_CAPATH中设置证书目录。

CURLOPT_CAINFO 一个保存着1个或多个用来让服务端验证的证书的文件名。这个参数仅仅在和CURLOPT_SSL_VERIFYPEER一起使用时才有意义。可能需要绝对路径。

CURLOPT_CAPATH 一个保存着多个CA证书的目录。这个选项是和CURLOPT_SSL_VERIFYPEER一起使用的。

CURLOPT_SSL_VERIFYHOST 设置为 1 是检查服务器SSL证书中是否存在一个公用名(common name)。译者注:公用名(Common Name)一般来讲就是填写你将要申请SSL证书的域名 (domain)或子域名(sub domain)。 设置成 2,会检查公用名是否存在,并且是否与提供的主机名匹配。 在生产环境中,这个值应该是 2(默认值)。

分享到:
评论

相关推荐

    php下curl用法详解

    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); curl_setopt($curl, CURLOPT_...

    php curl 详解

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 关闭证书验证 curl_setopt($ch, CURLOPT_CAINFO, '/path/to/certificate.pem'); // 指定证书路径 ``` **示例:处理重定向** 下面的代码示例展示了如何设置...

    libcurl使用Https说明

    // curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); // 禁用证书验证 // curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); // 禁用主机名验证 res = curl_easy_perform(curl); if(res != CURLE_OK) ...

    php 的curl详解

    2. **SSL连接**:使用`CURLOPT_SSL_VERIFYPEER`和`CURLOPT_SSL_VERIFYHOST`控制SSL证书验证。 3. **上传文件**:利用`CURLOPT_UPLOAD`开启上传模式,配合`CURLOPT_INFILE`和`CURLOPT_INFILESIZE`设置上传文件。 4. *...

    php_curl_使用实例

    10. **`CURLOPT_SSL_VERIFYPEER`** 和 **`CURLOPT_SSL_VERIFYHOST`**:控制 SSL 证书验证。 #### 四、使用示例 1. **模拟 GET 请求**: ```php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, ...

    详解php中curl返回false的解决办法

    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); ``` 关闭SSL验证虽然可以解决问题,但并不推荐在生产环境中使用,因为它降低了安全性。最好是检查并配置...

    c++中libcurl库

    可以通过`CURLOPT_SSL_VERIFYPEER`和`CURLOPT_SSL_VERIFYHOST`选项来控制SSL验证行为。 ### 8. 性能优化 libcurl允许你配置缓存策略、DNS缓存、重试机制等,以优化性能和网络连接。例如,可以设置`CURLOPT_DNS_...

    在PHP中使用CURL共16页.pdf.zip

    7. **HTTPS连接**:通过设置`CURLOPT_SSL_VERIFYPEER`和`CURLOPT_SSL_VERIFYHOST`为false,可以跳过SSL证书验证。 **错误处理与调试** 当CURL操作失败时,`curl_errno()`返回错误代码,`curl_error()`返回错误信息...

    PHP100视频教程87:PHP.之.CURL.传输与获取功能.rar

    - **HTTPS请求**:设置`CURLOPT_SSL_VERIFYPEER`和`CURLOPT_SSL_VERIFYHOST`为false可跳过SSL验证。 - **自定义HTTP方法**:`curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');`实现PUT、DELETE等非GET/POST请求。...

    libcurl使用demo【更新】

    8. **SSL/TLS验证**:可以通过设置`CURLOPT_SSL_VERIFYPEER`和`CURLOPT_SSL_VERIFYHOST`控制证书验证。 9. **重定向处理**:默认情况下,libcurl会自动处理HTTP状态码为3xx的重定向,但可以通过`CURLOPT_...

    php的curl封装类用法实例_.docx

    - `CURLOPT_SSL_VERIFYPEER`:设置为`false`支持SSL加密。 - `CURLOPT_POST`:设置为`true`表示发送POST请求。 - `CURLOPT_POSTFIELDS`:发送的POST参数字符串。 - `CURLOPT_TIMEOUT`:等待响应的时间。 3. **...

    libcurl 带ssl zlib 支持http和https的访问

    使用`CURLOPT_SSL_VERIFYPEER`和`CURLOPT_SSL_VERIFYHOST`选项,可以控制是否验证服务器证书,以及验证证书的深度。此外,还可以设置`CURLOPT_CAINFO`指定证书权威机构(CA)的证书文件,以验证服务器证书的有效性。...

    CURL详解.doc

    * CURLINFO_SSL_VERIFYRESULT:Result of SSL certification verification requested by setting CURLOPT_SSL_VERIFYPEER CURL 函数库还提供了其他函数来处理 CURL will话,例如: * curl_copy_handle():拷贝一...

    libcurl库文件

    使用`CURLOPT_SSL_VERIFYPEER`和`CURLOPT_SSL_VERIFYHOST`选项可以控制证书验证的行为。 5. **错误处理与调试** libcurl提供了丰富的错误处理机制,通过`curl_easy_strerror()`函数可以获取错误代码对应的错误信息...

    libcurl-ios-dist.zip

    2. HTTPS支持:启用`CURLOPT_SSL_VERIFYPEER`和`CURLOPT_SSL_VERIFYHOST`,以验证服务器证书。 3. 自定义回调:使用`CURLOPT_WRITEFUNCTION`和`CURLOPT_WRITEDATA`设置数据接收回调,处理接收到的数据。 4. 错误处理...

    PHP技巧PHPCURL函数库.doc

    * CURLINFO_SSL_VERIFYRESULT:Result of SSL certification verification requested by setting CURLOPT_SSL_VERIFYPEER * CURLINFO_CONTENT_LENGTH_DOWNLOAD:从 Content-Length: field 中读取的下载内容长度 * ...

    PHP封装curl的调用接口及常用函数详解

    `CURLOPT_POSTFIELDS`设置POST数据,`CURLOPT_POST`设为`true`表示使用POST方法,`CURLOPT_RETURNTRANSFER`设为`true`使`cURL`返回结果而不是直接输出,`CURLOPT_TIMEOUT`设置超时时间,最后两个选项关闭SSL验证,以...

    必须收藏的23个php实用代码片段

    CURLOPT_SSL_VERIFYPEER => 0 )); $output = curl_exec($ch); if (curl_errno($ch)) { echo 'error:' . curl_error($ch); } curl_close($ch); } ``` 2. **使用Mandrill发送邮件** Mandrill是MailChimp提供...

    PHP 传输会话curl函数的实例详解

    4. CURLOPT_SSL_VERIFYPEER:设置为FALSE时,忽略SSL证书验证,通常用于测试环境。 5. CURLOPT_HTTPHEADER:设置自定义的HTTP请求头部信息。 6. CURLOPT_CUSTOMREQUEST:用于发送自定义请求方法,如PUT、DELETE等。 ...

Global site tag (gtag.js) - Google Analytics