摘自http://www.51testing.com/html/14/175414-248202.html

CURL使用HTTPS的技术小结

cURL是linux下命令行提交HTTP(S)请求的一个很有用的工具,支持表单数据提交、文件上传、文件下载、批量访问,多种HTTP方法等。其中对HTTPS的支持有些技术细节还是很有点讲究的,也是我在最近工作中费了不少时间摸索出来的。

cURL对HTTPS的支持是通过--cacert, --capath, --with-ca-bundle等参数来对HTTPS加以支持的,详细信息可以curl --help来得到参数明细。[url]http://curl.haxx.se/docs/sslcerts.html[/url]里是curl的官方文档介绍,其中讲了如何导入CA的具体方法,以及使用CA的方法。其中--with-ca-bundle可以用环境变量CURL_CA_BUNDLE(LINUX下)或curl-ca-bundle.crt(WINDOWS下可搜索到该文件)来实现默认指定。

通过IE或其他浏览器访问HTTPS服务器我们可以很容易得到SSL的X.509安全证书,证书导出可以选择编码格式,我们通常选择DER或者BASE64编码方法,导出文件为cer后缀。需要注意的是对于openssl生成crt证书文件时--info参数会有区别。如对DER编码文件命令应该是
openssl x509 -inform. DES -in /aaa-der.cer -text -out /.aaa-der.crt 
其中aaa-der.cer是浏览器里导出的x.509证书文件,aaa-der.crt是加密CA证书被curl所需加载验证的。如果导出用BASE64编码导出的,则命令行应该改为

openssl x509 -inform. PEM -in /aaa-b64.cer -text -out /.aaa-b64.crt

其中-inform参数需要改为PEM,来对应编码格式BASE64。

另外,X.509证书如果是三层以上的,即除了底层的URL外,上面还有两层以上的,则说明该证书是一个证书夹,即便里面只有一个证书。这时候用在curl时需作为--capath的参数值代入才能生效; 反之,如果只有两层的,即除了底层的URL外,上面只有一层的,则说明该证书只是一个证书,用在curl里需作为--cacert里的参数值才能生效。

 
证书在curl里能被通过必须具备以下三个条件:

1、被CA签证过的证书;

2、期限有效的;

3、URL能匹配请求。

 
其中第三个可以用过hosts添加ip-name对来实现欺骗,如果服务器的SSL证书属于复制使用的话。  千试百试,终于得到以上体会,希望有相关问题的人可以参考借鉴,也给自己以后参考使用。  另,一个期间碰到的环境问题,让自己白忙活了一天,也记录在此,警醒自己: 用curl对某web server进行访问,在几台不同网络的机器试,http在所有机器上都是正常的,https在其中的两台上不行,报socket 111无法连接的错误,其他的机器没问题。证书也没有问题。一整天也没有搞明白。因为web server不是我的可触及范围,结果也就是web server的问题,让我白忙活了这么久。因为web server没有启用ssl,它提供的ssl是网络设备ssl-box (netscaler)所支持的,所以所有内网机器都不会成功访问到web server的https端口,外网地址都可以,因为ssl是网络提供的,内网不会经过到netscaler去重定向https。这个是netscaler没配全的原因,唉!真苦!

CURL使用HTTPS的技术小结的更多相关文章

  1. Canvas:技术小结

    Canvas:技术小结 资料 [教程:MDN官方中文教程] https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API/Tutorial [ ...

  2. php 使用curl发起https请求

    今天一个同事反映,使用curl发起https请求的时候报错:“SSL certificate problem, verify that the CA cert is OK. Details: erro ...

  3. 用curl访问HTTPS站点并登录

    开发网站,少不了测试.现在的网站为了加强安全性,都启用了HTTPS协议.所谓HTTPS,也就是HTTP文本在SSL协议中传输.用curl命令行来测试HTTPS站点是个很有用的功能,写点脚本,就可以做功 ...

  4. 老李分享:curl发起https请求

    老李分享:curl发起https请求 在POPTEST上课的过程中,我们需要本地模拟https请求来完成性能测试,我们用curl来实现,curl是利用URL语法在命令行方式下工作的开源文件传输工具,使 ...

  5. PHP curl请求https遇到的坑

    PHP里curl对https的证书配置默认是服务器端要求验证的,如果服务器端没有配置证书验证,则无法请求https路径.如果为了简便使用不需要配置https证书的话,配置curl时将以下两项设置为fa ...

  6. centos7内核升级及curl访问https证书过期处理

    centos7内核升级及curl访问https证书过期处理 先看下当前系统的linux内核版本 uname -r 3.10.0-229.el7.x86_64 升级步骤 1.rpm --import h ...

  7. http 使用curl发起https请求报错的解决办法

    使用curl发起https请求的时候报错:“SSL certificate problem, verify that the CA cert is OK. Details: error:1409008 ...

  8. php-fpm nginx 使用 curl 请求 https 出现 502 错误

    用php curl请求https的url出现502错误,请求帮忙解决. PHP版本:5.6.7Nginx版本:1.8.0 代码如下: $ch = curl_init(); curl_setopt($c ...

  9. 用curl获取https请求时出现错误的处理

    今天一个同事反映,使用curl发起https请求的时候报错:“SSL certificate problem, verify that the CA cert is OK. Details: erro ...

随机推荐

  1. Light OJ 1067 Combinations (乘法逆元)

    Description Given n different objects, you want to take k of them. How many ways to can do it? For e ...

  2. 【POJ 3279 Fliptile】开关问题,模拟

    题目链接:http://poj.org/problem?id=3279 题意:给定一个n*m的坐标方格,每个位置为黑色或白色.现有如下翻转规则:每翻转一个位置的颜色,与其四连通的位置都会被翻转,但注意 ...

  3. poj1001(高精度)

                                                               Exponentiation Time Limit: 500MS   Memory ...

  4. C pointers

    指向整型数组指针int (*p)[10] = matrix;增加这个指针的值使它指向下一个整型数组 指向整型指针int *pi = &matrix[0][0];int *pi = &m ...

  5. 使用jquery获取网页中图片的高度——解惑

    jQuery获取网页中图片的高度 使用jquery获取网页中图片的高度其实很简单,有两种常用的方法都可以打到我们的目的 $("img").whith();(返回纯数字) $(&qu ...

  6. 如何将ASM中的数据文件复制到操作系统中

    环境:Red Hat 5.7 + Oracle 10.2.0.5.0 Rac+ASM 如果你的Oracle数据库系统使用正使用ASM自动存储管理,你可曾想过要窥视一下ASM中的数据文件,ASM是个黑匣 ...

  7. 1、elasticsearch简介

    1.elasticsearch简介 中文帮助文档地址:http://es.xiaoleilu.com/ • Elasticsearch是一个基于Lucene的实时的分布式搜索和分析引擎.设计用于云计算 ...

  8. C++中如何建立一个顺序表

    准备数据 #define MAXLEN 100 //定义顺序表的最大长度 struct DATA { char key[10]; //结点的关键字 char name[20]; int age; }; ...

  9. CATransform3D参数的意义

    经常忘记CATransform3D各参数的意思,记下来好好理解下   struct CATransform3D { CGFloat m11(x缩放),m12(y切变),m13(旋转),m14(); C ...

  10. canvas模糊事件处理

    不知道大家项目中有没有用到canvas时还有时候会出现模糊的情况: 具体推测可能是屏幕改变了,然而canvas的渲染对象并没有跟着一起变: 这里简单介绍个对象,window.devicePixelRa ...