Email:2225994292@qq.com
CNY
Spring Boot应用启用HTTPS:SSL证书配置教程
更新时间:2025-07-02 作者:SSL证书配置教程

对于Spring Boot应用而言,将HTTP协议升级为HTTPS协议,是保障数据传输安全、防止信息泄露和篡改的关键手段。HTTPS通过SSL/TLS(安全套接字层/传输层安全)协议对数据进行加密传输,而SSL证书则是实现HTTPS的核心组件。本教程将详细介绍如何在Spring Boot应用中进行SSL证书配置,帮助你的应用顺利启用HTTPS。

一、HTTPS与SSL证书基础概念

1. HTTPS原理

HTTPS是在HTTP的基础上加入了SSL/TLS协议层,形成了“HTTP+SSL/TLS=HTTPS”的架构。在数据传输过程中,客户端与服务器首先通过SSL/TLS协议进行握手,协商加密算法和密钥,建立安全连接。随后,应用层数据(如HTTP请求和响应)在传输前会被SSL/TLS层加密,加密后的数据通过网络传输到服务器,服务器接收后使用相应的密钥进行解密,获取原始数据。这一过程确保了数据在传输过程中的保密性、完整性和真实性,有效防止中间人攻击、数据窃取等安全威胁。

2. SSL证书作用

SSL证书是由受信任的证书颁发机构(简称CA)签发的数字证书,它包含了服务器的公钥、域名、有效期、颁发机构等信息,并经过CA的数字签名。SSL证书的主要作用有:

  • 身份验证:客户端在与服务器建立连接时,会验证服务器的SSL证书。通过验证证书的有效性、颁发机构的可信度以及证书中的域名是否与实际访问域名一致,确保客户端连接到的是合法的服务器,防止连接到伪造的钓鱼网站。
  • 数据加密:SSL证书中的公钥用于加密数据,服务器的私钥用于解密数据。只有拥有对应私钥的服务器才能解密数据,保证了数据传输的保密性,即使数据在传输过程中被截取,攻击者也无法解密查看内容。

二、获取SSL证书

1. 购买商业SSL证书

商业SSL证书由知名的CA机构颁发,如DigiCert、Comodo、Sectigo等。这些证书具有较高的安全性和可信度,适用于对安全要求较高的企业级应用和网站。购买商业SSL证书的一般流程如下:

  • 选择证书类型:根据应用需求选择合适的证书类型,常见的有单域名证书(保护一个域名)、多域名证书(保护多个不同域名)、通配符证书(保护一个主域名及其所有子域名)等。
  • 提交申请:在CA机构的官方网站上填写申请信息,包括域名、企业信息(如企业名称、地址、联系方式等),并进行域名验证和企业身份验证。域名验证方式通常有文件验证(在服务器指定目录上传特定文件)、邮件验证(通过域名对应的邮箱接收验证邮件)等;企业身份验证则需要提供营业执照、组织机构代码证等相关证明文件。
  • 支付费用:根据所选证书类型和有效期,支付相应的费用。商业SSL证书的价格因证书类型、品牌和有效期而异,一般每年从几百元到数千元不等。
  • 下载证书:验证通过后,在CA机构网站下载证书文件。证书文件通常包含多个文件,如 .crt 格式的证书文件(包含公钥和证书信息)、 .key 格式的私钥文件等,不同CA机构提供的文件格式和数量可能略有差异。

2. 使用免费SSL证书

对于个人开发者或对安全性要求相对较低的应用,可使用免费的SSL证书。Let's Encrypt是目前最常用的免费CA机构,它提供自动化的证书申请和管理工具,操作简便。使用Let's Encrypt获取SSL证书的步骤如下:

  • 安装Certbot工具:Certbot是Let's Encrypt官方提供的证书申请和管理工具,支持多种操作系统和Web服务器。根据你的服务器操作系统和应用部署环境,按照官方文档安装Certbot。例如,在Ubuntu系统中,可通过以下命令安装:
1    sudo apt update
2    sudo apt install certbot python3-certbot-apache
  • 申请证书:使用Certbot命令申请证书,例如,若你的Spring Boot应用部署在Apache服务器上,且域名为 example.com ,可执行以下命令:
1    sudo certbot --apache -d example.com -d www.example.com

该命令会自动完成域名验证、证书申请和配置工作,将证书安装到Apache服务器中。如果你的应用未使用Apache服务器,也可使用Certbot的其他插件或手动配置证书。

  • 证书自动续期:Let's Encrypt颁发的证书有效期通常为90天,Certbot默认会配置自动续期任务,确保证书在过期前自动更新。你可以通过查看系统的定时任务配置(如 /etc/cron.d/certbot 文件)来确认自动续期设置。

三、Spring Boot应用中配置SSL证书

1. 准备证书文件

