Tomcat (1) —— Mac下配置Tomcat Https/SSL

Richaaaard發表於2015-12-10

Tomcat (1) —— Mac下配置Tomcat Https/SSL


tomcat版本: tomcat-8.0.29

jdk版本: jdk1.8.0_65

參考來源:

SSL/TLS Configuration HOW-TO

【高可用HA】Apache (2) —— Mac下安裝多個Apache Tomcat例項

完美配置Tomcat的HTTPS

兩步搞定 Tomcat 下啟用 https:// 訪問

tomcat下配置https環境

安裝與配置

首先

參照博文配置好單個Tomcat例項作為https的目標測試服務環境。"./servers/cluster/tomcat/node-c"

【高可用HA】Apache (2) —— Mac下安裝多個Apache Tomcat例項

配置證照

1. 建立證照

證照是單點登入認證系統中很重要的一把鑰匙,客戶端於伺服器的互動安全靠的就是證照;本教程由於是演示所以就自己用JDK自帶的keytool工具生成證照;如果以後真正在產品環境中使用肯定要去證照提供商去購買,證照認證一般都是由VeriSign認證,中文官方網站:http://www.verisign.com/cn/

先檢視當前JAVA_HOME的jdk版本:

$ java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)
* 注意以下提示輸入伺服器域名的時候不能用IP地址

用JDK自帶的keytool工具生成證照:

$ keytool -genkey -alias hoau -keyalg RSA -keystore /Users/Richard/Documents/Dev/servers/cluster/tomcat/keys/hoaukey
輸入金鑰庫口令:
再次輸入新口令:
您的名字與姓氏是什麼?
    [Unknown]:  sso.hoau.com
您的組織單位名稱是什麼?
    [Unknown]:  hoau.com
您的組織名稱是什麼?
    [Unknown]:  sso
您所在的城市或區域名稱是什麼?
    [Unknown]:  Shanghai
您所在的省/市/自治區名稱是什麼?
    [Unknown]:  Shanghai
該單位的雙字母國家/地區程式碼是什麼?
    [Unknown]:  CN
CN=sso.hoau.com, OU=hoau.com, O=sso, L=Shanghai, ST=Shanghai, C=CN是否正確?
[否]:  y

輸入 <hoau> 的金鑰口令
    (如果和金鑰庫口令相同, 按回車):

Tomcat (1) —— Mac下配置Tomcat Https/SSL

* 關於以上問題引數的說明
  • 單點登陸伺服器的域名:

      您的名字與姓氏是什麼?
          [Unknown]:  sso.hoau.com
  • 公司的名稱:

      您的組織單位名稱是什麼?
          [Unknown]:  hoau.com
  • 單點登陸服務名稱:

      您的組織名稱是什麼?
          [Unknown]:  sso
  • 所在地及國別:

      您所在的城市或區域名稱是什麼?
          [Unknown]:  Shanghai
      您所在的省/市/自治區名稱是什麼?
          [Unknown]:  Shanghai
      該單位的雙字母國家/地區程式碼是什麼?
          [Unknown]:  CN
  • 最後輸入客戶端所用金鑰(Hoau123):

      輸入 <hoau> 的金鑰口令
      (如果和金鑰庫口令相同, 按回車):

如果出現如下錯誤:

keytool 錯誤: java.io.FileNotFoundException: /Users/Richard/Documents/Dev/servers/cluster/tomcat/keys/hoaukey (No such file or directory)

這可能是因為目標路徑上檔案不存在。

如果出現如下錯誤:

keytool 錯誤: java.io.FileNotFoundException: /Users/Richard/Documents/Dev/servers/cluster/tomcat/keys/hoaukey (Is a directory)

這是因為hoaukey是檔案目錄,將其刪除即可。

2. 匯出證照

:tomcat Richard$ keytool -export -file ./keys/hoau.crt -alias hoau -keystore ./keys/hoaukey
輸入金鑰庫口令:
    儲存在檔案 <./keys/hoau.crt> 中的證照

3. 為客戶端的JVM匯入證照

