使用 SpringBoot 配置 https(SSL 证书)

本贴最后更新于 269 天前,其中的信息可能已经时过境迁

一、前言

最近公司后台系统与微信公众号对接的项目初步完成,在经过测试通过后,老板提醒我公司的官网是"https"协议的,而我之前的测试则都是"http"协议的,这下子我楞了一下,因此我需要给我自己的 tomcat 服务器上安装 ssl 证书,然后再重新进行测试(表示无所畏惧!!!),然而,除了在 tomcat 上面配置,我们还有其它的方法吗?毕竟,有些小伙伴是真的不太懂 tomcat(表示创建 SpringBoot 项目,内部集成 tomcat ,打包后,一个 jar 包启动,简单便捷,哪里还需要在 tomcat 中进行配置)有的,有的,既然 tomcat 这么讨厌,我们直接在 SpringBoot 中改造就好了。

二、改造流程

1、前提条件

我们需要拥有一个已经拥有 ssl 证书的域名,如果域名还没有 ssl 证书的话,可以先申请,现在大部分的厂家都支持每年一定额度的免费申请,如阿里云每年可以创建 20 个免费的证书。

登录阿里云的“数字证书管理服务”控制台,然后点击免费证书,再点击创建证书,填写相关信息,通过验证,等待几分钟就申请到啦
01SpringBoot 配置 https.jpg
02SpringBoot 配置 https.jpg
03SpringBoot 配置 https.jpg

2、下载 ssl 证书

接下来,我们点击下载按钮,下载 ssl 证书,这里我选择的是 JKS 格式
04SpringBoot 配置 https.jpg

3、改造 SpringBoot 项目

  1. 放置 ssl 证书文件:
    05SpringBoot 配置 https.jpg
  2. 修改 application.yml 文件:
    server:
      port: 443 # https默认访问端口
      ssl:
        enabled: true
        key-store: classpath:server.keystore # 证书存放的位置,若是放置在resources目录下,直接将server.keystore替换成你的证书名字即可
        key-store-password: 123456 #你的证书密码,即后缀名为“.txt”文件里面的内容
        key-store-type: JKS # P12证书格式
    
  3. 配置转换器(在启动类中增加内容)
    既然已经配置了 https 访问,那么原来使用 http 协议进行访问的路径也应该重定向到 https 路径下
    @SpringBootApplication
    public class TestProject3Application {
    
        // http 请求端口,线上配置为 8080
        @Value("${server.port-http}")
        private int serverPortHttp;
    
        // 服务器运行端口,等同于 HTTPS 请求端口,线上 443
        @Value("${server.port}")
        private int serverPortHttps;
    
            public static void main(String[] args) {
                SpringApplication.run(TestProject3Application.class, args);
            }
    
        /**
         * http重定向到https
         */
        @Bean
        public TomcatServletWebServerFactory servletContainer() {
            TomcatServletWebServerFactory tomcat;
            tomcat = new TomcatServletWebServerFactory() {
                @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);
                }
            };
            tomcat.addAdditionalTomcatConnectors(httpConnector());
            return tomcat;
        }
    
        @Bean
        public Connector httpConnector() {
            Connector connector = new Connector(Http11NioProtocol.class.getName());
            connector.setScheme("http");
            //Connector监听的http的端口号
            connector.setPort(serverPortHttp);
            connector.setSecure(false);
            //监听到http的端口号后转向到的https的端口号
            connector.setRedirectPort(serverPortHttps);
            return connector;
        }
    
    
    }
    

4、验证流程

  1. maven 打包成 jar 包
  2. 在终端控制器中移动到 jar 包所在的目录下,通过 java -jar xxxx.jar 启动项目
    06SpringBoot 配置 https.jpg
  3. 浏览器中使用 https://你的域名/项目名称 进行访问,如果浏览器地址栏显示安全锁标识,则说明 SpringBoot 项目改造成功。如下图所示:
    07SpringBoot 配置 https.jpg

三、总结

以上就是我个人使用 SpringBoot 配置 https 的整个流程,写完笔记之后,感觉更加流畅了,如果有什么问题,可以将问题发我邮箱 luodiab@126.com,欢迎各位的意见。

  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    941 引用 • 1458 回帖 • 151 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    69 引用 • 190 回帖 • 496 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...