由于HTTPS 具有良好的安全性,在开发中得到了越来越广泛的应用,在微信公众号,小程序等都离不开HTTPS。对于个人而言,一个HTTPS的结果有点昂贵,国内开发服务器的厂商提供了免费的HTTPS证书,一个账户可以申请数个,不过在JDK中提供了一个java的数字证书管理工具,keytool在\jdk\bin目录中,通过这个工具可以生成一个数字证书,
keytool -getkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore sang.p12 -validity 365
如果这条指令无法生成可以自行查看网上的其他格式
命令解释:
-genkey
-alias tomcathttps(别名)
-keypass 123456(别名密码)
-keyalg RSA(算法)
-keysize 1024(密钥长度)
-validity 365(有效期,天单位)
-keystore sang.p12(指定生成证书的位置和证书名称)
-storepass 123456(获取keystore信息的密码)
这个时候在bin目录下就有一个sang.p12文件,把它复制到rspring boot项目中的resources目录中
配置.properties/.yml文件,我这里配置.yml文件
代码解释:
ssl: key-store: classpath:sang.p12 秘钥文件的路径 key-store-password: 123456 在cmd命令执行过程中输入的密码 keyStoreType: PKCS12 格式 keyAlias: tomcatHttps 别名
配置成功启动项目:访问:“https://localhsot:8808/index.html”,因为证书是自己生成的,不被游览器认可,此时添加信任继续前进
第一次访问游览器不认可,点击高级-->添加为信任继续访问就可以了
访问到了,再访问http看看
已经不能访问了,因为spring boot 不能同时在配置中启动HTTP和HTTPS,这个时候可以使用重定向,将HTTP重定向到HTTPS中
创建配置类MVCConfig 添加代码,
package com.example.demo.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.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MVCConfig { @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; } @Bean public Connector createTomcatConnector(){ Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setScheme("http"); connector.setPort(8807); connector.setSecure(false); connector.setRedirectPort(8808); return connector; } }
这里首先配置一个TomcatServletWebServerFactory,然后添加一个Tomcat中的Connector(监听8807端口),并将请求转发到8808端口
配置完启动项目在游览器中输入“Http://localhost:8807/index.html”,就会自动重定向到Https://localhost:8808/index.html上了