1.證書生成
每一個JDK或者JRE里都有一個工具,叫做:keytool,安裝了jdk或jre之后,配置好JAVA環境之后,就可以直接在控制台使用該命令生成自簽名證書:
在控制台輸入:
keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore E:\Desktop\sslkey\keystore.p12 -validity 3650
命令參數說明:
1.-alias 證書別名
2.-storetype 指定密鑰倉庫類型
3.-keyalg 生證書的算法名稱,RSA是一種非對稱加密算法
4.-keysize 證書大小
5.-keystore 生成的證書文件的存儲路徑和文件名
6.-validity 證書的有效期
2.Spring Boot配置SSL
將證書復制到項目根目錄,修改application.yml文件:
server:
port: 8443
ssl:
key-alias: tomcat
key-store-password: root123
key-store-type: PKCS12
key-store: classpath:keystore.p12
到這一步,已經可以通過HTTPS來訪問Web了
3.HTTP自動轉向HTTPS
在spring boot入口類中添加如下代碼:
①spring boot1.x的配置:
// http轉向https
@Bean public EmbeddedServletContainerFactory servletContainer() { TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() { @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); } }; tomcat.addAdditionalTomcatConnectors(connector()); return tomcat; } @Bean public Connector connector() { Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setScheme("http"); connector.setPort(8080); connector.setSecure(false); connector.setRedirectPort(8443); return connector; }
②springboot 2.x的配置:
@Bean public ServletWebServerFactory servletContainer() { 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); } }; tomcat.addAdditionalTomcatConnectors(connector()); return tomcat; } @Bean public Connector connector() { Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setScheme("http"); connector.setPort(8080); connector.setSecure(false); connector.setRedirectPort(8443); return connector; }