tomcat配置SSL雙向認證

Tomcat配置SSL的雙向認證
    證書保存在服務器端,用戶通過瀏覽器訪問時,需要將證書下載保存到本地,表示信任服務器。
    同樣瀏覽器中的證書也需要保存到服務器的證書庫中,表明當前瀏覽器的證書是可信的。
    環境:tomcat-6.0.18、jdk1.6.0_18
   
1. 爲服務器生成證書

    使用keytool 爲Tomcat 生成證書,假定目標機器的域名是"localhost",keystore 文件存放在"e:\keytool\tomcat.keystore",口令爲"aaaaaaa",使用如下命令生成:
   
        C:\java\jdk1.6.0_18\bin>keytool -genkeypair -v -alias tomcat -keyalg RSA -keystore e:\keytool\tomcat.keystore -dname "CN
    =localhost,OU=hansky,O=cr,ST=bj,C=zh_cn" -storepass aaaaaaa -keypass aaaaaaa
    正在爲以下對象生成 1,024 位 RSA 密鑰對和自簽名證書 (SHA1withRSA)(有效期爲 90 天):
             CN=localhost, OU=hansky, O=cr, ST=bj, C=zh_cn
    [正在存儲 e:\keytool\tomcat.keystore]

    如果Tomcat 所在服務器的域名不是"localhost",應改爲對應的域名,如"www.sina.com.cn",否則瀏覽器會彈出警告窗口,提示用戶證書與所在域不匹配。在本地做開發測試時,應填入"localhost"。

2. 生成客戶端證書
        爲瀏覽器生成證書,以便讓服務器來驗證它。爲了能將證書順利導入至IE和Firefox,證書格式應該是PKCS12,因此,使用如下命令生成:
        C:\java\jdk1.6.0_18\bin>keytool -genkeypair -v -alias lcl -keyalg RSA -storetype PKCS12 -keystore e:\keytool\lcl.p12 -dname "CN=lcl,OU=lc,O=r,L=bj,ST=bj,C=zh_cn" -storepass aaaaaaa -keypass aaaaaaa
    正在爲以下對象生成 1,024 位 RSA 密鑰對和自簽名證書 (SHA1withRSA)(有效期爲 90 天):
             CN=lcl, OU=lc, O=r, L=bj, ST=bj, C=zh_cn
    [正在存儲 e:\keytool\lcl.p12]

    對應的證書庫存放在"e:\keytool\lcl.p12",客戶端的CN可以是任意值。稍候,我們將把這個"my.p12"證書庫導
入到IE 和Firefox 中。

3. 讓服務器信任客戶端證書

    由於是雙向SSL 認證,服務器必須要信任客戶端證書,因此,必須把客戶端證書添加爲服務器的信任認證。
由於不能直接將PKCS12 格式的證書庫導入,我們必須先把客戶端證書導出爲一個單獨的CER 文件,使用如下
命令:
        C:\java\jdk1.6.0_18\bin>keytool -exportcert -alias lcl -keystore e:\keytool\lcl.p12 -storetype PKCS12 -storepass aaaaaaa -rfc -file e:\keytool\lcr.cer
    保存在文件中的認證 <e:\keytool\lcr.cer>
   
    通過以上命令,客戶端證書就被我們導出到"e:\keytool\lcr.cer"文件了。下一步,是將該文件導入到服務器的證書庫,添加爲一個信任證書:
        C:\java\jdk1.6.0_18\bin>keytool -importcert -v -file e:\keytool\lcr.cer -keystore e:\keytool\tomcat.keystore -storepass    aaaaaaa
    所有者:CN=lcl, OU=lc, O=r, L=bj, ST=bj, C=zh_cn
    簽發人:CN=lcl, OU=lc, O=r, L=bj, ST=bj, C=zh_cn
    序列號:4cd90399
    有效期: Tue Nov 09 16:17:29 CST 2010 至Mon Feb 07 16:17:29 CST 2011
    證書指紋:
             MD5:A4:BB:D1:E6:35:60:22:CC:DC:EF:6E:D9:B0:5C:2C:C7
             SHA1:12:90:4B:7A:C0:D8:EB:CC:7B:A7:15:8A:05:46:AC:F7:AE:BF:0E:62
             簽名算法名稱:SHA1withRSA
             版本: 3
    信任這個認證? [否]:  y
    認證已添加至keystore中
    [正在存儲 e:\keytool\tomcat.keystore]

    通過list 命令查看服務器的證書庫,我們可以看到兩個輸入,一個是服務器證書,一個是受信任的客戶端證
