参考:在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: tomcat
key-store-password: ******** #填写pfx-password.txt文件内的密码。
key-store-type: PKCS12
key-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: PKCS12
key-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;
@Configuration
public class TomcatConfig {
// http 请求端口,线上配置为 8080
@Value("${server.port-http}")
private int serverPortHttp;
// 服务器运行端口,等同于 HTTPS 请求端口,线上 443
@Value("${server.port}")
private int serverPortHttps;
@Bean
TomcatServletWebServerFactory tomcatServletWebServerFactory() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
// TODO Auto-generated method stub
SecurityConstraint 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,就报错如下
因为是自己生成的,是不被浏览器认可的,可以作为测试使用。