Javaweb——SpringBoot 系列(6)加密传输配置

一、何为 SSL

  • SSL,Secure Socket Layer,中文译为安全连接层,是为网络通信提供安全及数据完整性的一种安全协议,在网络传输层对网络链接进行加密;SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通信提供安全支持。
  • SSL 协议分为两层:SSL 记录协议(SSL Record Protocol)和 SSL 握手协议(SSL Handshake Protocol)。
  • SSL 记录协议,建立在可靠的传输协议之上,如 TCP,为高层协议提供数据封装、压缩、加密等基本功能的支持
  • SSL 握手协议,建立在 SSL 记录协议之上,用于在实际数据开始传输前,通信双方进行身份认证、协商加密算法、交换加密密钥等。

二、SSL 证书生成

  • 使用 SSL 需要一个证书,这里用的是自授权证书。
  • JDK 或 JRE 为我们提供了一个用于生成证书的工具:keytool。
  • 生成 SSL 证书以及相关配置的步骤如下:

1、生成 .keystore

  • 首先先生成一个 .keystore 文件,这在项目中要用到,生成该文件的命令如下:
    keytool -genkey -alias tomcat -keypass 123456 -keyalg  RSA -keysize 1024 -validity 365 -keystore D:\users\lenovo\Spring项目\tomcat.keystore -storepass 123456
    
  • 命令中的路径可以修改为自己需要的路径

2、生成客户端证书

  • 这里有两步,首先是生成一个 .p12 文件,其命令如下:
    keytool -genkey -alias client -keypass 123456 -keyalg RSA -storetype PKCS12 -keypass 123456 -storepass 123456 -keystore D:\users\lenovo\Spring项目\client.p12
    
  • 紧接着利用上面生成的文件,生成一个 .cer 文件
    keytool -export -alias client -keystore D:\users\lenovo\Spring项目\client.p12 -storetype PKCS12 -keypass 123456 -file D:\users\lenovo\Spring项目\client.cer
    

3、生成服务器端证书

  • 先让服务器端信任客户端证书,其命令如下:
    keytool -import -v -file D:\users\lenovo\Spring项目\client.cer -keystore D:\users\lenovo\Spring项目\tomcat.keystore
    
  • 在利用 .keystore 文件生成一个服务器证书
    keytool -keystore D:\users\lenovo\Spring项目\tomcat.keystore -export -alias tomcat -file D:\users\lenovo\Spring项目\server.cer
    

4、安装证书

  • 双击最后生成的那个 .cer 文件,按照指示安装证书。

5、具体步骤请阅读下面链接中的博文

  • 以上操作我是参考博文

三、Spring Boot 项目简单实现 SSL

1、配置证书

  • 首先要让 Spring Boot 支持 SSL,得先进行相关的配置。
  • 把刚刚生成的 .keystore 文件复制到项目根目录。
  • 在 application.properties 文件中增加如下代码:
    server.ssl.key-store=tomcat.keystore
    server.ssl.key-store-password=123456
    server.ssl.key-store-type=JKS
    server.ssl.key-alias=tomcat
    

2、运行项目

  • 再次运行项目,则控制台相关关键信息如下图:
    在这里插入图片描述
  • 此时需要在浏览器(安装了相应证书的)地址栏输入:https:\localhost:8080\ 才能访问项目。

3、HTTP 自动跳转 HTTPS

  • 大部分网站为了安全,即便用户用 http 头开始也会自动跳转到 https 去,要到达这样,需要在入口类中增加两个 Bean 进行相应的逻辑处理,代码如下:
    @Bean
    public EmbeddedServletContainerFactory servletContainer() {
        TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {
            @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);
            }
        };
    
        tomcat.addAdditionalTomcatConnectors(httpConnector());
        return tomcat;
    }
    
    @Bean
    public Connector httpConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(8081);
        connector.setSecure(false);
        connector.setRedirectPort(8080);
        return connector;
    }
    
  • 运行项目,控制台提示的局部关键信息如下:
    在这里插入图片描述
  • 从图可以看出,端口 8080 是 https,而端口 8081 是http,但当我们用 http 访问 8081 端口时,服务器会自动跳转到 https 的 8080 端口。

4、自定义网页 Tag 图标

  • 正式运营的网站,其在浏览器中打开的标签页的标题栏都有自定义的 ICON,Spring Boot 支持对这个 ICON 进行设置。
  • 在 Spring Boot 中,这个 ICON 称之为 favicon。

4.1、打开与关闭 Favicon

  • Spring boot 是默认打开 Favicon 的;若要关闭 Favicon,则只需在 application.properties 文件中增加一句代码:
    spring.mvc.favicon.enabled=false
    
  • 保存,运行,则浏览器中的标签页不再显示个性化的 ICON,改为浏览器默认的图标:
    在这里插入图片描述

4.2、自定义 Favicon

  • 首先准备一个 .ico 文件,并且命名为 favicon.ico,只能是这个文件名。
    在这里插入图片描述
  • 将它放置在 resources 路径下。
  • 再将 application.properties 文件中刚刚增加的那句代码的值改为 true。
  • 运行,打开浏览器访问项目地址
    在这里插入图片描述

上一篇
下一篇

发布了146 篇原创文章 · 获赞 15 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42896653/article/details/104174781