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
证书属于复制使用的话。
本文出自 “守望者的技术日记和六..” 博客,请务必保留此出处http://dannyyuan.blog.51cto.com/212520/124957