欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring Boot 支持 HTTPS 如此简单,So easy!

程序员文章站 2023-02-02 09:27:48
这里讲的是 Spring Boot 内嵌式 Server 打 jar 包运行的方式,打 WAR 包部署的就不存在要 Spring Boot 支持 HTTPS 了,需要去外部对应的 Server 配置。 你所需具备的基础 "什么是 Spring Boot?" "Spring Boot 核心配置文件详解 ......

这里讲的是 spring boot 内嵌式 server 打 jar 包运行的方式,打 war 包部署的就不存在要 spring boot 支持 https 了,需要去外部对应的 server 配置。

你所需具备的基础

更多请在java技术栈微信公众号后台回复关键字:boot。

支持 https

spring boot 配置 ssl 很简单,只需要通过一系列的 server.ssl.* 参数即可完成配置,如下所示。

application.properties 配置文件参考配置:

server.port=8443
server.ssl.protocol=tls
server.ssl.key-store=classpath:javastack.keystore
server.ssl.key-store-password=javastack
server.ssl.key-store-type=jks

如何在本地测试创建证书请参考java技术栈微信公众号的这篇文章《一分钟开启tomcat https支持》,把生成完的证书复制到 spring boot 项目中的 resources 目录即可。

这边只是提供了一个 ssl 单向验证的演示,更多 ssl 参数配置如下。

server.ssl.ciphers= # supported ssl ciphers.
server.ssl.client-auth= # whether client authentication is wanted ("want") or needed ("need"). requires a trust store.
server.ssl.enabled= # enable ssl support.
server.ssl.enabled-protocols= # enabled ssl protocols.
server.ssl.key-alias= # alias that identifies the key in the key store.
server.ssl.key-password= # password used to access the key in the key store.
server.ssl.key-store= # path to the key store that holds the ssl certificate (typically a jks file).
server.ssl.key-store-password= # password used to access the key store.
server.ssl.key-store-provider= # provider for the key store.
server.ssl.key-store-type= # type of the key store.
server.ssl.protocol=tls # ssl protocol to use.
server.ssl.trust-store= # trust store that holds ssl certificates.
server.ssl.trust-store-password= # password used to access the trust store.
server.ssl.trust-store-provider= # provider for the trust store.
server.ssl.trust-store-type= # type of the trust store.

参数对应的类:org.springframework.boot.web.server.ssl

上面的例子配置后就能开启 https 了,默认的 http 协议就不再支持了,spring boot 不支持以配置文件配置的方式同时支持 http 和 https。

如何同时支持?

如果你需要同时支持 http 和 https 这两个协议,就需要把另外一个协议用程序化的方式来配置。因为通过程序的方式配置 http 协议更加简单一点,所以,spring boot 推荐的做法是把 https 配置在配置文件,http 通过程序来配置。

来,下面示例就是通过程序的方式来额外支持 http 协议。

@springbootapplication
public class javastackapplication {

    @bean
    public servletwebserverfactory servletcontainer() {
        tomcatservletwebserverfactory tomcat = new tomcatservletwebserverfactory();
        tomcat.addadditionaltomcatconnectors(createstandardconnector());
        return tomcat;
    }

    private connector createstandardconnector() {
        connector connector = new connector("org.apache.coyote.http11.http11nioprotocol");
        connector.setport(8080);
        return connector;
    }

    public static void main(string[] args) {
        springapplication.run(javastackapplication.class, args);
    }

}

启动 spring boot 之后就会看到下面的同时支持两个协议日志。

tomcat started on port(s): 8443 (https) 8080 (http) with context path '/'

spring boot 支持 https 如此简单,开发现在把运维的事都做了……

好了,今天的分享就到这里,更多 spring boot 文章正在撰写中,关注java技术栈微信公众号获取第一时间推送。

在公众号后台回复:boot,还能获取栈长整理的往期 spring boot 教程,都是实战干货,以下仅为部分预览。

  • spring boot 读取配置的几种方式
  • spring boot 如何做参数校验?
  • spring boot 最核心的 25 个注解!
  • spring boot 2.x 启动全过程源码分析
  • spring boot 2.x 新特性总结及迁移指南
  • ……

本文原创首发于微信公众号:java技术栈(id:javastack),转载请原样保留本信息。