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

SOAP请求加密时出现Wrong key usage错误的求助

问题根源分析

核心错误java.security.InvalidKeyException: Wrong key usage是由于新证书的密钥用途(Key Usage)不满足SOAP加密操作的要求导致的:

对比新旧用户证书(证书链的第1个证书):

  • 旧证书的Key Usage包含keyEncipherment和dataEncipherment,同时Extended Key Usage包含clientAuth,完全符合客户端发起加密SOAP请求的密钥用途要求
  • 新证书的Key Usage仅包含keyEncipherment、digitalSignature、keyAgreement,缺少dataEncipherment字段,且Extended Key Usage为空,无法通过WSS4J 1.6.1的密钥用途校验

WSS4J 1.6.1在执行加密操作时,会严格校验证书的Key Usage是否匹配加密场景:

  • keyEncipherment用于加密对称密钥(对应你配置的rsa-1_5密钥传输算法)
  • dataEncipherment用于加密实际的SOAP消息体(对应你配置的aes128-cbc对称加密算法)
解决方案

方案一:重新生成符合要求的证书(推荐)

联系证书签发机构,重新生成满足以下要求的用户证书:

  • Key Usage必须包含:keyEncipherment + dataEncipherment
  • Extended Key Usage建议添加:clientAuth(明确标记证书用于客户端身份验证及加密操作)

方案二:临时关闭WSS4J的密钥用途校验(不推荐,降低安全级别)

针对你的Spring WS配置,修改密钥库(Crypto)的配置,关闭Key Usage校验:
如果你的keystore bean是org.springframework.ws.soap.security.wss4j.support.CryptoFactoryBean,添加以下属性:

<bean id="keystore" class="org.springframework.ws.soap.security.wss4j.support.CryptoFactoryBean">
    <!-- 原有配置:密钥库路径、密码等 -->
    <property name="checkKeyUsage" value="false"/>
</bean>

该配置会让WSS4J跳过证书Key Usage的校验,强制使用当前证书进行加密操作。

验证

修改后重新部署应用,发起SOAP请求,确认加密错误消失。

内容的提问来源于stack exchange,提问作者Uğur Yeşilyurt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 19:54:19