Я получил проверку подписи для работы с моим приложением Spring Boot с Spring WS и WSS4J. В соответствии с рекомендациями, мы хотим ограничить (на принимающей стороне), какие алгоритмы подписи мы разрешаем. По умолчанию WSS4J разрешает любой алгоритм.
Мне нужно настроить следующие компоненты:
@Bean
public CryptoFactoryBean getCryptoFactoryBean() throws IOException {
CryptoFactoryBean cryptoFactoryBean = new CryptoFactoryBean();
cryptoFactoryBean.setKeyStorePassword(new String(keystorePassword));
cryptoFactoryBean.setKeyStoreLocation(new ClassPathResource(keystoreLocation));
// These properties don't seem to do anything to enforce the algoritm :s
Properties props = new Properties();
props.put(WSHandlerConstants.SIG_ALGO, "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256");
props.put(WSHandlerConstants.SIG_DIGEST_ALGO, "http://www.w3.org/2001/04/xmlenc#sha256");
cryptoFactoryBean.setConfiguration(props);
return cryptoFactoryBean;
}
И перехватчик:
@Bean
public Wss4jSecurityInterceptor securityInterceptor() throws Exception {
Wss4jSecurityInterceptor securityInterceptor = new Wss4jSecurityInterceptor();
securityInterceptor.setValidationActions("Signature");
securityInterceptor.setValidationSignatureCrypto(getCryptoFactoryBean().getObject());
return securityInterceptor;
}
Что я делаю не так? Я хочу разрешить только указанный алгоритм, и проверка подписи должна завершиться неудачей на любом другом (например, sha1).
Я мог бы написать пользовательскую проверку, но я ожидал, что фреймворк сможет это проверить.