1、 生成SSL證書(使用 Java jdk 自帶的工具 keytool)
找到jdk的安裝路徑(注意:這里是我本地的路徑...)
假設你已經配置了 JDK的環境變量,可以 忽略這下面的這一步。
2、輸入命令生成證書
keytool -genkeypair -alias server_https -keypass oukele -keyalg RSA -keysize 1024 -validity 365 -keystore D:/server_https.keystore -storepass oukele
-alias 別名 -keypass 指定生成密鑰的密碼 -keyalg 指定密鑰使用的加密算法(如 RSA) -keysize 密鑰大小 -validity 過期時間,單位:天 -keystore 指定存儲密鑰的 密鑰庫的生成路徑、名稱。 -storepass 指定訪問密鑰庫的密碼。
有警告提示的話,根據它的提示再操作一遍即可。
3、springboot 項目 配置 https
server: # https 配置 ssl: # 是否啟用 ssl 支持 (默認是 true) #enabled: true # 密鑰庫的路徑 key-store: classpath:server_https.keystore # 密鑰庫類型 key-store-type: JKS # 密鑰庫中密鑰的別名 key-alias: server_https # 用於訪問密鑰庫中密鑰的密碼 key-password: oukele # 用於訪問密鑰庫的密碼 key-store-password: oukele # 項目訪問的端口 port: 8088 # 用於 非ssl請求 強制轉成 ssl 請求 # 當使用 訪問地址:http://127.0.0.1:8089/hello 訪問時 后台會 將請求 轉換成 https://127.0.0.1:8088/hello non-ssl-port: 8089
server_https.keystore 存放的位置
4、編寫一個簡單的測試控制類 ,啟動訪問進行訪問
控制類:
進行訪問結果:
5、http強制跳轉https
新增一個 httpToHttpsConfig 類

package com.oukele.https.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.beans.factory.annotation.Value; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @author oukele * http 請求 強制跳轉成 https */ @Configuration public class HttpToHttpsConfig { /** * 項目指定的端口號 */ @Value("${server.port}") private int serverPort; /** * 用於 非ssl請求 強制轉成 ssl 請求 的端口號 */ @Value("${server.non-ssl-port}") private int port; @Bean public TomcatServletWebServerFactory servletContainerFactory() { TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() { @Override protected void postProcessContext(Context context) { //設置安全性約束 SecurityConstraint securityConstraint = new SecurityConstraint(); securityConstraint.setUserConstraint("CONFIDENTIAL"); //設置約束條件 SecurityCollection collection = new SecurityCollection(); //攔截所有請求 collection.addPattern("/*"); securityConstraint.addCollection(collection); context.addConstraint(securityConstraint); } }; Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); //設置將分配給通過此連接器接收到的請求的方案 connector.setScheme("http"); //true: http使用http, https使用https; //false: http重定向到https; connector.setSecure(false); //設置監聽請求的端口號,這個端口不能其他已經在使用的端口重復,否則會報錯 connector.setPort(port); //重定向端口號(非SSL到SSL) connector.setRedirectPort(serverPort); tomcat.addAdditionalTomcatConnectors(connector); return tomcat; } }
重新啟動項目,進行訪問
例如 瀏覽器輸入 http://127.0.0.1:8089/hello , 項目會自動將 該請求 轉換成 https://127.0.0.1:8088/hello 請求。
源碼地址:https://gitee.com/oukele/springboot-demo/tree/master/https