java密碼技術(*) - HTTPS雙向加密

常見的https站點都是客戶端用服務端提供的證書驗證服務端的簽名,確認自己訪問的站點不是偽造的。同樣的,服務端也可以添加客戶端提供的公鑰證書,用來驗證客戶端的身份。流程同上,客戶端用私鑰簽名后,服務端用客戶端的公鑰證書驗簽。
下面我用tomcat-8.5.64來演示一下如何配置基于tomcat的自簽名證書的https雙向認證。

生成服務器端和客戶端的密鑰對

首先生成兩個密鑰對,一個給服務端使用(也就是tomcat),一個給客戶端使用(也就是瀏覽器端)。我們用JDK提供的keytool工具來生成密鑰對。

>keytool -genkeypair -alias server -keyalg RSA -validity 365 -storetype PKCS12 -keystore tomcat-key.p12 -storepass 123456 -dname "CN=tomcat-site.com,OU=tomcat,O=mytomcat,L=chengdu,S=sichuan,C=CN"

用同樣的方式再生成客戶端的密鑰對。

>keytool -genkeypair -alias client -keyalg RSA -validity 365 -storetype PKCS12 -keystore client-key.p12 -storepass 123456 -dname "CN=client-site.com,OU=my,O=myclient,L=chengdu,S=sichuan,C=CN"

從客戶端的密鑰庫中導出公鑰證書,把這個證書提供給服務端,服務端需要將它添加到自己的信任證書庫中。

>keytool -exportcert -alias client -file client.cert -keystore client-key.p12 -storepass 123456

執行上一條命令得到客戶端證書文件client.cert。為了方便tomcat的配置,直接將這個證書導入一個空的密鑰庫。

>keytool -importcert -alias client -file client.cert -keystore server-trust.p12 -storetype PKCS12 -storepass 123456

配置tomcat

將服務端密鑰庫和信任密鑰庫考到tomcat的conf目錄中,這個不是必須的,復制過去只是為了方便配置和管理,也可以在tomcat中配置這兩個密鑰庫的絕對路徑。
tomcat默認是沒有開啟https的,我們在conf目錄里面找到server.xml并用文本編輯器打開它。找到被注釋掉的SSL/TLS HTTP/1.1 Connector,如下圖所示:


server.xml

取消這個connector的注釋。將服務端密鑰庫配置在Certificate節點中。

<Certificate certificateKeystoreFile="conf/tomcat-key.p12"
             certificateKeystorePassword="123456"
             type="RSA" />

certificateKeystoreFile配置的就是密鑰庫的位置,由于我們把它拷貝到了conf目錄中,所以我們只需配置它的相對路徑就可以了。certificateKeystorePassword指定密鑰庫的密碼。type指定密鑰庫的類型。我們生成的時候指定的類型是RSA,所以這里也配置為RSA就可以了。這樣配置好以后,單向的https就成功了,我們可以啟動tomcat試一試。在瀏覽器中輸入https://localhost:8443

瀏覽器(圖1)

看到的結果如上圖所示,因為我們使用的是自簽名的密鑰庫,所以不受瀏覽器的信任,我們點擊“高級”:
瀏覽器(圖2)

然后點擊“繼續前往localhost(不安全)”:
瀏覽器(圖3)

打開了tomcat的管理頁面。左上角有個“不安全”的提示,提示這個的原因同上,我們的服務端密鑰庫是自簽名的,響應給瀏覽器的證書也是自簽名的,不受瀏覽器信任。
接著我們繼續配置雙向的https。單向是服務端向客戶端提供自己的證書,客戶端用此證書驗證服務端的身份,雙向的話就是還需要客戶端向服務端提供證書,服務端用這個證書來驗證客戶端的身份。服務端這邊的話就只需要把我們剛才生成的第三個密鑰庫(導入了客戶端證書的那個)配置到tomcat中。這個需要配置到SSLHostConfig節點上。完整的connector的配置如下:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig truststoreFile="conf/server-trust.p12" truststorePassword="123456" certificateVerification="required">
            <Certificate certificateKeystoreFile="conf/tomcat-key.p12"
                         certificateKeystorePassword="123456"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>

truststoreFile就是配置的客戶端證書所在的密鑰庫,truststorePassword配置的是該密鑰庫的密碼,而certificateVerification配置為"required"表示必須進行客戶端身份驗證。配置完畢后我們重新啟動tomcat,然后嘗試訪問它。得到如下圖所示的頁面:


瀏覽器(圖4)

這是因為客戶端密鑰庫還沒有配置導致的??蛻舳擞妹荑€庫中的私鑰簽名后,服務端才能用我們剛才配置的受信任密鑰庫中的客戶端證書進行驗證。我使用的是chrome瀏覽器,打開瀏覽器的“設置”頁面,點擊左側的“隱私設置和安全性”菜單,


瀏覽器(圖5)

然后點擊上圖紅框中的“安全”,進入如下圖所示頁面:
瀏覽器(圖6)

往下滾動頁面,找到“管理證書”:


瀏覽器(圖7)

點擊右側紅框中的箭頭,彈出如下圖所示的windows系統證書管理界面:


證書設置(圖1)

然后點擊“導入”按鈕,進入證書導入向導:
證書設置(圖2)

點擊“下一步”,進入如下圖所示界面:
證書設置(圖3)

點擊“瀏覽”,選擇我們剛才生成的客戶端密鑰庫文件:


證書設置(圖4)

然后點擊“下一步”:
證書設置(圖4)

輸入密鑰庫的密碼,并且勾選“啟用強私鑰保護”復選框,點擊“下一步”:
證書設置(圖6)

默認證書存儲的位置是個人,我們不用改變它,直接點擊“下一步”:
證書設置(圖7)

最后點擊“完成”:
證書設置(圖8)

會彈出如上圖所示的一個提示框,我們不管它,直接點擊“確定”,然后會彈出導入成功的提示框,表示客戶端的密鑰庫已經配置完畢,這時我們再次嘗試訪問頁面:
瀏覽器(圖8)

瀏覽器會彈出一個如上圖所示的提示框,我們選中剛才配置的密鑰庫,然后點擊確定,此時還會彈出一個提示框:


瀏覽器(圖9)

點擊“允許”,完成后會看到tomcat的管理頁面已經正常打開了。
至此,針對tomcat的https雙向認證配置就完成了。
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,908評論 6 541
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,324評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,018評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,675評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,417評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,783評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,779評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,960評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,522評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,267評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,471評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,009評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,698評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,099評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,386評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,204評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,436評論 2 378

推薦閱讀更多精彩內容