在Tomcat上啟動SSL並安裝伺服器憑證
在Tomcat上啟動SSL並安裝憑證,其實並不是很難的工作。但因為步驟有好幾個,又不會常常做,每次遇到就要上網站看,有點麻煩。所以花點時間把他整理成一個SOP,照著做順利的話大約十分鐘左右就可以完成設定,節省不少時間。
1.建立一個Java Keystore:
Keystore是Java用來存放憑證資料的地方。他會是一個實體的檔案,只要在用的時候把檔案路徑指出來給JVM知道就好,所以我習慣在自己的工作電腦上做好Keystore以後,再copy到server上放,這樣比較節省時間。
建Keystore要用到keytool這個指令(在%JAVA_HOME%/bin下),假設我們現在的工作目錄在 c:\workplace下,指令如下:
[Unix]
%JAVA_HOME%/bin/keytool -genkey -alias tomcat -keyalg RSA -keystore keystore
[Windows]
%JAVA_HOME%\bin\keytool.exe -genkey -alias tomcat -keyalg RSA -keystore keystore
其中斜體的
執行過程中,會問一些問題,要輸入名稱、單位、地區、國家等等的資料,就按照實際的狀況去輸入即可。最重要的最後會問這個keystore的密碼,這個密碼務必要記住,往後每次下keytool指令都需要輸入這個密碼。
執行完後,會在 c:\workplace下出現一個名為keystore的檔案,這個檔案就是Keystore的實體檔案了。
注意一:有些單位可能只支援RSA演算法,所以-keyalg都是用RSA。
注意二:有時憑證可能是要用來做伺服器與伺服器之間的認證,所以cn那邊必須輸入主機的IP或domain name。但有些單位核發試用憑證時可能不支援輸入IP或domain格式,這部份可能要先查看一下該單位的說明。
2.建立一個本機的憑證簽核申請(Local Certificate Signing Request[CSR])
CSR是用來向憑證核發單位申請憑證之用。指令如下:
%JAVA_HOME%/bin/keytool -certreq -keyalg RSA -alias tomcat -file certreq.csr -keystore keystore
[Windows]
%JAVA_HOME%\bin\keytool.exe -certreq -keyalg RSA -alias tomcat -file certreq.csr -keystore keystore
執行完畢後,會在 c:\workplace下出現一個名為certreq.csr的檔案。
3.向憑證核發單位申請憑證
利用certreq.csr到憑證中心申請憑證。例如Verisign或Thawte網站,可以申請試用的憑證。大部分公司都提供網路申請,申請步驟大約如下(不同公司會有點不同):
a.進入試用功能
b.用文字編輯器開啟certreq.csr,將裡面的內容複製到網頁所指定的區域
c.輸入聯絡資料
d.完成後會產生憑證
有些公司是將憑證寄到email,有些是顯示在網頁上。不管哪一種,將憑證內容copy到 c:\workplace\test.cer,憑證內容大概是像下面的樣子:
-----BEGIN CERTIFICATE-----試用憑證期限很短,不同公司期限不同。不過瀏覽器還是可以選擇信任這個憑證,所以除非是商業用途,不然影響不大。
MIIDrzCCA1mgAwIBAgIQLLccCr9XrIsagvNqxc7JNjANBgkqhkiG9w0BAQUFADCB
qTEWMBQGA1UEChMNVmVyaVNpZ24sIEluYzFHMEUGA1UECxM+d3d3LnZlcmlzaWdu
LmNvbS9yZXBvc2l0b3J5L1Rlc3RDUFMgSW5jb3JwLiBCeSBSZWYuIExpYWIuIExU
RC4xRjBEBgNVBAsTPUZvciBWZXJpU2lnbiBhdXRob3JpemVkIHRlc3Rpbmcgb25s
eS4gTm8gYXNzdXJhbmNlcyAoQylWUzE5OTcwHhcNMDcwMzIyMDAwMDAwWhcNMDcw
NDA1MjM1OTU5WjBhMQswCQYDVQQGEwJUVzEPMA0GA1UECBMGdGFpcGVpMQ8wDQYD
VQQHFAZ0YWlwZWkxDzANBgNVBAoUBm9sZW1hcDELMAkGA1UECxQCcmQxEjAQBgNV
BAMUCWdwc19ncm91cDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAkCWCq5ND
4yD7QeiyTnGRM1painLuOTGLIAbKX9ff6n2/3TwIiRgLlOBGvE/NUCq6lTCdcKZ3
nbMUQndHlkQdFIQbpv3yhFCSXWdf0LEjPbU9+aCkraUMkAdnp42jRJCDzivpG/Bd
hSmC7eh3zw17ogKBYP7ZGUtd9BiQfj6AnjsCAwEAAaOCAV4wggFaMAkGA1UdEwQC
MAAwCwYDVR0PBAQDAgWgMDwGA1UdHwQ1MDMwMaAvoC2GK2h0dHA6Ly9jcmwudmVy
aXNpZ24uY29tL1JTQVNlY3VyZVNlcnZlci5jcmwwgawGA1UdIASBpDCBoTCBngYL
YIZIAYb4RQEHAQEwgY4wKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWdu
LmNvbS9DUFMwYgYIKwYBBQUHAgIwVjAVFg5WZXJpU2lnbiwgSW5jLjADAgEBGj1W
ZXJpU2lnbidzIENQUyBpbmNvcnAuIGJ5IHJlZmVyZW5jZSBsaWFiLiBsdGQuIChj
KTk3IFZlcmlTaWduMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjA0Bggr
BgEFBQcBAQQoMCYwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLnZlcmlzaWduLmNv
bTANBgkqhkiG9w0BAQUFAANBAE6kEOjaLx9QEZCVekuJrI7R8u11KgvU/ERGMFY0
GM6AufKwcNq+C/xh4df/XFtJugfh/wmp2cY8JupTXA7ObEo=
-----END CERTIFICATE-----
4.將根憑證(Root Certificate)匯入Keystore
根憑證通常可以在網路上下載,只要連線到憑證中心網頁,裡面通常都會提供測試用根憑證的下載。假設下載回來的根憑證名為c:\workplace\testRoot.cer,匯入指令如下:
[Unix]
%JAVA_HOME%/bin/keytool -import -alias root -trustcacerts -file testRoot.cer -keystore keystore
[Windows]
%JAVA_HOME%\bin\keytool.exe -import -alias root -trustcacerts -file testRoot.cer -keystore keystore
注意一:root是不能改的。
注意二:java會問是不是要信任這個指紋,預設是[否],所以記得要回答[是](y)。
5. 將憑證匯入Keystore
[Unix]
%JAVA_HOME%/bin/keytool -import -alias tomcat-trustcacerts -file test.cer -keystore keystore
[Windows]
%JAVA_HOME%\bin\keytool.exe -import -alias tomcat -trustcacerts -file test.cer -keystore keystore
6.修改Tomcat設定(conf/server.xml)
以5.x為例
<-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->粗體部分是要補充的設定,其中只要將keystore這個檔案複製到server上,再依照server的路徑設定,而keystorePass就是建立Keystore時所輸入的密碼。className="org.apache.coyote.tomcat5.CoyoteConnector"
port="8443" minProcessors="5" maxProcessors="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" debug="0" scheme="https" secure="true";
clientAuth="false" sslProtocol="TLS"
keystoreFile="c:\workplace\keystore" keystorePass="keystorePass
"/ >
7.重新啟動Tomcat
重新啟動Tomcat,再用瀏覽器測試,理論上就完成了。
沒有留言:
張貼留言