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 没配全的缘由,唉!真苦!
相关文章
相关标签/搜索