生活随笔
收集整理的這篇文章主要介紹了
curl+个人证书(又叫客户端证书)访问https站点
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
目前,大公司的OA管理系統(tǒng)(俗稱內(nèi)網(wǎng)),安全性要求較高,通常采用https的雙向 認(rèn)證模式。
?
首先,什么是https,簡(jiǎn)單的說(shuō)就是在SSL協(xié)議之上實(shí)現(xiàn)的http協(xié)議(get、post等操作)。更多的介紹參看這里。
?
什么是雙向認(rèn)證模式?對(duì)于面向公眾用戶的https的網(wǎng)站,大部分屬于單向認(rèn)證模式,它不需要對(duì)客戶端進(jìn)行認(rèn)證,不需要提供客戶端的個(gè)人證書(shū),例如https://www.google.com。而雙向認(rèn)證模式,為了驗(yàn)證客戶端的合法性,要求客戶端在訪問(wèn)服務(wù)器時(shí),出示自己的client certificate。
?
以下,為SSL握手過(guò)程:
?
①客戶端的瀏覽器向服務(wù)器傳送客戶端?SSL?協(xié)議的版本號(hào),加密算法的種類,產(chǎn)生的隨機(jī)數(shù),以及其他服務(wù)器和客戶端之間通訊所需要的各種信息。?? ②服務(wù)器向客戶端傳送?SSL?協(xié)議的版本號(hào),加密算法的種類,隨機(jī)數(shù)以及其他相關(guān)信息,同時(shí)服務(wù)器還將向客戶端傳送自己的證書(shū)。?? ③客戶利用服務(wù)器傳過(guò)來(lái)的信息驗(yàn)證服務(wù)器的合法性,服務(wù)器的合法性包括:證書(shū)是否過(guò)期,發(fā)行服務(wù)器證書(shū)的?CA?是否可靠,發(fā)行者證書(shū)的公鑰能否正確解開(kāi)服務(wù)器證書(shū)的“發(fā)行者的數(shù)字簽名”,服務(wù)器證書(shū)上的域名是否和服務(wù)器的實(shí)際域名相匹配。如果合法性驗(yàn)證沒(méi)有通過(guò),通訊將斷開(kāi);如果合法性驗(yàn)證通過(guò),將繼續(xù)進(jìn)行第四步。?? ④用戶端隨機(jī)產(chǎn)生一個(gè)用于后面通訊的“對(duì)稱密碼”,然后用服務(wù)器的公鑰(服務(wù)器的公鑰從步驟②中的服務(wù)器的證書(shū)中獲得)對(duì)其加密,然后將加密后的“預(yù)主密碼”傳給服務(wù)器。?? ⑤如果服務(wù)器要求客戶的身份認(rèn)證(在握手過(guò)程中為可選),用戶可以建立一個(gè)隨機(jī)數(shù)然后對(duì)其進(jìn)行數(shù)據(jù)簽名,將這個(gè)含有簽名的隨機(jī)數(shù)和客戶自己的證書(shū)以及加密過(guò)的“預(yù)主密碼”一起傳給服務(wù)器。?? ⑥如果服務(wù)器要求客戶的身份認(rèn)證,服務(wù)器必須檢驗(yàn)客戶證書(shū)和簽名隨機(jī)數(shù)的合法性,具體的合法性驗(yàn)證過(guò)程包括:客戶的證書(shū)使用日期是否有效,為客戶提供證書(shū)的CA?是否可靠,發(fā)行CA?的公鑰能否正確解開(kāi)客戶證書(shū)的發(fā)行?CA?的數(shù)字簽名,檢查客戶的證書(shū)是否在證書(shū)廢止列表(CRL)中。檢驗(yàn)如果沒(méi)有通過(guò),通訊立刻中斷;如果驗(yàn)證通過(guò),服務(wù)器將用自己的私鑰解開(kāi)加密的“預(yù)主密碼”,然后執(zhí)行一系列步驟來(lái)產(chǎn)生主通訊密碼(客戶端也將通過(guò)同樣的方法產(chǎn)生相同的主通訊密碼)。?? ⑦服務(wù)器和客戶端用相同的主密碼即“通話密碼”,一個(gè)對(duì)稱密鑰用于?SSL?協(xié)議的安全數(shù)據(jù)通訊的加解密通訊。同時(shí)在?SSL?通訊過(guò)程中還要完成數(shù)據(jù)通訊的完整性,防止數(shù)據(jù)通訊中的任何變化。?? ⑧客戶端向服務(wù)器端發(fā)出信息,指明后面的數(shù)據(jù)通訊將使用的步驟⑦中的主密碼為對(duì)稱密鑰,同時(shí)通知服務(wù)器客戶端的握手過(guò)程結(jié)束。?? ⑨服務(wù)器向客戶端發(fā)出信息,指明后面的數(shù)據(jù)通訊將使用的步驟⑦中的主密碼為對(duì)稱密鑰,同時(shí)通知客戶端服務(wù)器端的握手過(guò)程結(jié)束。?? ⑩SSL?的握手部分結(jié)束,SSL?安全通道的數(shù)據(jù)通訊開(kāi)始,客戶和服務(wù)器開(kāi)始使用相同的對(duì)稱密鑰進(jìn)行數(shù)據(jù)通訊,同時(shí)進(jìn)行通訊完整性的檢驗(yàn)。?? ?
單向認(rèn)證模式與雙向認(rèn)證模式的區(qū)別,就在于第⑤、第⑥步是否要求對(duì)客戶的身份認(rèn)證。單向不需要認(rèn)證,雙向需要認(rèn)證。
?
現(xiàn)在介紹如何使用curl來(lái)訪問(wèn)雙向認(rèn)證的https站點(diǎn)。
一、準(zhǔn)備工作
1、首先,因?yàn)橐M(jìn)行客戶端認(rèn)證,你應(yīng)該具有了客戶端的個(gè)人證書(shū)(對(duì)于公司內(nèi)網(wǎng),通常是由IT的管理員頒發(fā)給你的),只要你能夠順利的訪問(wèn)雙向認(rèn)證的https站點(diǎn),你就具有了個(gè)人證書(shū),它藏在瀏覽器上。我們要做的工作,只是把它從瀏覽器中導(dǎo)出來(lái)。從IE瀏覽器導(dǎo)出來(lái)的格式,通常為.pfx格式,從firefox導(dǎo)出來(lái)的格式通常為.p12格式,其實(shí)pfx=p12,它們是同一個(gè)東西,對(duì)于curl而言這種格式稱為PKCS#12文件。
2、把p12格式轉(zhuǎn)換為pem格式(假設(shè)你的p12文件名為:xxx.p12):
?
openssl?pkcs12?-in?xxx.p12?-out?client.pem?-nokeys #客戶端個(gè)人證書(shū)的公鑰?? openssl?pkcs12?-in?xxx.p12?-out?key.pem?-nocerts?-nodes ?#客戶端個(gè)人證書(shū)的私鑰?? 也可以轉(zhuǎn)換為公鑰與私鑰合二為一的文件;?? openssl?pkcs12?-in?xxx.p12?-out?all.pem?-nodes???????????????????????????????????#客戶端公鑰與私鑰,一起存在all.pem中?? ?
在執(zhí)行過(guò)程中,可能需要你輸入導(dǎo)出證書(shū)時(shí)設(shè)置的密碼。執(zhí)行成功后,我們就有了這些文件:client.pem——客戶端公鑰,key.pem——客戶端私鑰,或者二合一的all.pem。
?
3、確保你安裝的curl版本正確(本人折騰了兩天,全因?yàn)閒edora13下的curl-7.20.1有問(wèn)題,更新到curl-7.21.0.tar.gz問(wèn)題解決)。
?
?
?
二、執(zhí)行curl命令
1、使用client.pem+key.pem
curl -k --cert client.pem --key key.pem https://www.xxxx.com
?
2、使用all.pem
curl -k --cert all.pem ?https://www.xxxx.com
?
使用-k,是不對(duì)服務(wù)器的證書(shū)進(jìn)行檢查,這樣就不必關(guān)心服務(wù)器證書(shū)的導(dǎo)出問(wèn)題了。
轉(zhuǎn)載于:https://www.cnblogs.com/mtcnn/p/9410088.html
總結(jié)
以上是生活随笔為你收集整理的curl+个人证书(又叫客户端证书)访问https站点的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。