Spring Boot 2.0 使用阿里云申请的免费SSL证书配置HTTPS
Spring Boot 2.0 配置HTTPS
1. 阿里云申请免费的SSL证书
本地测试可以用jdk自带的工具生成, 自行百度证书生成指令
证书申请下来后根据需要下载 此处下载tomcat证书
2. Spring Boot 项目Properties参数配置
将证书文件复制到resources目录下
注意证书路径要带上 classpath:
server:
# 端口 使用HTTPS默认端口
port: 443
#HTTPS加密配置
ssl:
#证书路径
key-store: classpath:666.pfx
#证书密码
key-store-password: 123456
额外说明一下 如果端口被占用
-
Windows下的解决办法
# 查询所有端口 # netstat -ano #这里做个过滤 netstat -ano | findstr "443"
记住上图的PID
tasklist | findstr "14540"
进任务管理器杀死java.exe进程,也可以直接在详情查找PID为14540的进程 ,杀之
-
centos7 下杀死占用端口的进程
# 根据端口号得到其占用的进程的详细信息 netstat -lnp|grep 80 # 查看进程的详细信息 ps "pid" #直接杀掉占用端口的进程 -9是强制关闭 kill -9 "pid" #一次性清除占用80端口的程序 lsof -i :80|grep -v "PID"|awk '{print "kill -9",$2}'|sh
3. 配置HTTP 访问自动转 HTTPS
向Spring容器中注入两个Bean
注意 1.5版本没有TomcatServletWebServerFactory类
1.5版本用EmbeddedServletContainerFactory 2.0版本已删
/**
* http 转 https
*/
@Bean
public Connector connector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
// 监听的http端口
connector.setPort(8082);
connector.setSecure(false);
// 监听到http端口后跳转的https端口
connector.setRedirectPort(443);
return connector;
}
/**
* 拦截所有的请求
*/
@Bean
public TomcatServletWebServerFactory tomcatServletWebServerFactory(Connector connector) {
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;
}
至此大功告成, 打包部署测试吧