$ sudo keytool -import -keystore /Library/Java/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/Home/jre/lib/security/cacerts -file ./keys/hoau.crt

執行結果(此處金鑰庫口令與之前生成的口令相同)

輸入金鑰庫口令:
再次輸入新口令:
所有者: CN=sso.hoau.com, OU=hoau.com, O=sso, L=Shanghai, ST=Shanghai, C=CN
釋出者: CN=sso.hoau.com, OU=hoau.com, O=sso, L=Shanghai, ST=Shanghai, C=CN
序列號: 54668c91
有效期開始日期: Thu Dec 10 10:30:57 CST 2015, 截止日期: Wed Mar 09 10:30:57 CST 2016
證照指紋:
     MD5: 13:40:A0:58:44:73:95:C5:DD:5B:3F:A9:75:07:EF:9C
     SHA1: 31:06:8C:A7:68:34:BE:A1:28:11:DE:27:3E:62:58:58:D7:D5:C1:56
    SHA256: AC:6F:B2:DE:AC:69:D0:D6:BF:E6:A6:CD:BE:DF:EE:EA:79:17:FA:61:20:8D:06:24:E1:4B:00:55:5F:D9:65:BE
    簽名演算法名稱: SHA256withRSA
    版本: 3

擴充套件:

#1: ObjectId: 2.5.29.14 Criticality=false
    SubjectKeyIdentifier [
        KeyIdentifier [
            0000: 22 7B 1A C9 78 B8 F8 B3   0B 3A F5 30 DF A9 D7 B9  "...x....:.0....
            0010: FB E4 32 3D                                        ..2=
    ]
]

是否信任此證照? [否]:  y
證照已新增到金鑰庫中  

可能會出現錯誤

keytool 錯誤: java.io.IOException: Keystore was tampered with, or password was incorrect

可以通過檢視路徑設定是否正確或檢視jdk下security目錄下的cacerts檔案是否存在,如果存在可以通過rename的方式,將其改名。

Tomcat (1) —— Mac下配置Tomcat Https/SSL

配置伺服器

開啟"./tomcat/node-c/conf/server.xml"

將原來被註釋掉的SSL相關配置修改成:

<Connector port="8433" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS" 
           keystoreFile="/Users/Richard/Documents/Dev/servers/cluster/tomcat/keys/hoaukey" keystorePass="Hoau123"/>
           
*注意,此處我們將SSL的埠從"8443"修改成了"8433"

配置系統環境

在建立證照證照的時候,我們指定的伺服器域名為sso.hoau.com。為了能使本地瀏覽器
通過域名能正常訪問,我們需要修改增加host配置

127.0.0.1  sso.hoau.com

執行

執行命令

:node-c Richard$ ./bin/startup.sh

提示錯誤

-bash: ./bin/startup.sh: Permission denied

執行命令

sudo chmod +x ./bin/*.sh

再啟動

$ ./bin/startup.sh

停止命令為

$ ./bin/startup.sh
  • *此時可能會在catalina的log中出現如下錯誤

      10-Dec-2015 11:03:35.473 SEVERE [main] org.apache.tomcat.util.net.jsse.JSSESocketFactory.getStore Failed to load keystore type JKS with path /Users/Richard/.keystore due to /Users/Richard/.keystore (No such file or directory)
      java.io.FileNotFoundException: /Users/Richard/.keystore (No such file or directory)
          at java.io.FileInputStream.open0(Native Method)
          at java.io.FileInputStream.open(FileInputStream.java:195)
          at java.io.FileInputStream.<init>(FileInputStream.java:138)
          at java.io.FileInputStream.<init>(FileInputStream.java:93)

    可能的原因有兩個

    1. 注意SSL配置中的關鍵字key值都是區分大小寫的,比如"keystoreFile"和"keystorePass" 。
    2. 注意確認"keystoreFile"和"keystorePass"相關引數路徑的正確性。

測試

用瀏覽器訪問https://sso.hoau.com:8433,會出現結果:

Tomcat (1) —— Mac下配置Tomcat Https/SSL

結束

相關文章