SpringBoot 配置SSL证书,同时支持 http 与 https

前言

废话就不多讲了,直接开始。

我用的是阿里云免费版 DV SSL 证书,流程中需要做域名验证,最后下载证书。

  1. 阿里云,云盾免费证书申请,验证,下载证书(Tomcat)。
  2. 配置文件支持 HTTPS
  3. 配置类支持 HTTP

证书获取

阿里云证书申网上多的是,而且貌似也没有啥困难。

SpringBoot 配置SSL证书,同时支持 http 与 https_第1张图片

申请成功后下载证书:

SpringBoot 配置SSL证书,同时支持 http 与 https_第2张图片

SpringBoot 使用的是内置 Tomcat , 所以证书类型需要选择 Tomcat

下载后会有一个 pfx 文件 和一个密钥文件。

如果前置了 Nginx ,也需要下载 Nginx 证书且自行配置。


HTTPS 配置文件

server 下有三个配置参数如下,HTTPS 默认使用的端口为 server.port

server.httpPort 是为 HTTP 请求准备的,后面再使用。

server:
  httpPort: 52312
  port: 52311
  ssl:
    key-store: classpath:the.name.com.pfx
    key-store-password: 123456
    key-store-type: PKCS12

pfx 文件 复制到 resources 文件夹下,复制密钥。

如果只需要 HTTPS 请求,到这一步就可以了。一般来说,也并不需要配置2个端口来监听请求。

证书类型的话,看网上大佬这么总结的:

key-store-type类型 对应文件类型
PKCS12 带有私钥的证书,包含了公钥和私钥的二进制格式的证书形式,以 pfx 作为证书文件后缀名。
JKS Keystore,用来存放服务端证书,可以看成一个放key的库,key就是公钥,私钥,数字签名等组成的一个信息。一般都是 JDK 自带的 keytool 生成。

HTTP 配置类

HttpConfig 配置 HTTP 连接,因为默认端口配置文件支持了 HTTPS,所以使用配置类来支持 HTTP。

注入上面配置的 HTTP 端口。

@Configuration
public class HttpConfig {

    @Value("${server.httpPort}")
    private int httpPort;

    @Bean
    public ServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
        // 添加http
        tomcat.addAdditionalTomcatConnectors(createStandardConnector());
        return tomcat;
    }

    private Connector createStandardConnector() {
        //连接协议
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setPort(httpPort);
        return connector;
    }

}

启动后:

[restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : 
Tomcat started on port(s): 52311 (https) 52312 (http) with context path ''

可以发现,存在两个监听端口。


参考文章

https://blog.csdn.net/qq_38288606/article/details/89478353

https://blog.csdn.net/weixin_41917987/article/details/80988197

你可能感兴趣的:(散记杂文)