没有truststore

时间:2017-11-21 17:59:55

标签: soap wss4j wsse

我需要验证签名的SOAP消息,提取证书并根据LDAP目录验证证书,这使得信任存储不再必要。我现在已经使用WSS4J了一段时间,但总是使用本地信任存储。看看官方文档和谷歌搜索,我找不到任何类似于我的方案的参考。我想知道在这种情况下是否可以继续使用WSS4J。

2 个答案:

答案 0 :(得分:0)

是的,您可以将WSS4J用于此用例。默认情况下,WSS4J使用SignatureTrustValidator来验证对签名证书的信任:

https://github.com/apache/wss4j/blob/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/validate/SignatureTrustValidator.java

您可以通过以下方式插入自己的实现:

https://github.com/apache/wss4j/blob/cc5cb1cf7d0c6fcb1f1695ba63863231d4f8e613/ws-security-common/src/main/java/org/apache/wss4j/common/ConfigurationConstants.java#L863

如果您将CXF与WSS4J一起使用,则可以设置一个自定义配置常量,指向Signatures的Validator实现。

答案 1 :(得分:0)

我遇到了同样的问题,并以这种方式解决了这个问题:

@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