You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WildFly Elytron集成Azure Key Vault报错:找不到'DKS'类型适配提供程序

WildFly Elytron 集成 Azure Key Vault JCA 获取 SSL 证书

问题背景

在WildFly 15中尝试通过Elytron子系统直接从Azure Key Vault获取SSL证书,Tomcat环境中使用DKS类型+AzureKeyVault提供程序的配置可正常工作,但Elytron配置始终报错。

已完成操作

  • 将azure-security-keyvault-jca-2.7.1.jar部署到WildFly模块modules/com/azure/security/keyvault/jca/main/,并配置module.xml。
  • 在standalone.conf.bat中添加JVM参数:-Dazure.keyvault.uri=https://my-keyvault.vault.azure.net/ -Dazure.keyvault.managed-identity=true。
  • 修改java.security添加security.provider.14=com.azure.security.keyvault.jca.KeyVaultJcaProvider。
  • 配置Elytron提供程序聚合及密钥库、密钥管理器,但启动时报错。

报错信息

ERROR [org.wildfly.security.key-store.azure-keyvault-keystore] ... No suitable provider found for type 'DKS'

已尝试的解决方法

  • 更换密钥库类型(JKS、PKCS12、AzureKeyVault)。
  • 确认AzureKeyVault provider-loader配置正确,JAR及模块加载正常。
  • 尝试移除/保留credential-reference配置。

可行配置方案

1. 修正模块依赖配置

确保modules/com/azure/security/keyvault/jca/main/module.xml包含必要依赖:

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.3" name="com.azure.security.keyvault.jca">
    <resources>
        <resource-root path="azure-security-keyvault-jca-2.7.1.jar"/>
        <!-- 若WildFly未自带Azure依赖,需添加azure-core、azure-identity等JAR -->
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.security.auth.message.api"/>
        <module name="org.jboss.logging"/>
    </dependencies>
</module>

2. 调整Elytron提供程序配置

无需将AzureKeyVault加入聚合提供程序列表,只需确保provider-loader加载正确,并设置聚合提供程序为默认:

<providers>
    <aggregate-providers name="combined-providers">
        <providers name="elytron"/>
        <providers name="openssl"/>
    </aggregate-providers>
    <provider-loader name="elytron" module="org.wildfly.security.elytron"/>
    <provider-loader name="openssl" module="org.wildfly.openssl"/>
    <provider-loader name="AzureKeyVault" module="com.azure.security.keyvault.jca"/>
    <default-providers providers="combined-providers"/>
</providers>

3. 正确配置密钥库与SSL上下文

使用AzureKeyVault作为密钥库类型,而非DKS,并指定对应的提供程序:

<tls>
    <key-stores>
        <key-store name="azure-keyvault-keystore">
            <credential-reference clear-text=""/>
            <implementation type="AzureKeyVault" provider-name="AzureKeyVault"/>
            <!-- 可选:指定要使用的证书别名 -->
            <attributes>
                <attribute name="keyAlias" value="mycert"/>
            </attributes>
        </key-store>
    </key-stores>
    <key-managers>
        <key-manager name="azure-keyvault-key-manager" key-store="azure-keyvault-keystore">
            <credential-reference clear-text=""/>
        </key-manager>
    </key-managers>
    <server-ssl-contexts>
        <server-ssl-context name="https-context" key-manager="azure-keyvault-key-manager" protocol="TLSv1.3"/>
    </server-ssl-contexts>
</tls>

4. 移除全局JCA提供程序配置

删除java.security中添加的security.provider.14配置,避免与Elytron的provider-loader冲突。


问题解答

  1. 无需本地密钥库即可集成:按照上述配置,Elytron可直接通过Azure Key Vault JCA提供程序获取证书,无需本地密钥库文件。
  2. 有效类型与提供程序组合:使用type="AzureKeyVault" + provider-name="AzureKeyVault"是适配Azure JCA提供程序的正确组合,Tomcat中使用的DKS类型并非Azure提供程序的原生支持类型,Elytron对类型校验更严格。
  3. 完整配置示例:上述配置即为Elytron集成Azure Key Vault JCA的完整可运行示例。

内容的提问来源于stack exchange,提问作者sdanzig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 12:41:01