以阿里证书为例
1. 导入证书
将证书和证书密码复制到项目resources目录中
2. 配置 HTTPS 证书
在 application.yml 文件中配置 HTTPS 相关信息。443是 HTTPS 的默认端口,使用 HTTPS 就行访问的时候就不需要写额外的端口号(也可以配置其他端口),配置完成后使用https就可以访问了。
# 开发环境配置
server:
###配置https
port: 22222
http-port: 33333
#开启https,配置跟证书一一对应
ssl:
enabled: true
#指定证书
key-store: classpath:3453248__yhkdz.cn.pfx
key-store-type: PKCS12
#密码
key-store-password: wyrVseZe
3. HTTP 跳转 HTTPS
经过以上两步HTTPS 已经可以访问了,但是 HTTP 却不能访问;经过如下配置可以将HTTP强制跳转到HTTPS。如:访问 http://127.0.0.1:33333/index 会强制跳转到https://127.0.0.1:22222/index
/**
* http强制跳转https
*/
@Configuration
public class HttpToHttps {
@Value("${server.port}")
private int sslPort;//https的端口
@Value("${server.http-port}")
private int httpPort;//http的端口
@Bean
public TomcatServletWebServerFactory servletContainerFactory() {
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);
}
};
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
//设置将分配给通过此连接器接收到的请求的方案
connector.setScheme("http");
//true: http使用http, https使用https;
//false: http重定向到https;
connector.setSecure(false);
//设置监听请求的端口号,这个端口不能其他已经在使用的端口重复,否则会报错
connector.setPort(httpPort);
//重定向端口号(非SSL到SSL)
connector.setRedirectPort(sslPort);
tomcat.addAdditionalTomcatConnectors(connector);
return tomcat;
}
}