Tomcat設定https

本文章內容:

引用:https://dotblogs.com.tw/hank_blog/2018/01/31/145006

 

前言

公司網站最近要改走 https 協定,只需要在 Tomcat 設定一些步驟而已,可是後來發現轉換憑證也是門學問呢。

內文

產生jks檔案的指令:

keytool -genkey -alias <keystore檔的別名,例:tomcat> -keyalg RSA [-keysize 2048] -keystore <keystore檔的路徑及檔名,例:/etc/tomcat/tomcat.jks> [-validity 36500,默認3個月]
注意:過程中會有兩次需要輸入密碼的地方,第一次在一開始,第二次在最後,若放到Tomcat的話兩次密碼都要輸入一樣,但若放到JBoss的話兩次密碼可以不一樣,因為Tomcat在server.xml設定檔只設定一個密碼,而JBoss在host.xml設定檔可以設定兩個密碼。

第一次從公司 MIS 拿到的憑證是轉好的 .jks 檔案,這時候因為方便整理的關係我將這個.jks 檔案放到 conf 底下,然後只需要到 Tomcat 目錄下的 conf / server.xml 去做修改就好。

<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
	       keystoreFile="conf/gss.jks" keystorePass="******"
               clientAuth="false" SSLEngine="on" />

如果都沒改過的話,這段原本應該是註解起來的。然後加上 keystoreFile keystorePass就設定好了,重新啟動 Tomcat 就可以用 https 連上網站了。

第二次拿到的憑證是 .crt檔跟.key檔,這時候就比較麻煩了,需要自己去做加密,我這邊會介紹.p12 跟.jks,雖然有些許設定上的不同,但其實加密成.p12 或是.jks 都可以在 Tomcat 執行。 

.p12 檔

首先要先下載 OpenSSL 這邊提供 Windows 下載的版本,跟安裝教學如下:

  1. OpenSSL For Windows 載點 : http://gnuwin32.sourceforge.net/packages/openssl.htm
  2. OnenSSL 安裝教學 : https://www.sslbuyer.com/index.php?option=com_content&view=article&id=128:install-openssl-win7&catid=25:knowledge-news&Itemid=2595

下載並設定好之後就可以 OpenSSL 的指令了,首先將 .crt檔跟.key檔用命令提示字元轉成.p12 語法如下:

就成功加密出 .p12 檔案了,這時候可以直接上 Tomcat 設定了,設定如下。 

<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
	       keystoreFile="conf/gss.p12" keystorePass="******" keystoreType="pkcs12"
               clientAuth="false" SSLEngine="on" />

 這邊需要注意的點除了 keystoreFile keystorePass 還多了 keystoreType="pkcs12" 要去做設定,然後重啟 Tomcat 就成功囉。

 

.jks 檔

如果不想在 Tomcat 多做設定的話,可以再把 .p12 轉成 .jks ,這時候就要透過 Java KeyTool 工具。

首先需要下載 Java SDK 下載完成後,需要再 Java 底下的 Bin 才能執行 KeyTool ,語法如下 :

就能夠轉出 .jks 囉,Tomcat 的設定就如最上面那樣既可。

總結

其實.p12 跟.jks 都能在 Tomcat 下執行,但.p12 需要做型態設定 Tomcat 才能順利的去讀取,.jks 則需要.p12 再用 Java KeyTool 去轉,這邊就看個人取捨了。

這邊也提供將.jks 轉回 .crt.key 的方法

https://serverfault.com/questions/715827/how-to-generate-key-and-crt-file-from-jks-file-for-httpd-apache-server

 

名詞解釋
  • .key格式:密鑰文
  • .crt格式:證書文件,包含公鑰提供者信息,但不包含公鑰
  • .jks格式 :定義了包含私鑰與公鑰證書的文件格式,是 Java 默認的格式
  • .p12 又稱PKCS12:定義了包含私鑰與公鑰證書的文件格式,其中私鑰採密碼保護
  • PKCS(Public Key Cryptography Standards)是由RSA公司制定的一組關於公鑰加密的標準

 參考資料

https://stackoverflow.com/questions/11952274/how-can-i-create-keystore-from-an-existing-certificate-abc-crt-and-abc-key-fil

https://www.neohope.org/2012/08/06/jks_p12_convert/

https://www.sslbuyer.com/index.php?option=com_content&view=article&id=128:install-openssl-win7&catid=25:knowledge-news&Itemid=2595

https://dangfan.me/en/posts/certificates