書:
    C:\java\jdk1.6.0_18\bin>keytool -list -v -keystore e:\keytool\tomcat.keystore -storepass aaaaaaa

    Keystore 類型: JKS
    Keystore 提供者: SUN

    您的 keystore 包含 2 輸入

    別名名稱: tomcat
    創建日期: 2010-11-9
    項類型: PrivateKeyEntry
    認證鏈長度: 1
    認證 [1]:
    所有者:CN=localhost, OU=hansky, O=cr, ST=bj, C=zh_cn
    簽發人:CN=localhost, OU=hansky, O=cr, ST=bj, C=zh_cn
    序列號:4cd9036e
    有效期: Tue Nov 09 16:16:46 CST 2010 至Mon Feb 07 16:16:46 CST 2011
    證書指紋:
             MD5:F8:8D:CC:72:34:D2:A3:17:8B:7E:AC:6F:ED:E2:21:24
             SHA1:B2:70:EC:86:27:79:88:05:E4:72:45:F3:93:38:2C:F6:A0:50:37:0C
             簽名算法名稱:SHA1withRSA
             版本: 3


    *******************************************
    *******************************************


    別名名稱: mykey
    創建日期: 2010-11-9
    輸入類型: trustedCertEntry

    所有者:CN=lcl, OU=lc, O=r, L=bj, ST=bj, C=zh_cn
    簽發人:CN=lcl, OU=lc, O=r, L=bj, ST=bj, C=zh_cn
    序列號:4cd90399
    有效期: Tue Nov 09 16:17:29 CST 2010 至Mon Feb 07 16:17:29 CST 2011
    證書指紋:
             MD5:A4:BB:D1:E6:35:60:22:CC:DC:EF:6E:D9:B0:5C:2C:C7
             SHA1:12:90:4B:7A:C0:D8:EB:CC:7B:A7:15:8A:05:46:AC:F7:AE:BF:0E:62
             簽名算法名稱:SHA1withRSA
             版本: 3


    *******************************************
    *******************************************

4. 將e:\keytool\tomcat.keystore拷貝到tomcat的根目錄下,我拷貝到c:\tomcat(這是我的tomcat安裝目錄)下

5. 配置tomcat
    打開Tomcat根目錄下的/conf/server.xml,找到如下配置段,修改如下:
    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"              
               clientAuth="true" sslProtocol="TLS"
               keystoreFile="tomcat.keystore" keystorePass="aaaaaaa"
               truststoreFile="tomcat.keystore" truststorePass="aaaaaaa"/>
    其中,clientAuth 指定是否需要驗證客戶端證書,如果該設置爲"false",則爲單向SSL 驗證,SSL 配置可到此結束。如果clientAuth設置爲"true",表示強制雙向SSL驗證,必須驗證客戶端證書。如果clientAuth設置爲"want",則表示可以驗證客戶端證書,但如果客戶端沒有有效證書,也不強制驗證。   

6. 導入客戶端證書
             如果設置了clientAuth="true",則需要強制驗證客戶端證書。雙擊"e:\keytool\lcl.p12"即可將證書導入至IE,導入證書後,即可啓動Tomcat,用IE 進行訪問。如果需要用FireFox 訪問,則需將證書導入至FireFox。
7. 測試
    https://localhost:8443/

總結/************************************************************************************************/
/************************************************************************************************/
/************************************************************************************************/
/************************************************************************************************/
/************************************************************************************************/
命令:

1.生成服務器證書:
keytool -genkeypair -v -alias tomcat -keyalg RSA -keystore e:\keytool\tomcat.keystore -storepass tomcat -keypass tomcat (-keysize 1024 -validity 365) //-validity爲證書有效期

2.生成客戶端證書:
keytool -genkeypair -v -alias lcl -keyalg RSA -storetype PKCS12 -keystore e:\keytool\lcl.p12 -storepass tomcat -keypass tomcat (-validity 365)

3.使服務器信任客戶端證書:
(A)先把客戶端證書導出爲一個單獨的CER文件
keytool -exportcert -alias lcl -keystore e:\keytool\lcl.p12 -storetype PKCS12 -storepass tomcat -rfc -file e:\keytool\lcr.cer
(B)將該文件導入到服務器證書庫:
keytool -importcert -v -file e:\keytool\lcr.cer -keystore e:\keytool\tomcat.keystore -storepass tomcat

4.查看檢查服務端證書庫:
keytool -list -v -keystore e:\keytool\tomcat.keystore -storepass tomcat

5.把tomcat.keystore放在tomcat根目錄下

6.配置tomcat:
 打開Tomcat根目錄下的/conf/server.xml,找到如下配置段,修改如下:
    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"              
               clientAuth="true" sslProtocol="TLS"
               keystoreFile="tomcat.keystore" keystorePass="tomcat"
               truststoreFile="tomcat.keystore" truststorePass="tomcat"/>
    其中,clientAuth 指定是否需要驗證客戶端證書,如果該設置爲"false",則爲單向SSL 驗證,SSL 配置可到此結束。如果clientAuth設置爲"true",表示強制雙向SSL驗證,必須驗證客戶端證書。如果clientAuth設置爲"want",則表示可以驗證客戶端證書,但如果客戶端沒有有效證書,也不強制驗證。   

7.導入客戶端證書:
雙擊客戶端證書文件-lcl.p12

8.測試
https://localhost:8443/

9.使tomcat全局都變爲https:
添加Tomcat根目錄下的/conf/web.xml:
 <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>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章