1.7. 重新载入证书
从 TLSConfigurationRegistry
获取的 TlsConfiguration
包含重新加载证书的机制。reload
方法刷新密钥存储、信任存储和 CRL,通常是从文件系统中重新加载它们。
reload 操作不是自动的,必须手动触发。此外,TlsConfiguration
实施必须支持重新加载,就像配置的证书的情况一样。
reload
方法返回一个 布尔值
,指示重新加载是否成功。值 true
表示 reload 操作成功,而不一定会更新证书。
在重新加载 TlsConfiguration
后,使用此配置的服务器和客户端可能需要执行特定的操作来应用新证书。
通知客户端和服务器有关证书重新加载的建议方法是触发 CDI 事件,类型为 io.quarkus.tls.CertificateUpdatedEvent
。为此,请注入此类型的 CDI 事件,并在重新加载发生时触发它。
-
手动触发重新载入并触发
CertificateUpdatedEvent
:
// in the class that performs the reload @Inject Event<CertificateUpdatedEvent> event; @Inject TlsConfigurationRegistry registry; public void reload() { TlsConfiguration config = registry.get("name").orElseThrow(); if (config.reload()) { event.fire(new CertificateUpdatedEvent("name", config)); } } // In the server (or client) code private final io.vertx.core.http.HttpServer server; public void onCertificateUpdate(@Observes CertificateUpdatedEvent reload) { if ("name".equals(event.getName())) { server.updateSSLOptions(reload.tlsConfiguration().getSSLOptions()); // Or update the SSLContext. } }
1.7.1. 定期重新载入
TLS 注册表包含一个内置机制,用于定期检查文件系统的更改和重新加载证书。reload-period
属性指定重新载入证书的时间间隔,并在每次重新载入证书时发出 CertificateUpdatedEvent
的时间间隔。
配置定期证书重新载入:
quarkus.tls.reload-period=1h quarkus.tls.key-store.pem.0.cert=tls.crt quarkus.tls.key-store.pem.0.key=tls.key
对于每个命名的配置,您可以设置特定的重新加载周期:
quarkus.tls.http.reload-period=30m quarkus.tls.http.key-store.pem.0.cert=tls.crt quarkus.tls.http.key-store.pem.0.key=tls.key
受影响的服务器和客户端可能需要侦听 CertificateUpdatedEvent
以应用新证书。这会自动为 Quarkus HTTP 服务器完成,如 Quarkus REST 服务器、gRPC 服务器和 WebSocket 服务器,以及管理界面(如果已启用)。
在 Quarkus dev 模式中,当文件 touched 时,它将更频繁地触发 CertificateUpdatedEvent
。