在开发微信支付的过程中,遇到了关于cURL加密传输的问题,做下记录方便今后查阅。
提交数据到https时,需要pem证书来加密。
我们使用浏览器访问https的时候,浏览器会自动加载网站的安全证书进行加密。但是你用curl请求https时,没有通过浏览器,就只有自己手动增加一个安全证书进行加密。
代码示例:
01 |
private function httpGet($url) { |
03 |
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
04 |
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
|
05 |
// 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。
|
07 |
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
|
08 |
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);
|
10 |
curl_setopt($curl, CURLOPT_URL, $url);
|
12 |
$res = curl_exec($curl);
|
知识点摘要:
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_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_...
// 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) ...
2. **SSL连接**:使用`CURLOPT_SSL_VERIFYPEER`和`CURLOPT_SSL_VERIFYHOST`控制SSL证书验证。 3. **上传文件**:利用`CURLOPT_UPLOAD`开启上传模式,配合`CURLOPT_INFILE`和`CURLOPT_INFILESIZE`设置上传文件。 4. *...
10. **`CURLOPT_SSL_VERIFYPEER`** 和 **`CURLOPT_SSL_VERIFYHOST`**:控制 SSL 证书验证。 #### 四、使用示例 1. **模拟 GET 请求**: ```php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, ...
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); ``` 关闭SSL验证虽然可以解决问题,但并不推荐在生产环境中使用,因为它降低了安全性。最好是检查并配置...
可以通过`CURLOPT_SSL_VERIFYPEER`和`CURLOPT_SSL_VERIFYHOST`选项来控制SSL验证行为。 ### 8. 性能优化 libcurl允许你配置缓存策略、DNS缓存、重试机制等,以优化性能和网络连接。例如,可以设置`CURLOPT_DNS_...
7. **HTTPS连接**:通过设置`CURLOPT_SSL_VERIFYPEER`和`CURLOPT_SSL_VERIFYHOST`为false,可以跳过SSL证书验证。 **错误处理与调试** 当CURL操作失败时,`curl_errno()`返回错误代码,`curl_error()`返回错误信息...
- **HTTPS请求**:设置`CURLOPT_SSL_VERIFYPEER`和`CURLOPT_SSL_VERIFYHOST`为false可跳过SSL验证。 - **自定义HTTP方法**:`curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');`实现PUT、DELETE等非GET/POST请求。...
8. **SSL/TLS验证**:可以通过设置`CURLOPT_SSL_VERIFYPEER`和`CURLOPT_SSL_VERIFYHOST`控制证书验证。 9. **重定向处理**:默认情况下,libcurl会自动处理HTTP状态码为3xx的重定向,但可以通过`CURLOPT_...
- `CURLOPT_SSL_VERIFYPEER`:设置为`false`支持SSL加密。 - `CURLOPT_POST`:设置为`true`表示发送POST请求。 - `CURLOPT_POSTFIELDS`:发送的POST参数字符串。 - `CURLOPT_TIMEOUT`:等待响应的时间。 3. **...
使用`CURLOPT_SSL_VERIFYPEER`和`CURLOPT_SSL_VERIFYHOST`选项,可以控制是否验证服务器证书,以及验证证书的深度。此外,还可以设置`CURLOPT_CAINFO`指定证书权威机构(CA)的证书文件,以验证服务器证书的有效性。...
* CURLINFO_SSL_VERIFYRESULT:Result of SSL certification verification requested by setting CURLOPT_SSL_VERIFYPEER CURL 函数库还提供了其他函数来处理 CURL will话,例如: * curl_copy_handle():拷贝一...
使用`CURLOPT_SSL_VERIFYPEER`和`CURLOPT_SSL_VERIFYHOST`选项可以控制证书验证的行为。 5. **错误处理与调试** libcurl提供了丰富的错误处理机制,通过`curl_easy_strerror()`函数可以获取错误代码对应的错误信息...
2. HTTPS支持:启用`CURLOPT_SSL_VERIFYPEER`和`CURLOPT_SSL_VERIFYHOST`,以验证服务器证书。 3. 自定义回调:使用`CURLOPT_WRITEFUNCTION`和`CURLOPT_WRITEDATA`设置数据接收回调,处理接收到的数据。 4. 错误处理...
* CURLINFO_SSL_VERIFYRESULT:Result of SSL certification verification requested by setting CURLOPT_SSL_VERIFYPEER * CURLINFO_CONTENT_LENGTH_DOWNLOAD:从 Content-Length: field 中读取的下载内容长度 * ...
`CURLOPT_POSTFIELDS`设置POST数据,`CURLOPT_POST`设为`true`表示使用POST方法,`CURLOPT_RETURNTRANSFER`设为`true`使`cURL`返回结果而不是直接输出,`CURLOPT_TIMEOUT`设置超时时间,最后两个选项关闭SSL验证,以...
CURLOPT_SSL_VERIFYPEER => 0 )); $output = curl_exec($ch); if (curl_errno($ch)) { echo 'error:' . curl_error($ch); } curl_close($ch); } ``` 2. **使用Mandrill发送邮件** Mandrill是MailChimp提供...
4. CURLOPT_SSL_VERIFYPEER:设置为FALSE时,忽略SSL证书验证,通常用于测试环境。 5. CURLOPT_HTTPHEADER:设置自定义的HTTP请求头部信息。 6. CURLOPT_CUSTOMREQUEST:用于发送自定义请求方法,如PUT、DELETE等。 ...