Spring Boot项目配置https使用方案(使用jks进行配置)
1.腾讯云或者阿里云申请免费ssl证书
2.下载已经通过审核的证书文件夹,解压文件如下,根据项目选择使用
3.由于springboot内置Tomcat所以直接编写配置文件(yml.或者properties文件)我的项目是yml故以此为例:
server:
# 服务器的端口即需要访问的端口
port: 10087
tomcat:
# tomcat的URI编码
uri-encoding: UTF-8
# tomcat最大线程数,默认为200
max-threads: 800
# Tomcat启动初始化的线程数,默认值25
min-spare-threads: 30
#开启https认证配置
ssl:
key-store: classpath:a.b.cn.jks
key-password: 123456
key-store-type: JKS
client-auth: none
#client-auth: none 是否开启服务端认证为关闭
#key-store: classpath:a.b.cn.jks 这里需要将第二步Tomcat下的jks文件放到和yml同级目录下即resources下,classpath填写文件名
#key-password:密码在keystorePass.txt中
#key-store-type: JKS 当前我的申请的文件是JKS,还有其他类型请另谋攻略
4.如上步骤全部完成就完成全部步骤,即可重启项目通过: https://ip:10087访问项目,但是如果之前发布过项目会导致http访问失效,这时候就需要添加请求转发使所有http请求转发到https,有两种方案如果项目使用了nginx的直接nginx断言http请求代理到https,如下演示第二种通过后端代码转发
@Configuration
public class TomcatConfig {
@Bean
TomcatEmbeddedServletContainerFactory tomcatEmbeddedServletContainerFactory() {
TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory(){
@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;
}
private Connector createTomcatConnector() {
Connector connector = new
Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
//需要监听的端口号
connector.setPort(8080);
connector.setSecure(false);
//重定向到443端口,443端口为https的默认端口和http的80端口同效
connector.setRedirectPort(443);
return connector;
}
}
总结:
如上为全部springboot使用jks 配置https使用的方法,如有其他类型证书文件请另谋攻略,如上为自己项目配置流程