`

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(默认值)。

分享到:
评论

相关推荐

    curl_自定义进度条

    记录curl 自定义进度条 CURLOPT_PROGRESSFUNCTION 相关代码

    PHP curl采集

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hosts curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); $content = curl_exec($ch); curl_close($ch); // 结束 Curl...

    PHP curl CURLOPT_RETURNTRANSFER参数的作用使用实例

    获取页面内容,不直接输出到页面,CURLOPT_RETURNTRANSFER参数设置  使用PHP curl获取页面内容或提交数据,有时候希望返回的内容作为变量储存,而不是直接输出。...curl_setopt($ch, CURLOPT_SSL_VERIF

    PHP中CURL的CURLOPT_POSTFIELDS参数使用细节

    在通常情况下,我们使用 CURL 来提交 POST 数据的时候,我们已经习惯了这样的写法:复制代码 代码如下:curl_setopt( $ch, CURLOPT_POSTFIELDS,$post_data);但是这样的写法在有时候并不会很好用,可能会得到服务器...

    DownTool.rar

    curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, my_progress_func); curl_easy_perform(curl); fclose(outfile); /* always cleanup */ curl_easy_cleanup(curl); } return 0; }

    PHP CURL CURLOPT参数说明(curl_setopt)

    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 如果成功只将结果返回,不自动输出任何内容。 如果失败返回FALSE curl_setopt($ch, CURLOPT_RETURNTRANSFER,0); 或着不使用这个选项: 如果成功只返回TRUE,自动输出...

    IOS cocos2dx编译的curl报错‘__curl_rule_01__'

    ios编译COCOS2DX时,有些版本会出现以下错误,'__curl_rule_01__' declared as an array with a negative size 只需把所有的.h文件替换掉引擎的,再把libcurl.a添加到工程中,即可解决这问题

    php 数据POST

    curl_setopt($curl, CURLOPT_URL, 'api.yeelink.net/v1.0/device/21288/sensor/37498/datapoints'); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); ...

    PHP微信开发获取用户信息

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch); curl_close($ch); $...

    Cocos2d-3.10 使用Curl异步下载文件(断点续传)

    开发博客http://blog.csdn.net/iuoon/article/details/52328830

    PHP实现的微信APP支付功能示例【基于TP5框架】

    // curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE); // curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验 curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($ch,CURLOPT_SSL_VE

    php curl常见错误:SSL错误、bool(false)

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 症状:php curl调用curl_exec返回bool(false),命令行curl调用正常。 排查方法: var_dump(curl_error($ch)); 返回: string(23) “Empty reply from server” ...

    php curl 模拟登录并获取数据实例详解

    PHP的curl()在抓取网页的效率方面是比较高的,而且支持多线程,而file_get_... curl_setopt($curl, CURLOPT_URL, $url);//登录提交的地址 curl_setopt($curl, CURLOPT_HEADER, 0);//是否显示头信息 curl_setop

    PHP 模拟路由器登陆,进行操作

    $account='kepo3531';//$_GET['a'];...curl_setopt($curl, CURLOPT_URL, $target); curl_setopt($curl,CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_HTTPHEADER, array( 'Accept: applica

    求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路

    下面代码使用curl模拟post请求链接后直接显示出了文件内容,如何修改成不显示内容而直接下载请求到的.torrent格式文件呢 ... curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt ($ch, CURLOPT_H

    PHP调用接口API封装的例子

    GET: /** * 通过URL获取页面信息 * @param $url 地址 ... curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_RETURNTRANS

    php版微信小店调用api示例代码

    本文实例讲述了php版微信小店调用api的方法。分享给大家供大家参考,具体如下: 刚开始调用微信小店api的时候,可能大家会遇到问题。... curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt

    curl ssh2_ssl_sspi.zip

    navigator https or http

Global site tag (gtag.js) - Google Analytics