项目开发随笔:Springboot 配置SSL证书踩过的坑,端口一直占用

转逝 2022-05-27 10:53:57

一、Springboot 配置SSL证书过程

1.获取SSL证书

如果你是企业内的IT开发人员,正常服务器都是我们自己的运维部门或IT的硬件组搭建的,我们找对应的同事要用于此网站使用的SSL证书即可

如果你的服务器是使用的第三方云端的,可以参考这篇阿里云SSL证书文章获取https://developer.aliyun.com/article/766913

2.配置

获取到证书后,拿到里面的.jks格式的(这是为tomcat准备的证书),将其放入resource目录中,建议将证书名字更名为网站域名

在我们的application.yml中进行配置,若配置了对应的active 则到对应的yml中配置

在yml添加如下配置

key-store和 key-store-password是必须要有的

3.网站转为HTTPS

配好证书后我们需要在启动类里添加转化代码段


    // 如果没有使用默认值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,就很尴尬

然后我换了新密码,就正常了 

...全文
810 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

323,734

社区成员

发帖
与我相关
我的任务
社区描述
Java全栈社区
社区管理员
  • java李杨勇
  • 吃这么好
  • 阿莫 夕林
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