SSL是為網絡通信提供安全以及保證數據完整性的的一種安全協議,SSL在網絡傳輸層對網絡連接進行加密。
例:cas 的單點登陸就用到了SSL
一、安全證書的生成
1、可以使用jdk自帶的證書生成工具,jdk自帶一個叫keytool的證書管理工具,可以用它來實現簽名的證書。
2、先配置好基本的java環境,ctrl+r 輸入cmd ,進入java 的目錄
3、例:生成一個別名叫tomcat 的證書 先使用命令進入jdk的bin 這里的密碼是123456
keytool -genkey -alias tomcat -keypass 123456 -keyalg RSA -keysize 1024 -validity 365 -keystore D:/keys/tomcat.keystore -storepass 123456
4、獲取一個tomcat.keystore的文件,將這個文件放到項目的目錄中
二、配置SSL
1、編輯application.properties這個文件
server.port=8443 server.ssl.key-store=tomcat.keystore server.ssl.key-password=changeit server.ssl.key-store-type=JKS server.ssl.key-alias=tomcat
我這里用的是默認密碼:changeit
三、http轉向https
1、這里需要配置使用TomcatEmbeddedServletContainerFactory這個類在啟動方法類中加入以下:
2、注意端口的修改
package com.example; 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.autoconfigure.SpringBootApplication; import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; import org.springframework.context.annotation.Bean; @SpringBootApplication public class SpringBootHttpsApplication { public static void main(String[] args) { SpringApplication.run(SpringBootHttpsApplication.class, args); } @Bean public EmbeddedServletContainerFactory servletContainer() { TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() { @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(8080); connector.setSecure(false); //監聽到http的端口號后轉向到的https的端口號 connector.setRedirectPort(8443); return connector; } }
三、測試使用
1、查看啟動信息
2、訪問地址localhost:8080/AmazeUI-2.7.2/login.html 我自定義了一個html網頁,它已經轉向到了8443端口
3、瀏覽器的地址欄中顯示不安全:因為這個證書是不收信任的,傳統一般都企業都是需要購買此證書的