323,734
社区成员
发帖
与我相关
我的任务
分享
如果你是企业内的IT开发人员,正常服务器都是我们自己的运维部门或IT的硬件组搭建的,我们找对应的同事要用于此网站使用的SSL证书即可
如果你的服务器是使用的第三方云端的,可以参考这篇阿里云SSL证书文章获取https://developer.aliyun.com/article/766913
获取到证书后,拿到里面的.jks格式的(这是为tomcat准备的证书),将其放入resource目录中,建议将证书名字更名为网站域名
在我们的application.yml中进行配置,若配置了对应的active 则到对应的yml中配置
在yml添加如下配置
key-store和 key-store-password是必须要有的
配好证书后我们需要在启动类里添加转化代码段
// 如果没有使用默认值80
@Value("${http.port}")
Integer httpPort;
// 正常启用的https端口 如443
@Value("${server.port}")
Integer httpsPort;
/*
springboot2 写法 同时支持http访问和https访问
*/
@ConditionalOnProperty(name = "condition.http2https", havingValue = "true", matchIfMissing = false)
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
// 如果要强制使用https,请松开以下注释
// SecurityConstraint constraint = new SecurityConstraint();
// constraint.setUserConstraint("CONFIDENTIAL");
// SecurityCollection collection = new SecurityCollection();
// collection.addPattern("/*");
// constraint.addCollection(collection);
// context.addConstraint(constraint);
}
};
tomcat.addAdditionalTomcatConnectors(httpConnector());
return tomcat;
}
private Connector httpConnector() {
System.out.println("启用http转https协议,http端口:" + this.httpPort + ",https端口:" + this.httpsPort);
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
// Connector监听的http的端口号
connector.setPort(httpPort);
connector.setSecure(false);
// 监听到http的端口号后转向到的https的端口号
connector.setRedirectPort(httpsPort);
return connector;
}
添加完后启动即可
1.在这次配置中我踩了一个比较大的坑,因为这个证书是之前一个项目用过的,所以代码段及配置我都是直接复制过来的,但是启动后一直报端口占用的异常,
然后我去cmd里找这个端口,却发现没有被占用,就很奇怪
搞了很久后,我把堆栈往上翻了翻,结果发现实际并不是端口占用的错误
这实际上是密码错误
然后我去问了下另外个项目负责的同事,结果他说证书前几个礼拜换过了,上一个到期了
emmmm,就很尴尬
然后我换了新密码,就正常了