1.介紹了密碼學的相關基礎知識後,本文介紹如何在tomcat上搭建https服務。java
環境:jdk7,tomcat7,windows7web
2.咱們使用java中自帶的javatool工具來製做所需的https所需的證書,keytool是java自帶的用於密鑰和證書的生成和管理工具。apache
3.這裏先介紹兩個文件格式:windows
jks(java key store),用來存儲密鑰已經數字證書的文件瀏覽器
csr(Certificate Signing Request),證書請求文件(就是證書申請者向相關證書頒發機構申請證書時所提交的文件,機構使用其根證書私鑰簽名就生成了證書公鑰文件--證書)。tomcat
cer:用於存儲公鑰證書的文件(就是數字證書)服務器
4.在開始以前咱們先明白咱們應該怎樣作:jsp
4.1.先製做一個根證書(用於簽發服務證書)工具
4.2.生成一個CSR格式的證書請求文件ui
4.3.用根證書對證書請求文件作簽名,並生成服務證書
4.4.將根證書添加到瀏覽器受信任的根證書頒發機構中
4.5.配置tomcat,使之支持https,併爲它指明已經簽發好的服務證書的路徑
4.6.部署一個web應用,並訪問。
5.咱們先進入命令行窗口,輸入keytool,顯示以下:
咱們能夠看到,有生成證書請求,生成密鑰對,根據證書請求生成證書等想關命令。
Step1:生成根證書
keytool -genkeypair -alias ROOTCERT -keyalg RSA -keystore rootlib.jks
命令解釋:生成一對RSA非對稱密鑰和一個自簽名證書,以別名ROOTCERT存儲在rootlib中。
注意:enter後,會提示輸入密鑰庫的使用口令,和填寫相關OU,CN等信息。以下圖:
以後會在你的當前工做目錄下生成一個rootlib.jks的文件。
Step2:生成證書請求
1)keytool -genkeypair -alias SERVERCERT -keyalg RSA -keystore serverlib.jks (跟step1步驟同樣)。
注意:此時」您的名字與姓氏是什麼」 ,須要輸入localhost(就是證書請求者的域名)。
2)keytool -certreq -file server.csr -alias SERVERCERT -keystore serverlib.jks
命令解釋:在serverlib文件中從別名爲SERVERCERT中取出公鑰和用戶信息生 成證書請求,並寫入到server.csr文件中。
以後會在你的當前工做目錄下生成一個server.csr的文件。
Step3:用根證書對證書請求籤名,生成應用證書
keytool -gencert -infile server.csr -outfile servercert.cer -alias ROOTCERT -keystore rootlib.jks
命令解釋:使用別名爲ROOTCERT的私鑰對server.csr證書請求進行簽發證書,並導入到servercert.cer 文件中。
Step4:導出根證書,添加爲客戶端受信任的根證書頒發機構中
1)keytool -exportcert -alias ROOTCERT -file root.cer -keystore rootlib.jks
命令解釋:從rootlib.jks將別名ROOTCERT的證書導出到root.cer文件中
2)回到圖形界面,切到命令窗口的工做目錄下,會有5個文件。
雙擊root.cer
點擊安裝證書,而後下一步,注意:
在證書存儲時,選擇放入指定的證書存儲,點擊瀏覽,選擇受信任的根證書頒發 機構,而後確認,下一步,完成,確認添加,便可。
Step5:配置tomcat
1)咱們先要更新serverlib.jks中的證書(用根證書籤發好的應用證書--servercert.cer)
keytool -importcert -alias SERVERCERT -file server.cer -keystore serverlib.jks
此時會報:沒法從回覆中創建鏈(這是由於更新的證書沒法信任)。咱們先要將根證書導入到serverlib.jks中,使之信任
2)keytool -importcert -alias TRUSTCERT -file root.cer -keystore serverlib.jks
3)這是在執行1)中的命令,便可更新。
注意:更新證書時的別名不能寫錯,不然keytool工具會認爲添加。
4)如今開始配置tomcat,修改server.xml文件
<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol"
minSpareThreads="5" maxSpareThreads="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" maxThreads="200" SSLEnabled="true"
scheme="https" secure="true"
keystoreFile="E:/key/serverlib.jks" keystorePass="123456"
clientAuth="false" sslProtocol="TLS"/>
clientAuth:設置是否雙向驗證,默認爲false,設置爲true表明雙向驗證,這裏咱們通常只作服務器驗證
keystoreFile:服務器證書文件路徑
keystorePass:服務器證書密碼
truststorePass:根證書密碼
注意:tomcat中https端口是8443,我改爲了443(https的默認端口),須要將http的redirectPort值也要改爲443,這樣瀏覽器發送https請求時才能夠重定向到修改的443端口上。
5)部署一個web應用,修改首頁index.jsp
將應用添加到tomcat中,啓動tomcat。
在地址欄輸入:
點擊Login
此時再看地址欄,咱們點擊https前面的鎖,就能夠看到咱們的應用證書了。
在點擊證書信息,就能夠看咱們申請的證書內容了,此時咱們再用代理的方式抓包以下:
瀏覽器與服務器之間數據就會被加密後在傳輸了。
注意:在step2時,咱們生成證書請求時的 」您的名字與姓氏是什麼」的值須要咱們的服務的主機名,若是不一致的瀏覽器訪問時就會報錯,以下圖