由於HTTPS具有良好的安全性,在開發中得到了越來越廣泛的應用,像是微信公眾號、小程式等的開發都要使用HTTPS來完成。對於個人開發者而言,一個HTTPS 證書的價格還是有點貴,國內有一些雲端伺服器廠商提供免費的HTTPS證書,帳號可以申請數個。不過在jdk中提供了一個Java數位證書管理工具keytool,在\jdkbin目錄下,透過這個工具可以自己產生一個數位證書,產生指令如下:
keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore sang.p12 -validity 365
genkey表示要建立一個新的密鑰。
alias表示keystore的別名。
keyalg表示使用的加密演算法是RSA,一種非對稱加密演算法。
keysize表示金鑰的長度。
keystore表示產生的金鑰存放位置。
validity表示金鑰的有效時間,單位為天。
根據提示,在cmd視窗中執行命令時需要提供密碼或口令等信息,輸入即可完成執行程序。指令執行完成後,會在目前使用者目錄下產生一個名為sang.p12的檔案,將這個檔案複製到專案的根目錄下,然後在application.properties中做如下設定:
# key-store表示密钥文件名。 server.ssl.key-store=sang.p12 # key-alias表示密钥别名。 server.ssl.key-alias=tomcathttps #key-store-password 就是在cmd命令执行过程中输入的密码。 server.ssl.key-store-password=123456
設定成功後,啟動項目,在瀏覽器中輸入“https:/localhost:8080”以查看結果。請注意,產生的憑證未經瀏覽器認證,因此您需要添加信任或繼續前進。請參考下圖。
成功運行的結果如圖
#此時,如果以HTTP 的方式存取接口,就會訪問失敗,如圖
原話重寫:Spring Boot 不支援在設定中同時啟用HTTP 和HTTPS。這個時候可以設定請求重新導向,將 HTTP 請求重新導向為 HTTPS 請求。設定方式如下
@Configuration public class TomcatConfig { @Bean TomcatServletWebServerFactory tomcatServletWebServerFactory() { TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory() { @Override protected void postProcessContext(Context context) { SecurityConstraint constraint = new SecurityConstraint(); constraint.setUserConstraint("CONFIDENTIAL"); SecurityCollection collection = new SecurityCollection(); collection.addPattern("/*"); constraint.addCollection(collection); context.addConstraint(constraint); } }; factory.addAdditionalTomcatConnectors(createTomcatConnector()); return factory; } private Connector createTomcatConnector() { Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setScheme("http"); connector.setPort(8080); connector.setSecure(false); connector.setRedirectPort(8081); return connector; } }
這裡先設定一個TomcatServletWebServerFactory,然後新增一個Tomcat 中的Connector(監聽8080埠),並將請求轉送到8081上去。
設定完成後,在瀏覽器中輸入“http://localhost:8080/”,就會自動重定向到https://localhost:8081/ 上。
以上是SpringBoot的HTTPS配置如何實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!