1

WSS4JSecurityInterceptor を介して Spring 統合 + Spring WS Security を使用しています。

次のセキュリティ シナリオでは、サーバー上で Web サービスを使用する WS クライアントがあります。

  • Https プリエンプティブ認証 (ユーザーとパスワード)
  • サーバー側から署名する .cert ファイルが提供されますが、.jks (キーストア ファイル) に変換する方法がわかりません。

これら 2 つの要件があるため、クライアント/サーバー構成に関する Spring ドキュメントで提供されている例と少し混乱しています。サーバー側の構成を変更できません。私が持っているのは、ユーザー、パスワード、および .cert ファイルです。

次の Java 構成がありますが、それが私の詳細なシナリオを解決するかどうかはわかりません。

@Bean
public Wss4jSecurityInterceptor wss4jSecurityInterceptor() throws IOException, Exception{
    Wss4jSecurityInterceptor interceptor = new Wss4jSecurityInterceptor();
    interceptor.setSecurementActions("UsernameToken Encrypt");
    interceptor.setSecurementUsername("https user");
    interceptor.setSecurementPassword("https password");
    interceptor.setValidationActions("Signature");
    interceptor.setValidationSignatureCrypto( NEED TO BE DEFINED );
    return interceptor;
}
4

1 に答える 1

2

このシナリオの解決策:

  1. まず、.cer ファイルを独自のキーストアにインポートします。

    keytool -importcert -v -trustcacerts -file "path\to\file.cer" -alias myAlias -keystore "myNewKeyStore.jks" -storepass myPass

  2. ファイルをクラスパスの下に置きます

  3. Maven を使用している場合は、.jks ファイルを含めるように構成し、この種のリソースにはフィルターを適用しません。これは、コンパイル時に証明書を維持するために重要です。

  4. この構成を WS シナリオに適合させます。

    @Bean
    public Wss4jSecurityInterceptor wss4jSecurityInterceptor() throws Exception{
    
      Wss4jSecurityInterceptor interceptor = new Wss4jSecurityInterceptor();
      interceptor.setSecurementActions("UsernameToken");
      interceptor.setSecurementUsername("user http");
      interceptor.setSecurementPassword("pass http");
      interceptor.setValidationActions("Signature");
      interceptor.setValidationSignatureCrypto( myCrypto() );
      interceptor.afterPropertiesSet();
      return interceptor;
    }
    
    
    @Bean
    public Crypto myCrypto() throws Exception{
        CryptoFactoryBean factory = new CryptoFactoryBean();
        factory.setTrustStorePassword( "myPass" );
        factory.setKeyStorePassword( "myPass" );
        factory.setKeyStoreLocation( new ClassPathResource("myNewKeyStore.jks") );
        factory.afterPropertiesSet();
        return factory.getObject();
    }
    
于 2014-12-23T10:53:15.007 に答える