springboot SSL配置

SSL的配置也是我们在实际应用中经常遇到的场景。

SSL(Secure Sockets Layer,安全套接层)是为网络通信提供安全及数据完整性的一种安全协议,SSL在网络传输层对网络连接进行加密。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通信提供安全支持。

SSL协议可分为两层:SSL记录协议(SSL Record Protocol),它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Handshake Protocol),它建立在SSL记录协议之上,用于在实际数据传输开始前,通信双方进行身份认证、协商加密算法、交换加密密钥等。

而在基于B/S的Web应用中,是通过HTTPS来实现SSL的。HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即在HTTP下加入SSL层,HTTPS的安全基础是SSL。

因为Spring Boot用的是内嵌的Tomcat,因而我们做SSL配置的时候需要做如下的操作。

生成证书

使用SSL首先需要一个证书,这个证书既可以是自签名的,也可以是从SSL证书授权中心获得的。本例为了演示方便,演示自授权证书的生成。每一个JDK或者JRE里都有一个工具叫keytool,它是一个证书管理工具,可以用来生成自签名的证书

在控制台输入如下命令,然后按照提示操作,如图7-13所示。keytool –genkey  -alias tomcat 

生成的证书在这里 

 

将keysotre文件复制到项目根目录 

 配置SSL

添加一个index.html到src/main/resources/static下,作为测试。

将.keystore文件复制到项目的根目录,然后在application.properties中做如下SSL的配置:

server.port=8090

server.ssl.key-store=.keystore
server.ssl.key-password=111111
server.ssl.key-store-type=JKS
server.ssl.key-alias=tomcat

 http转向https

很多时候我们在地址栏输入的是http,但是会自动转向到https,例如我们访问百度的时候,要实现这个功能,我们需配置TomcatEmbeddedServletContainerFactory,并且添加Tomcat的connector来实现。这时我们需要在配置文件里增加如下配置:

package com.shrimpking.Test1;

import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2024/1/8 15:30
 */
@Configuration
public class TempConfig
{
    @Bean
    public EmbeddedServletContainerFactory embeddedServletContainerFactory(){
        TomcatEmbeddedServletContainerFactory factory
                = 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);
            }
        };

        factory.addAdditionalTomcatConnectors(httpConnector());
        return factory;
    }

    @Bean
    public Connector httpConnector(){
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(8089);
        connector.setSecure(false);
        connector.setRedirectPort(8888);
        return connector;
    }

}

在使用SpringBoot开发Web应用时,为确保数据传输的安全,需要通过证书对网站进行加密和验证。SSL证书可以认证服务器的身份,并通过加密机制,保证数据传输的私密性和完整性。SpringBoot支持使用自签名证书和第三方证书来实现SSL证书的配置配置自签名证书步骤如下: 1. 创建keystore文件:通过keytool命令生成一个用于存储SSL证书的keystore文件; 2. 配置ssl属性:在application.properties或application.yml中添加以下配置信息: server.port: 443 #HTTPS默认端口 server.ssl.key-store: classpath:ssl/keystore.p12 #证书存储路径 server.ssl.key-store-password: password #证书密码 server.ssl.key-store-type: PKCS12 #证书类型 server.ssl.key-alias: tomcat #证书别名 server.ssl.enabled=true #启用SSL 配置第三方证书步骤如下: 1. 申请证书:向第三方证书提供商购买SSL证书; 2. 导入证书:将证书导入到keystore文件中,可使用keytool命令导入; 3. 配置ssl属性:在application.properties或application.yml中添加以下配置信息: server.port: 443 #HTTPS默认端口 server.ssl.key-store: classpath:ssl/keystore.p12 #证书存储路径 server.ssl.key-store-password: password #证书密码 server.ssl.key-store-type: PKCS12 #证书类型 server.ssl.key-alias: tomcat #证书别名 server.ssl.enabled=true #启用SSL 在以上配置完成后,即可启动SpringBoot应用程序,并通过https://localhost:443进行访问,访问时可以看到浏览器中有加密锁标记,表示数据已经开始加密传输。同时,也可使用在线工具或postman等第三方工具进行测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虾米大王

有你的支持,我会更有动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值