Spring Boot 2.x实战50 - Spring Web MVC 22 - Servlet容器(配置SSL与HTTP/2)

4.2.5 配置SSL

SSL全称为Secure Sockets Layer,它是建立web服务器和客户端(浏览器)之间安全连接的标准安全技术。它保证了web服务器和客户端之间传递数据保持私有和完整。

为了创建SSL连接,web服务器需要一个SSL证书。一般情况下,我们会购买证书,本例我们会通过java的工具keytool生成一个证书。

  • 生成证书:

    $ keytool -genkey -keyalg RSA -alias wisely -keystore keystore.jks -storepass pass1234 -validity 4000 -keysize 2048
    

Spring Boot 2.x实战50 - Spring Web MVC 22 - Servlet容器(配置SSL与HTTP/2)_第1张图片
命令执行目录下生成一个文件keystore.jks,将此文件拷贝到src/main/resources目录下。
Spring Boot 2.x实战50 - Spring Web MVC 22 - Servlet容器(配置SSL与HTTP/2)_第2张图片
我们在外部文件application.yml配置SSL:

server:
  ssl:
    key-store: classpath:keystore.jks
    key-store-password: pass1234
    key-store-type: JKS
    key-alias: wisely
    key-password: pass1234 

启动应用,访问https://localhost:8080/,显示:
Spring Boot 2.x实战50 - Spring Web MVC 22 - Servlet容器(配置SSL与HTTP/2)_第3张图片
在开发中我们可以忽略警告,我们在chrome浏览器地址栏输入chrome://flags/#allow-insecure-localhost设置为Enable并重启浏览器。

Spring Boot 2.x实战50 - Spring Web MVC 22 - Servlet容器(配置SSL与HTTP/2)_第4张图片
在Postman下也可以通过Settings -> General -> SSL certificate verification 并关闭。
Spring Boot 2.x实战50 - Spring Web MVC 22 - Servlet容器(配置SSL与HTTP/2)_第5张图片
我们可以通过配置ConfigurableServletWebServerFactoryConnector的Bean,当我们访问http时候自动转向https,注意此处要注释掉外部配置中端口配置。

#server.port: 8080
@Bean
ConfigurableServletWebServerFactory customWebServerFactory(){
    TomcatServletWebServerFactory server = new TomcatServletWebServerFactory(){
        @Override
        protected void postProcessContext(Context context) {
            SecurityConstraint securityConstraint = new SecurityConstraint();
            securityConstraint.setUserConstraint("CONFIDENTIAL");
            SecurityCollection collection = new SecurityCollection();
            collection.addPattern("/*");
            securityConstraint.addCollection(collection);
            context.addConstraint(securityConstraint);
        }
    };
    server.setPort(8443);
    server.addAdditionalTomcatConnectors(redirectConnector());
    return server;
}

@Bean
Connector redirectConnector() {
    Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
    connector.setScheme("http");
    connector.setPort(8080);
    connector.setSecure(false);
    connector.setRedirectPort(8443);
    return connector;
}

当我们访问http://localhost:8080时自动转向https://localhost:8443/。

4.2.6 配置HTTP/2

HTTP/2是万维网新版本的网络协议,它提供了服务端推送资源到客户端的功能。

开启HTTP/2必须要使用SSL,然后通过外部配置开启HTTP/2:

server.http2.enabled: true

Servlet 4的容器支持HTTP/2:

  • tomcat 配置:
    • tomcat 9.0.x +
    • JDK 9 +
  • jetty配置:
    • Jetty 9.4.8 +
    • org.eclipse.jetty:jetty-alpn-conscrypt-server 依赖
    • org.eclipse.jetty.http2:http2-server依赖
  • undertow配置
    • Undertow 1.4.0 +
    • JDK 8 +

目前版本的Postman还不支持HTTP/2,我们使用Chrome查看的效果如下:
Spring Boot 2.x实战50 - Spring Web MVC 22 - Servlet容器(配置SSL与HTTP/2)_第6张图片

新书推荐:

我的新书《从企业级开发到云原生微服务:Spring Boot 实战》已出版,内容涵盖了丰富Spring Boot开发的相关知识
购买地址:https://item.jd.com/12760084.html
Spring Boot 2.x实战50 - Spring Web MVC 22 - Servlet容器(配置SSL与HTTP/2)_第7张图片

主要包含目录有:

第一章 初识Spring Boot(快速领略Spring Boot的美丽)
第二章 开发必备工具(对常用开发工具进行介绍:包含IntelliJ IDEA、Gradle、Lombok、Docker等)
第三章 函数式编程
第四章 Spring 5.x基础(以Spring 5.2.x为基础)
第五章 深入Spring Boot(以Spring Boot 2.2.x为基础)
第六章 Spring Web MVC
第七章 数据访问(包含Spring Data JPA、Spring Data Elasticsearch和数据缓存)
第八章 安全控制(包含Spring Security和OAuth2)
第九章 响应式编程(包含Project Reactor、Spring WebFlux、Reactive NoSQL、R2DBC、Reactive Spring Security)
第十章 事件驱动(包含JMS、RabbitMQ、Kafka、Websocket、RSocket)
第11章 系统集成和屁股里(包含Spring Integration和Spring Batch)
第12章 Spring Cloud与微服务
第13章 Kubernetes与微服务(包含Kubernetes、Helm、Jenkins、Istio)
多谢大家支持。

你可能感兴趣的:(Spring,Boot2.x实战全集,Spring,Boot2.x实战,-,Spring,MVC,spring,boot,servlet,ssl,http/2)