curl
是 linux
下命令列提交
方法等。其中對
的支援有些技術細節還是很有點講究的,也是我在最近工作中費了不少時間摸索出來的。
curl
對 https
的支援是通過
--cacert, --capath, --with-ca-bundle
等引數來對
加以支援的,詳細資訊可以
curl --help
來得到引數明細。
[url]
裡是curl
的官方文件介紹,其中講了如何匯入
ca的具體方法,
以及使用
ca的方法。其中
--with-ca-bundle
可以用環境變數
curl_ca_bundle(linux
下)或curl-ca-bundle.crt(windows
下可搜尋到該檔案
) 來實現預設指定。
通過ie或其他瀏覽器訪問
伺服器我們可以很容易得到
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
進行訪問,在幾台不同網路的機器試,
在所有機器上都是正常的,
在其中的兩台上不行,報
socket 111
無法連線的錯誤,其他的機器沒問題。證書也沒有問題。一整天也沒有搞明白。因為
web server
不是我的可觸及範圍,結果也就是
web server
的問題,讓我白忙活
了這麼久。因為
web server
沒有啟用
ssl,它提供的
ssl是網路裝置
ssl-box (netscaler)
所支援的,所以所有內網機器都不會成功訪問到
web server
的https
埠,外網位址都可以,因為
ssl是網路提供的,內網不會經過到
netscaler
去重定向
。這個是
netscaler
沒配全的原因,唉!真苦!
curl使用 https訪問
訪問自己的https伺服器 自己在阿里雲上搭建了乙個https伺服器,以前一直用的是postman作為客戶端訪問,現在想嘗試用curl。下面的終端是 外網深度學習伺服器 所訪問的伺服器是我自己的阿里雲 curl cert client.crt key client.key insecure http...
http 使用curl發起https請求
今天乙個同事反映,使用curl發起https請求的時候報錯 ssl certificate problem,verify that the ca cert is ok.details error 14090086 ssl routines ssl3 get server certificate ce...
CURL使用SSL證書訪問HTTPS
curl詳細選項說明 url 若服務端要求客戶端認證,需要將pfx證書轉換成pem格式 openssl pkcs12 clcerts nokeys in cert.pfx out client.pem 客戶端個人證書的公鑰 openssl pkcs12 nocerts nodes in cert.p...