Keycloak中KC_HTTPS_TRUST_STORE_FILE弃用后,mTLS配置该如何处理?
解决方案
1. 创建仅包含私有CA的专属信任库
生成一个只存放你的私有CA证书的PKCS12或JKS信任库,确保不混入任何公共CA(如GlobalSign、Let'sEncrypt):
# PKCS12格式示例(推荐) keytool -importcert -file private-ca.crt -keystore mtls-client-truststore.p12 -storetype PKCS12 -alias private-ca -storepass your-secure-password
2. 配置Keycloak Server的mTLS信任锚
用Quarkus原生配置替代已弃用的KC_HTTPS_TRUST_STORE_FILE,指定仅用于mTLS客户端认证的信任库,同时禁用系统信任库合并:
# 启动参数示例 ./kc.sh start \ --https-enabled=true \ --http-ssl-client-auth=required \ --quarkus.ssl.trust-store-file=mtls-client-truststore.p12 \ --quarkus.ssl.trust-store-password=your-secure-password \ --quarkus.ssl.trust-store-type=PKCS12 \ --quarkus.ssl.trust-store-use-system-certificates=false
--quarkus.ssl.trust-store-use-system-certificates=false:确保只使用你指定的私有CA信任库,不加载OS/JRE的公共CA,既避免握手时发送所有公共CA,也能拒绝GlobalSign/Let'sEncrypt的客户端证书。--http-ssl-client-auth=required:强制要求客户端证书认证,可根据实际需求改为requested。
3. 保证出站请求不信任私有CA颁发的服务器证书
Keycloak的出站HTTP客户端(如调用外部身份提供者、API)默认使用OS/JRE的系统信任库,无需额外配置。只要你的私有CA未导入到OS/JRE信任库中,出站请求就会自动拒绝由该CA颁发的服务器证书。
验证配置有效性
用openssl s_client确认mTLS握手时的可接受CA列表:
openssl s_client -connect your-keycloak-domain:443 -tls1_3
在输出中查看「Acceptable client certificate CA names」,确认仅包含你的私有CA,无公共CA条目。
内容的提问来源于stack exchange,提问作者LHMathies
相关产品推荐
相关产品推荐

