如何在 SpringBoot 上 設定SSL
準備的資料
-
機器已安裝好jdk 因為需要使用 keytool
-
安裝 openssl
-
windows
choco install openssl
-
mac
brew install openssl
- 憑證 pem 和 key
使用 openssl 產生 pfx
- windows
找到 openssl 的安裝路徑 在 openssl.exe 點右鍵使用 系統管理員開啟 會有個命力提示字元可以使用
pkcs12 -export -out {{預期輸出的路徑和檔名.pfx}} -in {{pem的路徑和檔名.pem}} -inkey {{key的路徑和檔名.key}}
假設 憑證路徑 放在 c:/users/user/Downloads/
pem
c:/users/user/Downloads/mydomain.pem
key
c:/users/user/Downloads/mydomain.key
預期輸出的pdx 為
c:/users/user/Downloads/mydomain.pfx
指令會是
pkcs12 -export -out c:/users/user/Downloads/mydomain.pfx -in c:/users/user/Downloads/mydomain.pem -inkey c:/users/user/Downloads/mydomain.key
接著會需要輸入一組密碼 一定要記好 忘記就真的沒了 但也只是重產
使用 keytool 產生 jks檔案
開啟命令提示字元 輸入
keytool -importkeystore -srckeystore {{上一個步驟產生的pfx路徑}} -destkeystore {{期望產出jks檔案位置及檔名}} -srcstoretype PKCS12 -deststoretype JKS
範例
keytool -importkeystore -srckeystore c:/users/user/Downloads/mydomain.pfx -destkeystore c:/users/user/Downloads/mydomain.jks -srcstoretype PKCS12 -deststoretype JKS
接著會需要輸入一組密碼 一定要記好 忘記就真的沒了 但也只是重產
跑轉後就可以看到 jks 檔案在相對位置了
就可以拿著這個檔案去設定 ssl 了
SpringBoot yml 設定
將上一步驟產生的 jks 檔案放到 src/main/resources/ 資料夾下
開啟專案相對應的yml 檔案
增加設定 SSL
application.yml 增加
server:
ssl:
enabled: true # Activate HTTPS mode on the server port
key-store-type: JKS # PKCS12, JKS
protocol: TLS # SSL protocol to use
enabled-protocols: TLSv1.2 # Enabled SSL protocols
key-store: classpath:{{JKS檔案位置}} # e.g. /etc/tomcat7/keystore/tomcat.jks or /path/to/keystore.p12
key-store-password: { { 最後一次輸入的密碼 } }
SpringBoot application 設定 同時有 http & https (應本地端開發 無https)
於 yml 增加一個http port 和 ssl 用的post 不同
http:
port: 8087
於 springBoot Application.java 後面新增
@Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
// 添加http
tomcat.addAdditionalTomcatConnectors(createStandardConnector());
return tomcat;
}
private Connector createStandardConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setPort(httpPort);
return connector;
}
測試
可以將專案打包war 使用
java -jar XXX.war 來測試 如果 ssl 設定正確 就可以正常跑起來