SpringBoot的SSL證書部署,HTTPS安全訪問
阿新 • • 發佈:2021-12-17
首先我們訪問未擁有證書的證書都是通過HTTP,如果需要變為安全訪問HTTPS需要部署證書,HTTPS:SSL+HTTP
首先我們可以訪問阿里雲或者騰訊雲申請免費的證書,這裡使用阿里雲來演示
申請阿里雲免費SSL證書
訪問阿里雲,搜尋SSL證書
進入SSL證書控制檯,建立一個免費的證書
然後點選證書申請
按照要求填寫申請,推薦CSR生成方式為系統生成,現在的阿里雲填寫申請後,會自動將DNS解析記錄新增到對應網站的解析設定內,為了防止沒有自動賦值,可以自己看看有沒有驗證成功,未驗證成功就手動新增記錄
開啟我們的域名解析控制檯,我使用的阿里雲DNS,進入DNS管理控制檯
新增你的域名,並且解析DNS到這個域名,這邊已經解析了,就不演示了,解析後開啟解析設定,將證書申請記錄的DNS解析記錄賦值到網站解析設定內
驗證成功提交稽核就好了
下載證書
因為我們使用的是SpringBoot,環境為tomcat所以可以直接下載JKS證書,下載好後,我們會得到2個檔案,一個是證書,另外一個是金鑰
我們將證書檔案丟到resources
資原始檔夾同級目錄下
開啟application.yml在裡面進行配置
server: port: 443 # 代表443為https ssl: key-store: classpath:heidaotu.cn.jks # 驗證檔案地址,這邊是在resources資原始檔夾,所以使用classpath: 如果在其他資料夾使用file: key-store-password: 34af27bo9y5 # 金鑰 key-store-type: JKS # 證書型別 enabled: true # 啟動證書,這個是預設啟動,可以不需要填寫
到這裡執行spring boot專案試試吧,在控制檯會顯示http為80埠,https為443埠,我們訪問預設為80埠,如果想要訪問自動為443埠可以建立一個配置檔案,用來自動跳轉到443埠
http自動跳轉到https
這是配置檔案,我們只需要複製貼上直接使用即可,如果你的埠有自定義的話,就只需要更改監聽的埠號和跳轉埠號即可
package com.example.studentspringbootmybatisplus.config; import org.apache.catalina.Context; import org.apache.catalina.connector.Connector; import org.apache.tomcat.util.descriptor.web.SecurityCollection; import org.apache.tomcat.util.descriptor.web.SecurityConstraint; import org.springframework.boot.SpringApplication; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class HttpToHttpsConfig { public static void main(String[] args) { SpringApplication.run(HttpToHttpsConfig.class, args); } /** * http重定向到https * @return */ @Bean public TomcatServletWebServerFactory servletContainer() { TomcatServletWebServerFactory tomcat = 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); } }; tomcat.addAdditionalTomcatConnectors(httpConnector()); return tomcat; } @Bean public Connector httpConnector() { Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setScheme("http"); //Connector監聽的http的埠號 connector.setPort(80); connector.setSecure(false); //監聽到http的埠號後轉向到的https的埠號 connector.setRedirectPort(443); return connector; } }
這時我們訪問網站就自動跳轉到https了
如果無法跳轉,可以檢視你的伺服器防火牆埠是否開放443,我曾經碰到個BUG,開放了443埠和80埠還是無法訪問,重啟也沒用,最後重置伺服器,部署過然後才能訪問,果然重灌可以解決99%的BUG