curl+個人證書(又叫客戶端證書)訪問https站點(雙向認證)
什麼是雙向認證模式?對於面向公眾使用者的https的**,大部分屬於單向認證模式,它不需要對客戶端進行認證,不需要提供客戶端的個人證書,例如而雙向認證模式,為了驗證客戶端的合法性,要求客戶端在訪問伺服器時,出示自己的client certificate。
以下,為ssl握手過程:
①客戶端的瀏覽器向伺服器傳送客戶端 ssl 協議的版本號,加密演算法的種類,產生的隨機數,以及其他伺服器和客戶端之間通訊所需要的各種資訊。
②伺服器向客戶端傳送 ssl 協議的版本號,加密演算法的種類,隨機數以及其他相關資訊,同時伺服器還將向客戶端傳送自己的證書。
③客戶利用伺服器傳過來的資訊驗證伺服器的合法性,伺服器的合法性包括:證書是否過期,發行伺服器證書的 ca 是否可靠,發行者證書的公鑰能否正確解開伺服器證書的「發行者的數字簽名」,伺服器證書上的網域名稱是否和伺服器的實際網域名稱相匹配。如果合法性驗證沒有通過,通訊將斷開;如果合法性驗證通過,將繼續進行第四步。
④使用者端隨機產生乙個用於後面通訊的「對稱密碼」,然後用伺服器的公鑰(伺服器的公鑰從步驟②中的伺服器的證書中獲得)對其加密,然後將加密後的「預主密碼」傳給伺服器。
⑤如果伺服器要求客戶的身份認證(在握手過程中為可選),使用者可以建立乙個隨機數然後對其進行資料簽名,將這個含有簽名的隨機數和客戶自己的證書以及加密過的「預主密碼」一起傳給伺服器。
⑥如果伺服器要求客戶的身份認證,伺服器必須檢驗客戶證書和簽名隨機數的合法性,具體的合法性驗證過程包括:客戶的證書使用日期是否有效,為客戶提供證書的ca 是否可靠,發行ca 的公鑰能否正確解開客戶證書的發行 ca 的數字簽名,檢查客戶的證書是否在證書廢止列表(crl)中。檢驗如果沒有通過,通訊立刻中斷;如果驗證通過,伺服器將用自己的私鑰解開加密的「預主密碼」,然後執行一系列步驟來產生主通訊密碼(客戶端也將通過同樣的方法產生相同的主通訊密碼)。
⑦伺服器和客戶端用相同的主密碼即「通話密碼」,乙個對稱金鑰用於 ssl 協議的安全資料通訊的加解密通訊。同時在 ssl 通訊過程中還要完成資料通訊的完整性,防止資料通訊中的任何變化。
⑧客戶端向伺服器端發出資訊,指明後面的資料通訊將使用的步驟⑦中的主密碼為對稱金鑰,同時通知伺服器客戶端的握手過程結束。
⑨伺服器向客戶端發出資訊,指明後面的資料通訊將使用的步驟⑦中的主密碼為對稱金鑰,同時通知客戶端伺服器端的握手過程結束。
⑩ssl 的握手部分結束,ssl 安全通道的資料通訊開始,客戶和伺服器開始使用相同的對稱金鑰進行資料通訊,同時進行通訊完整性的檢驗。
單向認證模式與雙向認證模式的區別,就在於第⑤、第⑥步是否要求對客戶的身份認證。單向不需要認證,雙向需要認證。
現在介紹如何使用curl來訪問雙向認證的https站點。
一、準備工作
1、首先,因為要進行客戶端認證,你應該具有了客戶端的個人證書(對於公司內網,通常是由it的管理員頒發給你的),只要你能夠順利的訪問雙向認證的https站點,你就具有了個人證書,它藏在瀏覽器上。我們要做的工作,只是把它從瀏覽器中匯出來。從ie瀏覽器匯出來的格式,通常為.pfx格式,從firefox匯出來的格式通常為.p12格式,其實pfx=p12,它們是同乙個東西,對於curl而言這種格式稱為pkcs#12檔案。
2、把p12格式轉換為pem格式(假設你的p12檔名為:***.p12):
openssl pkcs12 -in ***.p12 -out client.pem -nokeys #客戶端個人證書的公鑰
openssl pkcs12 -in ***.p12 -out key.pem -nocerts -nodes #客戶端個人證書的私鑰
也可以轉換為公鑰與私鑰合二為一的檔案;
openssl pkcs12 -in ***.p12 -out all.pem -nodes #客戶端公鑰與私鑰,一起存在all.pem中
在執行過程中,可能需要你輸入匯出證書時設定的密碼。執行成功後,我們就有了這些檔案:client.pem——客戶端公鑰,key.pem——客戶端私鑰,或者二合一的all.pem。
3、確保你安裝的curl版本正確(本人折騰了兩天,全因為fedora13下的curl-7.20.1有問題,更新到curl-7.21.0.tar.gz問題解決)。
二、執行curl命令
1、使用client.pem+key.pem
curl -k --cert client.pem --key key.pem
2、使用all.pem
1)生成證書
openssl pkcs12 -in 1217806301.pfx -out all.pem -nodes
2)利用證書get file
注:證書要全路徑 url需要單引號
curl -s -o settle2 -k --cert ./all.pem 『url』
使用-k,是不對伺服器的證書進行檢查,這樣就不必關心伺服器證書的匯出問題了。
CURL訪問 https CA證書問題
1 證書錯誤 執行報錯 ssl peer certificate or ssh remote key was not ok 谷歌翻譯 ssl對等證書或ssh遠端金鑰不正確 方法一 不檢查證書 不檢查證書 curl easy setopt curl,curlopt ssl verifypeer,0l ...
CURL使用SSL證書訪問HTTPS
curl詳細選項說明 url 若服務端要求客戶端認證,需要將pfx證書轉換成pem格式 openssl pkcs12 clcerts nokeys in cert.pfx out client.pem 客戶端個人證書的公鑰 openssl pkcs12 nocerts nodes in cert.p...
CURL使用SSL證書訪問HTTPS
curl詳細選項說明 url 若服務端要求客戶端認證,需要將pfx證書轉換成pem格式 openssl pkcs12 clcerts nokeys in cert.pfx out client.pem 客戶端個人證書的公鑰 openssl pkcs12 nocerts nodes in cert.p...