参考:在Spring Boot上启用HTTPS
Spring Boot配置SSL证书(开启https)
springboot配置https以及http重定向
SpringBoot开发案例之集成SSL证书
使用阿里云的证书
1:下载证书
将证书文件和密码文件拷贝到与配置文件application.properties或application.yml相同的目录下
2:配置application.yml文件
server:port: 443 #HTTPS协议默认端口号为443,需要使用其他端口时,您可以在此处自定义。ssl:key-alias: tomcatkey-store-password: ******** #填写pfx-password.txt文件内的密码。key-store-type: PKCS12key-store: classpath:<domain_name.pfx> #您需要使用实际的证书名称替换domain_name.pfx。
自己生成证书
1、利用keytool生成一个证书
-genkey 表示要创建一个新的密匙。
-alias 表示keystore的别名。
-keyalg 表示使用的加密算法是RSA,一种非对称加密算法。
-keystore 表示生成的密匙存放位置。
-validity 表示密匙的有效时间,单位为天。
keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650
在那个文件夹下运行这个keytool命令的,证书文件默认在当前目录下。
2、把证书文件拷贝到与配置文件application.properties或application.yml相同的目录下
3、application.yml增加ssl配置
classpath:是打包的jar文件里的相对路径,
file:是项目文件相对路径,jar文件放在什么文件夹下,那个就是项目文件路径
classpath是file的里面的。
#服务器端口配置server:port: 8888 #正常访问https的端口port-http: 8080 #这个是http端口,这个端口会做一个重定向的调整ssl:enabled: true #SSL证书是否启用(默认是true)key-store-password: 123456 #填写pfx-password.txt文件内的密码。key-store-type: PKCS12key-store: classpath:keystore.p12 #您需要使用实际的证书名称替换domain_name.pfx。
4、配置http和https的重定向
如果server-ssl-enabled=true,或者默认true的话,下面这个重定向开启后,如果没有配置正确的证书文件,就会报错。本地测试的时候,可以把server-ssl-enabled设置为false
package com.tj.config;import org.apache.catalina.Context;import org.apache.catalina.connector.Connector;import org.apache.coyote.http11.Http11NioProtocol;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;@Configurationpublic class TomcatConfig {// http 请求端口,线上配置为 8080@Value("${server.port-http}")private int serverPortHttp;// 服务器运行端口,等同于 HTTPS 请求端口,线上 443@Value("${server.port}")private int serverPortHttps;@BeanTomcatServletWebServerFactory tomcatServletWebServerFactory() {TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory() {@Overrideprotected void postProcessContext(Context context) {// TODO Auto-generated method stubSecurityConstraint constraint = new SecurityConstraint();constraint.setUserConstraint("CONFIDENTIAL");SecurityCollection collection = new SecurityCollection();collection.addPattern("/");constraint.addCollection(collection);context.addConstraint(constraint);}};factory.addAdditionalTomcatConnectors(createTomcatConnector());return factory;}private Connector createTomcatConnector() {Connector connector = new Connector(Http11NioProtocol.class.getName());//Connector监听的http的端口号connector.setPort(serverPortHttp);connector.setSecure(false);//监听到http的端口号后转向到的https的端口号connector.setRedirectPort(serverPortHttps);return connector;}}
5、配置好就可以启动项目,然后访问了
访问http
http://127.0.0.1:8080
会重定向到https
https://127.0.0.1:8888
如果不使用https,就报错如下
因为是自己生成的,是不被浏览器认可的,可以作为测试使用。
