Spring Boot 对SSL的支持

这篇具有很好参考价值的文章主要介绍了Spring Boot 对SSL的支持。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

https://docs.spring.io/spring-boot/docs/3.2.0/reference/htmlsingle/#features.ssl

Spring Boot 提供了配置 SSL 信任材料的能力,这些材料可以应用于多种类型的连接,以支持安全通信。可以使用以 spring.ssl.bundle 为前缀的配置属性来指定命名的信任材料集和相关信息。

使用 Java KeyStore 文件配置 SSL

可以使用以 spring.ssl.bundle.jks 为前缀的配置属性来配置使用 Java keytool 实用程序创建的信任材料包,并将这些包存储在 JKS 或 PKCS12 格式的 Java KeyStore 文件中。每个包都有一个用户提供的名称,可用于引用该包。

当用于保护嵌入式 Web 服务器时,通常会将keystore 配置为包含证书和私钥的 Java KeyStore,如下所示:

spring.ssl.bundle.jks.mybundle.key.alias=application
spring.ssl.bundle.jks.mybundle.keystore.location=classpath:application.p12
spring.ssl.bundle.jks.mybundle.keystore.password=secret
spring.ssl.bundle.jks.mybundle.keystore.type=PKCS12

当用于保护客户端连接时,通常会将truststore 配置为包含服务器证书的 Java KeyStore,如下所示:

spring.ssl.bundle.jks.mybundle.truststore.location=classpath:server.p12
spring.ssl.bundle.jks.mybundle.truststore.password=secret

使用 PEM 编码的证书配置 SSL

可以使用以 spring.ssl.bundle.pem 为前缀的配置属性来配置以 PEM 编码文本形式存在的信任材料包。每个包都有一个用户提供的名称,可用于引用该包。

当用于保护嵌入式 Web 服务器时,通常会将keystore 配置为包含证书和私钥,如下所示:

spring.ssl.bundle.pem.mybundle.keystore.certificate=classpath:application.crt
spring.ssl.bundle.pem.mybundle.keystore.private-key=classpath:application.key

当用于保护客户端连接时,通常会将truststore 配置为包含服务器证书,如下所示:

spring.ssl.bundle.pem.mybundle.truststore.certificate=classpath:server.crt

提示certificateprivate-key属性可以直接使用 PEM 内容。如果属性值包含 BEGINEND 标记,则它们将被视为 PEM 内容,而不是资源位置。

以下示例演示了如何定义信任库证书:

spring.ssl.bundle.pem.mybundle.truststore.certificate=\
-----BEGIN CERTIFICATE-----\n\
MIID1zCCAr+gAwIBAgIUNM5QQv8IzVQsgSmmdPQNaqyzWs4wDQYJKoZIhvcNAQEL\n\
BQAwezELMAkGA1UEBhMCWFgxEjAQBgNVBAgMCVN0YXRlTmFtZTERMA8GA1UEBwwI\n\
...\n\
V0IJjcmYjEZbTvpjFKznvaFiOUv+8L7jHQ1/Yf+9c3C8gSjdUfv88m17pqYXd+Ds\n\
HEmfmNNjht130UyjNCITmLVXyy5p35vWmdf95U3uEbJSnNVtXH8qRmN9oK9mUpDb\n\
ngX6JBJI7fw7tXoqWSLHNiBODM88fUlQSho8\n\
-----END CERTIFICATE-----\n

应用 SSL 包(Applying SSL Bundles)

一旦使用属性进行配置,就可以在由 Spring Boot 自动配置的各种类型连接的配置属性中通过名称引用 SSL 包。

使用 SSL 包(Using SSL Bundles)

Spring Boot 会自动配置一个 SslBundles 类型的 bean,该 bean 可提供对使用 spring.ssl.bundle 属性配置的每个命名包的访问。

可以从自动配置的 SslBundles bean 中检索 SslBundle,并使用它来创建用于在客户端库中配置 SSL 连接的对象。SslBundle 提供了一种分层的方法来获取这些 SSL 对象:

  • getStores() 可用于访问密钥库和信任库的 java.security.KeyStore 实例,以及任何所需的密钥库密码。
  • getManagers() 可用于访问 java.net.ssl.KeyManagerFactoryjava.net.ssl.TrustManagerFactory 实例,以及它们创建的java.net.ssl.KeyManagerjava.net.ssl.TrustManager 数组。
  • createSslContext() 提供了一种便捷的方式来获取新的 java.net.ssl.SSLContext 实例。

此外,SslBundle 还提供了有关正在使用的密钥、要使用的协议以及应应用于 SSL 引擎的任何选项的详细信息。

以下示例演示了如何检索 SslBundle 并使用它来创建 SSLContext

import javax.net.ssl.SSLContext;

import org.springframework.boot.ssl.SslBundle;
import org.springframework.boot.ssl.SslBundles;
import org.springframework.stereotype.Component;

@Component
public class MyComponent {

    public MyComponent(SslBundles sslBundles) {
        SslBundle sslBundle = sslBundles.getBundle("mybundle");
        SSLContext sslContext = sslBundle.createSslContext();
        // do something with the created sslContext
    }

}

重新加载 SSL 包(Reloading SSL bundles)

当密钥材料发生更改时,可以重新加载 SSL 包。使用包的组件必须与可重新加载的 SSL 包兼容。目前,以下组件与此兼容:

  • Tomcat Web 服务器
  • Netty Web 服务器

要启用重新加载,你需要通过以下示例中的配置属性进行选择:

spring.ssl.bundle.pem.mybundle.reload-on-update=true
spring.ssl.bundle.pem.mybundle.keystore.certificate=file:/some/directory/application.crt
spring.ssl.bundle.pem.mybundle.keystore.private-key=file:/some/directory/application.key

然后,文件监视器将监视这些文件,如果文件发生更改,将重新加载 SSL 包。这反过来会触发使用组件的重新加载,例如,Tomcat 将对启用 SSL 的连接器中的证书进行轮换。

你可以使用 spring.ssl.bundle.watch.file.quiet-period 属性来配置文件监视器的静默期(以确保没有更多更改)。文章来源地址https://www.toymoban.com/news/detail-832540.html

到了这里,关于Spring Boot 对SSL的支持的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot 接口支持高并发

    Spring Boot是一款非常流行的Java开发框架,它提供了很多便利的功能和工具,可以帮助开发人员快速构建高质量的应用程序。在实际开发中,我们经常需要处理大量的请求,这就需要系统能够支持高并发的接口。本文将介绍如何使用Spring Boot来支持高并发的接口,并提供具体的

    2024年02月14日
    浏览(34)
  • Spring Boot 如何配置 CORS 支持

    跨域资源共享(CORS)是一种重要的网络安全策略,用于限制浏览器在不同域之间的HTTP请求。Spring Boot提供了简单而强大的方法来配置CORS支持,以确保您的应用程序能够与其他域的资源进行安全交互。本文将介绍如何在Spring Boot中配置CORS支持,并附带相应的示例代码。 CORS是一

    2024年02月07日
    浏览(47)
  • [Kafka集群] 配置支持Brokers内部SSL认证\外部客户端支持SASL_SSL认证并集成spring-cloud-starter-bus-kafka

    目录 Kafka 集群配置 准备 配置流程 Jaas(Java Authentication and Authorization Service )文件 zookeeper 配置文件 SSL自签名 启动zookeeper集群 启动kafka集群  spring-cloud-starter-bus-kafka 集成 下载统一版本Kafka服务包至三台不同的服务器上 文章使用版本为  kafka_2.13-3.5.0.tgz 下载地址 jdk版本 为 Ado

    2024年02月04日
    浏览(53)
  • Spring Boot 对 Docker Compose 的支持

    https://docs.spring.io/spring-boot/docs/3.2.0/reference/htmlsingle/#features.docker-compose Docker Compose 是一种流行的技术,可用于定义和管理应用程序所需服务的多个容器。通常,在应用程序旁边创建一个 compose.yml 文件,该文件定义并配置服务容器。 使用Docker Compose的典型工作流程是运行 docke

    2024年02月21日
    浏览(32)
  • JDK1.8 支持的spring boot版本问题

    最近,官方的spring boot版本已经更新到了3.0.3,跨入3这个大版本了,但是发现如果JDK依然是1.8则项目不能启动会报如下的错误:  错误提示是java的版本,此时我们修改pom.xml文件,将spring boot的版本降低即可:如下:  

    2024年02月11日
    浏览(42)
  • spring boot es 支持中文精准查询的方法QueryBuilders.termQuery

    1,问题: 当我们使用QueryBuilders.termQuery方法对指定的字段进行精准查询时,如果查询的条件为英文字母时,是没有问题的 当查询条件为中文时,则可能会查询不出数据,如下:当algorithmTag为中文时,即使es中有对应的记录,也是查询不出来的 附:依赖的es版本: 2,解决方法

    2024年02月11日
    浏览(41)
  • Bee2.1.8支持Spring Boot 3.0.11,active命令行选择多环境,多表查改增删(bee-spring-boot发布,更新maven)

    天下大势,分久必合! Hibernate/MyBatis+ plus +Sharding JDBC + Jpa+ Spring data+ GraphQL+ App ORM (Android, 鸿蒙)= Bee Spring Cloud 微服务使用数据库更方便: Bee + Spring Boot; 轻松支持多数据源,Sharding, Mongodb. 要整合一堆的工具,还不如只用一个小巧又功能强大的工具。犹如 JAVA 界的数据源连接池

    2024年02月07日
    浏览(31)
  • Spring Boot 3.2发布:大量Java 21的支持上线,改进可观测性

    就在今天凌晨,Spring Boot 3.2正式发布了!该版本是在Java 21正式发布之后的重要支持版本,所以在该版本中包含大量对Java 21支持的优化。 下面,我们分别通过Spring官方发布的博文和Josh Long长达80+分钟的介绍视频,一起认识一下Spring Boot 3.2最新版本所带来的全新内容。 官方博文

    2024年02月05日
    浏览(61)
  • 快速解决Spring Boot跨域困扰:使用CORS实现无缝跨域支持

    什么是跨域? 跨域(Cross-Origin Issue)的存在是因为浏览器的安全限制,它防止恶意网站利用跨域请求来获取用户的敏感信息或执行恶意操作。浏览器通过实施同源策略来限制网页在不同源之间进行资源访问或交互的情况。当一个网页的协议、域名、或端口与当前页面的协议、

    2024年02月12日
    浏览(52)
  • spring-boot 实现接口转发服务,同时支持get 和 post等多种请求

    spring-boot 实现接口转发服务,同时支持get 和 post等多种请求 (1)新建类:ProxyController.java (2)代码说明: 这是一个 Java 类,名称为 ProxyController 。代码中包含以下方法: handleRequest(HttpServletRequest request) 这是一个公共方法,返回类型为 ResponseEntityString ,会抛出一些可能的异

    2024年02月09日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包