无论使用商业证书还是免费证书,在配置到Spring Boot应用前,都需要将证书文件准备好。通常需要将证书文件( .crt )和私钥文件( .key )放置在Spring Boot项目的合适位置,例如 src/main/resources/ssl 目录下(可根据实际情况创建目录)。

2. 添加依赖

在Spring Boot项目的 pom.xml 文件(Maven项目)或 build.gradle 文件(Gradle项目)中添加Spring Boot Web和Tomcat相关依赖(Spring Boot默认使用Tomcat作为嵌入式Web服务器):

1    <dependency>
2        <groupId>org.springframework.boot</groupId>
3        <artifactId>spring-boot-starter-web</artifactId>
4    </dependency>

如果使用其他嵌入式Web服务器,如Jetty或Undertow,需添加相应的依赖。

3. 配置application.yml文件

src/main/resources 目录下的 application.yml 文件中添加HTTPS相关配置:

1    server:
2      port: 443 # 设置HTTPS默认端口为443
3      ssl:
4        key-store: classpath:ssl/keystore.p12 # 指定密钥库文件路径,keystore.p12为将证书和私钥合并后的文件
5        key-store-password: your_password # 设置密钥库密码
6        key-store-type: PKCS12 # 指定密钥库类型,PKCS12是常用的格式
7        key-alias: your_alias # 指定密钥别名,需与证书和私钥中的别名一致

在上述配置中, key-store 指定了密钥库文件的路径, key-store-password 为密钥库的密码, key-store-type 指定了密钥库的类型, key-alias 为密钥的别名。如果你的证书和私钥是分开的文件,需要先将它们合并为一个PKCS12格式的密钥库文件。可以使用OpenSSL工具进行合并,命令如下:

1    openssl pkcs12 -export -in certificate.crt -inkey private.key -out keystore.p12 -name your_alias

执行上述命令时,会提示输入密码,该密码即为 key-store-password

4. 配置HTTP重定向到HTTPS(可选)

为了确保用户在访问HTTP地址时自动跳转到HTTPS地址,可以在Spring Boot应用中配置HTTP到HTTPS的重定向。创建一个配置类,例如 WebServerConfig.java

1    import org.apache.catalina.Context;
2    import org.apache.catalina.connector.Connector;
3    import org.apache.tomcat.util.descriptor.web.SecurityCollection;
4    import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
5    import org.springframework.beans.factory.annotation.Value;
6    import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
7    import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
8    import org.springframework.context.annotation.Bean;
9    import org.springframework.context.annotation.Configuration;
10
11  @Configuration
12  public class WebServerConfig {
13
14      @Value("${server.port}")
15      private int httpsPort;
16
17      @Bean
18      public ServletWebServerFactory servletContainer() {
19          TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
20              @Override
21              protected void postProcessContext(Context context) {
22                  SecurityConstraint constraint = new SecurityConstraint();
23                  constraint.setUserConstraint("CONFIDENTIAL");
24                  SecurityCollection collection = new SecurityCollection();
25                  collection.addPattern("/*");
26                  constraint.addCollection(collection);
27                  context.addConstraint(constraint);
28              }
29          };
30          tomcat.addAdditionalTomcatConnectors(httpConnector());
31          return tomcat;
32      }
33
34      @Bean
35      public Connector httpConnector() {
36          Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
37          connector.setScheme("http");
38          connector.setPort(80); // HTTP端口
39          connector.setSecure(false);
40          connector.setRedirectPort(httpsPort); // 重定向到HTTPS端口
41          return connector;
42      }
43  }

上述配置类创建了一个HTTP连接器,并将HTTP请求重定向到配置的HTTPS端口,实现了从HTTP到HTTPS的自动跳转。

四、测试与验证

完成上述配置后,启动Spring Boot应用。在浏览器中输入应用的HTTPS地址(如 https://example.com ),检查是否能够正常访问应用,并且浏览器地址栏会显示安全锁图标,表明连接是安全的。你还可以使用在线SSL证书检测工具,如SSL Labs( https://www.ssllabs.com/ssltest/ ),对应用的SSL证书配置进行全面检测,查看是否存在安全隐患和配置问题,并根据检测结果进行相应调整。

通过以上步骤,你已经成功在Spring Boot应用中启用了HTTPS,并完成了SSL证书的配置。这不仅提升了应用的数据传输安全性,也增强了用户对应用的信任。在实际应用中,还需定期检查证书有效期,及时进行证书更新,确保应用始终保持安全可靠的运行状态。


Dogssl.cn拥有20年网络安全服务经验,提供构涵盖国际CA机构SectigoDigicertGeoTrustGlobalSign,以及国内CA机构CFCA沃通vTrus上海CA等数十个SSL证书品牌。全程技术支持及免费部署服务,如您有SSL证书需求,欢迎联系!
相关文档
立即加入,让您的品牌更加安全可靠!
申请SSL证书
0.141947s