利用tomcat ,jdk tools 搭建HTTPS雙向驗證環境

之前寫了一篇博文,用tomcat和jdk 的keytools搭建https環境,可是是屬於單向驗證的,若是本身須要的環境是單向驗證的環境,能夠參考  用tomcat搭建https算法

1、jdk自帶的工具keytool生成服務器端證書和客戶端證書

  1. keytool參數解釋shell

     keytool -genkeyapache

    -alias 證書別名瀏覽器

    -keypass 證書密碼 tomcat

    -keyalg 所使用的加密算法,例如:RSA安全

    -keysize 祕鑰長度,例如1024服務器

    -validity 有效期,以天爲單位,默認是90天app

    -keystore 指定生成證書的位置和證書名稱工具

    -storepass 獲取keystore信息的密碼測試

  2. 利用keytool工具生成證書

    在此示例中,個人密碼使用的bkyapp

    第一步:爲服務器生成證書

    keytool -genkey -alias tomcat -keyalg RSA -keysize 1024 -validity 365 -keystore D:/certs/server.keystore

    注意:您的姓氏名字這個是必填項,當在本機測試的時候能夠填寫localhost,可是當時生產環境中,必須填寫域名或者IP,例如www.baidu.com,要否則瀏覽器會彈出警告信息,提示用戶證書和所在域不匹配

    第二步:爲客戶端生成證書

    keytool -genkey -alias mykey -keyalg RSA -storetype PKCS12 -keypass bkyapp -storepass bkyapp -keystore D:/certs/client.p12

    生成客戶端證書之後,雙擊client.p12文件,而後安裝到可信任的第三方發佈者列表中便可

    第三步:讓服務端信任客戶端證書

    keytool -export -alias mykey -keystore D:/certs/client.p12 -storetype PKCS12 -keypass bkyapp -file D:certs/client.cer

    因爲服務端並不認識p12格式的客戶端證書,因此須要把客戶端證書轉化爲cer格式

    keytool -import -v -file D:/certs/client.cer -keystore D:/certs/server.keystore

    以上命令,導入客戶端證書client.cer 到server.keystore文件中,

    此時能夠運行 keytool -list -v -keystore D:/certs/server.keystore 查看server.keystore中有幾個證書

C:\Program Files\Java\jdk1.8.0_40\bin>keytool -list -v -keystore D:/certs/server.keystore
輸入密鑰庫口令:
密鑰庫類型: JKS
密鑰庫提供方: SUN
您的密鑰庫包含 2 個條目
別名: tomcat
建立日期: 2016-2-27
條目類型: PrivateKeyEntry
證書鏈長度: 1
證書[1]:
全部者: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
發佈者: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
序列號: 2feeb67a
有效期開始日期: Sat Feb 27 00:15:17 CST 2016, 截止日期: Sun Feb 26 00:15:17 CST 2017
證書指紋:
         MD5: 8F:CD:23:13:3F:DE:11:34:FB:1A:13:3A:63:7A:A8:C2
         SHA1: 5A:86:8B:8E:F3:8A:0D:54:6A:5D:05:F7:C5:C6:B9:6E:42:C2:9A:6B
         SHA256: 85:29:0C:8C:17:9B:4E:FB:2D:1E:98:4B:CF:05:9D:B5:7B:DA:62:88:C6:DC:5F:5D:F0:FC:EA:7D:B1:D1:8D:1D
         簽名算法名稱: SHA256withRSA
         版本: 3
擴展:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 3D B0 2F CD 1C 55 EF F9   3D 55 A5 79 1E A9 48 7F  =./..U..=U.y..H.
0010: C6 6C F5 77                                        .l.w
]
]

    能夠看出祕鑰庫中包含了兩個條目

    第四步:讓客戶端信任服務器證書

    keytool -keystore D:/certs/server.keystore -export -alias tomcat -file D:/certs/server.cer

    因爲瀏覽器是不認keystore格式的證書的,因此要把服務器的keystore格式的正式轉化爲cer證書,證書生成之後,雙擊server.cer證書,而後安裝到「受信任的根證書頒發機構」中

     以上過程總共生成四個文件,四個文件以下圖:


