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 沒配全的緣由,唉!真苦!
相關文章
相關標籤/搜索