最近碰到Tomcat要升級Https需求,希望升級後能通過SSLLAB的A級評分,首先需要申請SSL憑證來啟用Https,以下是這次的做法,趁遺忘前趕快筆記下來。
申請SSL憑證
升級HTTPS首先需要一個SSL憑證,我們這次使用SSL-FOR-FREE來申請免費憑證來做測試。如何申請可以參考: 免費SSL憑證申請。我是利用Manual Verification來做驗證,申請完成後會拿到下面這三個檔:
- certificate.crt
- ca_bundle.crt
- private.key
建立jks檔
因為tomcat7只支援JKS, PKCS11 or PKCS12格式的keystores,詳細請看官網說明@Configuration,所以我們要進行合併,接下來會以JKS檔做為範例:
- 主機安裝openssl: 此文章OS為Windows環境,詳細安裝請參考此篇
- 上傳這三個檔案certificate.crt、ca_bundle.crt和private.key至主機(e.g. C:\Users\Desktop\SSL\)。
- 把openssl加進環境變數,方便等等可以呼叫。
- 打開cmd,先移到三個檔案位置並輸入下面指令
openssl pkcs12 -export -out certificate.pfx -inkey private.key -in certificate.crt -certfile ca_bundle.crt
- 輸入密碼及驗證
Enter Export Password: password
Verifying — Enter Export Password: password
- 透過上面的指令會產生一個certificate.pfx檔。cmd移動位置到jdk位置
(e.g. C:\Program Files\Java\jdk1.8.0_221\bin\),輸入下列指令生成JKS檔,記得更改這些東西: pfx檔路徑、剛剛設定的password、jks建立位置,成功後會得到一個keystore.jks檔:
keytool -importkeystore -srckeystore “C:\Users\Desktop\SSL\certificate.pfx” -srcstorepass password -srcstoretype pkcs12 -destkeystore “C:\Users\Desktop\SSL\keystore.jks” -deststoretype jks -deststorepass password
- 完成jks檔建成後,接下來要更改Tomcat設定,打開tomcat/conf裡的server.xml,uncomment下面這一個connector,接著更改jks路徑以及前面設定的password,儲存後重啟Tomcat,就可以看到綠色鎖頭啦~
<Connector
protocol=”org.apache.coyote.http11.Http11NioProtocol”
port=”443" maxThreads=”500"
scheme=”https” secure=”true” SSLEnabled=”true”
keystoreFile=”C:\Users\Desktop\SSL\keystore.jks” keystorePass=”password”
clientAuth=”false” sslEnabledProtocols=”TLSv1.2"
ciphers=”TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
/>
P.S. Let’s Encrypt的SSL憑證雖然免費但效期只有三個月,所以每三個月要記得進行更新,不然就是向信任的廠商購買憑證($$$)。