總結下來,證書的生成也就是五條命令,若是不想讀上面過程的話,直接按照次序運行下面五條命令便可:

keytool -genkey -alias tomcat -keyalg RSA -keysize 1024 -validity 365 -keystore D:/certs/server.keystore

keytool -genkey -alias mykey -keyalg RSA -storetype PKCS12  -keystore D:/certs/client.p12

keytool -export -alias mykey -keystore  D:/certs/client.p12 -storetype PKCS12  -file D:/certs/client.cer
keytool -import -v -file D:/certs/client.cer -keystore D:/certs/server.keystore

keytool -keystore D:/certs/server.keystore -export -alias tomcat -file D:/certs/server.cer

2、配置tomcat服務器

修改tomcat根目錄下conf文件夾下的server.conf文件,默認狀況下,8443端口是關閉的,下面這段代碼是被註釋掉的,打開而後進行配置便可

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="true" sslProtocol="TLS" 
               keystoreFile="D:/certs/server.keystore" 
               keystorePass="bkyapp" 
               truststoreFile="D:/certs/server.keystore" 
               truststorePass="bkyapp" />


clientAuth 表示是否對客戶端進行校驗,若是設置爲false,則配置的是單向驗證,即客戶端對服務器作驗證,可是服務器並不對客戶端驗證,只有把clientAuth設置爲true,纔是雙向驗證,而後設置keystoreFile和truststoreFile的位置和密碼

修改完畢之後,啓動tomcat訪問localhost:8443便可

經過chrom瀏覽器訪問,能夠在地址欄看到一個鎖的小圖標


三:相關說明

    若是你按照上面步驟作,而且最後看到正確的結果,過程不想看的話,下面的就不須要再看了,若是想看一下我操做的過程,能夠接着往下閱讀

 一、生成證書的整個shell文件

C:\Program Files\Java\jdk1.8.0_40\bin>keytool -genkey -alias tomcat -keyalg RSA -keysize 1024 -validity 365 -keystore D:/certs/server.keystore
輸入密鑰庫口令:
再次輸入新口令:
您的名字與姓氏是什麼?
  [Unknown]:  localhost
您的組織單位名稱是什麼?
  [Unknown]:
您的組織名稱是什麼?
  [Unknown]:
您所在的城市或區域名稱是什麼?
  [Unknown]:
您所在的省/市/自治區名稱是什麼?
  [Unknown]:
該單位的雙字母國家/地區代碼是什麼?
  [Unknown]:
CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正確?
  [否]:  y

輸入 <tomcat> 的密鑰口令
        (若是和密鑰庫口令相同, 按回車):

C:\Program Files\Java\jdk1.8.0_40\bin>keytool -genkey -alias mykey -keyalg RSA -storetype PKCS12  -keystore D:/certs/client.p12
輸入密鑰庫口令:
再次輸入新口令:
您的名字與姓氏是什麼?
  [Unknown]:  localhost
您的組織單位名稱是什麼?
  [Unknown]:
您的組織名稱是什麼?
  [Unknown]:
您所在的城市或區域名稱是什麼?
  [Unknown]:
您所在的省/市/自治區名稱是什麼?
  [Unknown]:
該單位的雙字母國家/地區代碼是什麼?
  [Unknown]:
CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正確?
  [否]:  y


C:\Program Files\Java\jdk1.8.0_40\bin>keytool -export -alias mykey -keystore  D:/certs/client.p12 -storetype PKCS12  -file D:/certs/client.cer
輸入密鑰庫口令:
存儲在文件 <D:/certs/client.cer> 中的證書

C:\Program Files\Java\jdk1.8.0_40\bin>keytool -import -v -file D:/certs/client.cer -keystore D:/certs/server.keystore
輸入密鑰庫口令:
全部者: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
發佈者: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
序列號: 1896b2e8
有效期開始日期: Sat Feb 27 00:16:58 CST 2016, 截止日期: Fri May 27 00:16:58 CST 2016
證書指紋:
         MD5: A8:72:9E:8E:55:E0:20:D4:19:98:4A:59:4E:7A:61:71
         SHA1: 13:9E:CB:4A:1F:1B:BB:62:DB:A4:C8:ED:9D:1B:EF:9B:FB:DA:AF:BD
         SHA256: 3F:88:F4:E3:32:0F:07:0A:08:E0:C1:EB:56:47:4B:9A:99:F2:2C:4D:63:77:44:18:97:CE:0E:73:6F:C4:71:B7
         簽名算法名稱: SHA256withRSA
         版本: 3

