没有信任库的 WSS4J SOAP 签名验证
WSS4J SOAP Signature validation without truststore
我需要验证签名的 SOAP 消息,提取证书并根据 LDAP 目录验证证书,这使得信任存储变得不必要。我已经使用 WSS4J 一段时间了,但始终使用本地信任库。查看官方文档并四处搜索,我找不到任何与我类似的场景的参考。我想知道在那种情况下是否可以继续使用 WSS4J。
是的,您可以将 WSS4J 用于此用例。 WSS4J 默认使用 SignatureTrustValidator 来验证对签名证书的信任:
您可以通过以下方式插入您自己的实现:
如果您将 CXF 与 WSS4J 结合使用,则可以设置一个自定义配置常量,该常量指向签名的验证器实现。
我遇到了同样的问题,并以这种方式解决了:
@EnableWs
@Configuration
public class WsConfiguration extends WsConfigurerAdapter {
@Bean
public Wss4jSecurityInterceptor securityInterceptor() throws Exception {
Wss4jSecurityInterceptor securityInterceptor = new Wss4jSecurityInterceptor();
securityInterceptor.setValidationActions("Signature");
WSSConfig wssConfig = WSSConfig.getNewInstance();
wssConfig.setValidator(new QName("http://www.w3.org/2000/09/xmldsig#", "Signature"), MySignatureTrustValidator.class);
securityInterceptor.setWssConfig(wssConfig);
//the rest of configuration
}
请注意,MySignatureTrustValidator 必须实施 Validator
我需要验证签名的 SOAP 消息,提取证书并根据 LDAP 目录验证证书,这使得信任存储变得不必要。我已经使用 WSS4J 一段时间了,但始终使用本地信任库。查看官方文档并四处搜索,我找不到任何与我类似的场景的参考。我想知道在那种情况下是否可以继续使用 WSS4J。
是的,您可以将 WSS4J 用于此用例。 WSS4J 默认使用 SignatureTrustValidator 来验证对签名证书的信任:
您可以通过以下方式插入您自己的实现:
如果您将 CXF 与 WSS4J 结合使用,则可以设置一个自定义配置常量,该常量指向签名的验证器实现。
我遇到了同样的问题,并以这种方式解决了:
@EnableWs
@Configuration
public class WsConfiguration extends WsConfigurerAdapter {
@Bean
public Wss4jSecurityInterceptor securityInterceptor() throws Exception {
Wss4jSecurityInterceptor securityInterceptor = new Wss4jSecurityInterceptor();
securityInterceptor.setValidationActions("Signature");
WSSConfig wssConfig = WSSConfig.getNewInstance();
wssConfig.setValidator(new QName("http://www.w3.org/2000/09/xmldsig#", "Signature"), MySignatureTrustValidator.class);
securityInterceptor.setWssConfig(wssConfig);
//the rest of configuration
}
请注意,MySignatureTrustValidator 必须实施 Validator