第 1 章 使用 TLS Registry 管理安全密钥和证书
TLS Registry 是一个 Quarkus 扩展,可集中 TLS 配置,从而更轻松地在应用程序间管理和维护安全连接。在单一集中位置定义 TLS 配置时,您可以使用 TLS Registry 从应用程序中的多个组件引用这些配置,以确保一致性并减少配置错误的可能性。
TLS Registry 整合设置并支持多个命名配置。因此,您可以为不同的应用程序部分定制 TLS 设置。当不同的组件需要不同的安全配置时,这个灵活性特别有用。
使用兼容扩展时,TLS Registry 扩展会自动包含在项目中,如 Quarkus REST、gRPC。因此,使用 TLS Registry 的应用程序可以准备好处理开箱即用的安全通信。
TLS Registry 还提供与各种密钥存储格式(如 PKCS12、PEM 和 JKS)自动重新载入和兼容性。
1.1. 使用 TLS registry
要配置 TLS 连接,包括密钥和信任存储,请使用 quarkus.tlssignal
属性。这些属性是必需的:
-
设置默认的 TLS 配置,直接在
quarkus.tlsllowedRegistries 下定义
-
使用
quarkus.tls.<name
> … 创建单独的、命名的配置。通过指定quarkus.tls.<name&
gt; regarding 属性,您可以调整特定组件的 TLS 设置。
1.1.1. 为 HTTP 服务器配置 HTTPS
为确保客户端-服务器通信,通常需要客户端验证服务器的真实性。
- 服务器必须使用密钥存储,其中包含其证书和私钥
- 客户端需要配置有信任存储以验证服务器证书
在 TLS 握手期间,服务器提供其证书,然后验证客户端。这可防止中间人攻击和安全数据传输。
以下小节介绍了如何使用 PEM 或 PKCS12 密钥类型设置 HTTPS。另外,它们提供了有关如何使用命名配置一次指定和管理多个 TLS 设置的信息,这样您可以为每个设置定义不同的设置。
根据密钥存储类型使用以下配置示例:
使用 PEM 文件:
quarkus.tls.key-store.pem.0.cert=server.crt quarkus.tls.key-store.pem.0.key=server.key quarkus.http.insecure-requests=disabled # Reject HTTP requests
使用
p12
(PKCS12)密钥存储:quarkus.tls.key-store.p12.path=server-keystore.p12 quarkus.tls.key-store.p12.password=secret quarkus.http.insecure-requests=disabled # Reject HTTP requests
使用名称区分多个配置:
quarkus.tls.https.key-store.p12.path=server-keystore.p12 quarkus.tls.https.key-store.p12.password=secret quarkus.http.insecure-requests=disabled quarkus.http.tls-configuration-name=https
1.1.2. 为客户端配置 HTTPS
以下示例将名为 "hello" 的 gRPC 客户端配置为使用带有默认 TLS 配置中的信任存储的 HTTPS:
quarkus.tls.trust-store.jks.path=grpc-client-truststore.jks quarkus.tls.trust-store.jks.password=password quarkus.grpc.clients.hello.plain-text=false quarkus.grpc.clients.hello.use-quarkus-grpc-client=true
1.1.3. 配置 mTLS
要在红帽构建的 Quarkus 应用程序中设置 mutual TLS (mTLS),请通过创建和管理密钥存储和信任存储来配置服务器和客户端:
- 服务器密钥存储 :包含服务器的证书和私钥。
- Client keystore :包含客户端的证书和私钥。
- 服务器 truststore :存储客户端的证书以验证客户端。
客户端信任存储 :存储服务器证书以验证服务器。
指定密钥存储和信任存储的示例配置:
quarkus.tls.my-server.key-store.p12.path=target/certs/grpc-keystore.p12 quarkus.tls.my-server.key-store.p12.password=password quarkus.tls.my-server.trust-store.p12.path=target/certs/grpc-server-truststore.p12 quarkus.tls.my-server.trust-store.p12.password=password quarkus.tls.my-client.trust-store.p12.path=target/certs/grpc-client-truststore.p12 quarkus.tls.my-client.trust-store.p12.password=password quarkus.tls.my-client.key-store.p12.path=target/certs/grpc-client-keystore.p12 quarkus.tls.my-client.key-store.p12.password=password quarkus.grpc.clients.hello.plain-text=false quarkus.grpc.clients.hello.tls-configuration-name=my-client quarkus.grpc.clients.hello.use-quarkus-grpc-client=true quarkus.http.ssl.client-auth=REQUIRED # Enable mTLS quarkus.http.insecure-requests=disabled quarkus.http.tls-configuration-name=my-server quarkus.grpc.server.use-separate-server=false quarkus.grpc.server.plain-text=false
此配置通过确保服务器和客户端验证彼此的证书启用 mTLS,从而提供额外的安全层。