擴展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: DC 66 45 59 38 B7 06 C6   2D 64 8A 53 4C E9 A2 8F  .fEY8...-d.SL...
0010: 07 8A 04 E7                                        ....
]
]

是否信任此證書? [否]:  y
證書已添加到密鑰庫中
[正在存儲D:/certs/server.keystore]

C:\Program Files\Java\jdk1.8.0_40\bin>keytool -keystore D:/certs/server.keystore -export -alias tomcat -file D:/certs/server.cer
輸入密鑰庫口令:
存儲在文件 <D:/certs/server.cer> 中的證書

C:\Program Files\Java\jdk1.8.0_40\bin>keytool -list -v -keystore D:/certs/server.keystore
輸入密鑰庫口令:

密鑰庫類型: JKS
密鑰庫提供方: SUN

您的密鑰庫包含 2 個條目

別名: tomcat
建立日期: 2016-2-27
條目類型: PrivateKeyEntry
證書鏈長度: 1
證書[1]:
全部者: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
發佈者: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
序列號: 2feeb67a
有效期開始日期: Sat Feb 27 00:15:17 CST 2016, 截止日期: Sun Feb 26 00:15:17 CST 2017
證書指紋:
         MD5: 8F:CD:23:13:3F:DE:11:34:FB:1A:13:3A:63:7A:A8:C2
         SHA1: 5A:86:8B:8E:F3:8A:0D:54:6A:5D:05:F7:C5:C6:B9:6E:42:C2:9A:6B
         SHA256: 85:29:0C:8C:17:9B:4E:FB:2D:1E:98:4B:CF:05:9D:B5:7B:DA:62:88:C6:DC:5F:5D:F0:FC:EA:7D:B1:D1:8D:1D
         簽名算法名稱: SHA256withRSA
         版本: 3

擴展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 3D B0 2F CD 1C 55 EF F9   3D 55 A5 79 1E A9 48 7F  =./..U..=U.y..H.
0010: C6 6C F5 77                                        .l.w
]
]



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


別名: mykey
建立日期: 2016-2-27
條目類型: trustedCertEntry

全部者: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
發佈者: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
序列號: 1896b2e8
有效期開始日期: Sat Feb 27 00:16:58 CST 2016, 截止日期: Fri May 27 00:16:58 CST 2016
證書指紋:
         MD5: A8:72:9E:8E:55:E0:20:D4:19:98:4A:59:4E:7A:61:71
         SHA1: 13:9E:CB:4A:1F:1B:BB:62:DB:A4:C8:ED:9D:1B:EF:9B:FB:DA:AF:BD
         SHA256: 3F:88:F4:E3:32:0F:07:0A:08:E0:C1:EB:56:47:4B:9A:99:F2:2C:4D:63:77:44:18:97:CE:0E:73:6F:C4:71:B7
         簽名算法名稱: SHA256withRSA
         版本: 3

擴展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: DC 66 45 59 38 B7 06 C6   2D 64 8A 53 4C E9 A2 8F  .fEY8...-d.SL...
0010: 07 8A 04 E7                                        ....
]
]



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

二、不啓用對客戶端驗時,客戶端顯示出來的消息

首先會報警,說是否是安全鏈接,而後點擊高級,強制訪問的話,也是能夠訪問的,可是在瀏覽器地址欄https會被劃掉

三、在tomcat中開啓客戶端校驗,可是客戶端未導入證書時,服務器地址會沒法訪問,出現客戶端驗證失敗


另外附上我生成的certs文件

你也能夠直接下載的certs文件,部署到本機的tomcat下面,訪問localhost

http://pan.baidu.com/s/1o6Uoycq

相關文章
相關標籤/搜索