第一步:為伺服器生成證書
1、進入%java_home%/bin目錄
2、使用keytool為tomcat生成證書,假定目标機器的域名是“localhost”,keystore檔案存放在“d:\tomcat.keystore”,密碼為“password”,使用如下指令生成:
keytool -genkey -v -alias tomcat -keyalg rsa -keystore d:\tomcat.keystore -validity 36500
(參數簡要說明:“d:\home\tomcat.keystore”含義是将證書檔案的儲存路徑,證書檔案名稱是tomcat.keystore ;“-validity 36500”含義是證書有效期,36500表示100年,預設值是90天)
在指令行填寫必要參數:
a、輸入keystore密碼:此處需要輸入大于6個字元的字元串
b、“您的名字與姓氏是什麼?”這是必填項,并且必須是tomcat部署主機的域名或者ip[如:gbcom.com 或者 10.1.25.251](就是你将來要在浏覽器中輸入的通路位址),否則浏覽器會彈出警告視窗,提示使用者證書與所在域不比對。在本地做開發測試時,應填入“localhost”
c、“你的組織機關名稱是什麼?”、“您的組織名稱是什麼?”、“您所在城市或區域名稱是什麼?”、“您所在的州或者省份名稱是什麼?”、“該機關的兩字母國家代碼是什麼?”可以按照需要填寫也可以不填寫直接回車,在系統詢問“正确嗎?”時,對照輸入資訊,如果符合要求則使用鍵盤輸入字母“y”,否則輸入“n”重新填寫上面的資訊
d、輸入<tomcat>的主密碼,這項較為重要,會在tomcat配置檔案中使用,建議輸入與keystore的密碼一緻,設定其它密碼也可以
完成上述輸入後,直接回車則在你在第二步中定義的位置找到生成的檔案
第二步:為用戶端生成證書
為浏覽器生成證書,以便讓伺服器來驗證它。為了能将證書順利導入至ie和firefox,證書格式應該是pkcs12,是以,使用如下指令生成:
keytool -genkey -v -alias mykey -keyalg rsa -storetype pkcs12 -keystore d:\mykey.p12
對應的證書庫存放在“d:\mykey.p12”,用戶端的cn可以是任意值。輕按兩下mykey.p12檔案,即可将證書導入至浏覽器(用戶端)。
第三步:讓伺服器信任用戶端證書
由于是雙向ssl認證,伺服器必須要信任用戶端證書,是以,必須把用戶端證書添加為伺服器的信任認證。由于不能直接将pkcs12格式的證書庫導入,必須先把用戶端證書導出為一個單獨的cer檔案,使用如下指令:
keytool -export -alias mykey -keystore d:\mykey.p12 -storetype pkcs12 -storepass password -rfc -file d:\mykey.cer
通過以上指令,用戶端證書就被我們導出到“d:\mykey.cer”檔案了。下一步,是将該檔案導入到伺服器的證書庫,添加為一個信任證書:
keytool -import -v -file d:\mykey.cer -keystore d:\tomcat.keystore
通過list指令檢視伺服器的證書庫,可以看到兩個證書,一個是伺服器證書,一個是受信任的用戶端證書:
keytool -list -keystore d:\tomcat.keystore
第四步:讓用戶端信任伺服器證書
由于是雙向ssl認證,用戶端也要驗證伺服器證書,是以,必須把伺服器證書添加到浏覽的“受信任的根證書頒發機構”。由于不能直接将keystore格式的證書庫導入,必須先把伺服器證書導出為一個單獨的cer檔案,使用如下指令:
keytool -keystore d:\tomcat.keystore -export -alias tomcat -file d:\tomcat.cer
通過以上指令,伺服器證書就被我們導出到“d:\tomcat.cer”檔案了。輕按兩下tomcat.cer檔案,按照提示安裝證書,将證書填入到“受信任的根證書頒發機構”。
第五步:配置tomcat伺服器
打開tomcat根目錄下的/conf/server.xml,找到如下配置段,修改如下:
<connector port="8443" protocol="org.apache.coyote.http11.http11nioprotocol"
sslenabled="true" maxthreads="150" scheme="https"
secure="true" clientauth="true" sslprotocol="tls"
keystorefile="d:\\tomcat.keystore" keystorepass="password"
truststorefile="d:\\tomcat.keystore" truststorepass="password" />
屬性說明:
clientauth:設定是否雙向驗證,預設為false,設定為true代表雙向驗證
keystorefile:伺服器證書檔案路徑
keystorepass:伺服器證書密碼
truststorefile:用來驗證用戶端證書的根證書,此例中就是伺服器證書
truststorepass:根證書密碼
第六步:強制https通路
在tomcat\conf\web.xml中的</welcome-file-list>後面加上這樣一段:
<login-config>
<auth-method>client-cert</auth-method>
<realm-name>client cert users-only area</realm-name>
</login-config>
<security-constraint>
<web-resource-collection >
<web-resource-name >ssl</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>confidential</transport-guarantee>
</user-data-constraint>
</security-constraint>