2

私のアプリケーションは、 Weblogic 10.3にデプロイされたApache の HttpClient 3.1を使用して、 SSL相互認証を使用してPOSTを実行しています。キーストアトラストストアを構成するために、次のシステム プロパティを使用してこれを機能させることができます。

-Djavax.net.ssl.keyStore=C:\Keystore\KEYSTORE.jks
-Djavax.net.ssl.keyStorePassword=changeit
-Djavax.net.ssl.trustStore=C:\Truststore\TRUSTSTORE.jks
-Djavax.net.ssl.trustStorePassword=changeit

HttpClientにWeblogicカスタムキーストアトラストストアの設定を認識させて使用させる方法はありますか(コンソール / config.xml で構成)。とりわけ、これにより、パスワードを「非表示」に保ち、構成ファイル/コンソールなどでプレーンテキストとして表示されないようにする機能が提供されます.

誰でも私を啓発できますか?

4

2 に答える 2

2

カスタムTrustStrategyを実装することで、HttpClientでSSL接続にカスタムweblogicトラストストア証明書を使用できるようになりました。

import sun.security.provider.certpath.X509CertPath;
import weblogic.security.pk.CertPathValidatorParameters;
import java.security.InvalidAlgorithmParameterException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertPath;
import java.security.cert.CertPathParameters;
import java.security.cert.CertPathValidator;
import java.security.cert.CertPathValidatorException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Arrays;

public class WeblogicSSLTrustStrategy implements TrustStrategy {

  @Override
  public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
    validator = CertPathValidator.getInstance("WLSCertPathValidator");
    CertPath certPath = new X509CertPath(Arrays.asList(chain));

    // supply here the weblogic realm name, configured in weblogic console
    // "myrealm" is the default one
    CertPathParameters params = new CertPathValidatorParameters("myrealm", null, null);
    try {
      validator.validate(certPath, params);
    } catch (CertPathValidatorException e) {
      throw new CertificateException(e);
    } catch (InvalidAlgorithmParameterException e) {
      throw new CertificateException(e);
    }

    return true;
  }
} 

このコードは、 Weblogicのドキュメントに基づいています。ストラテジーは、SSLSocketFactoryを介してHttpClientに渡すことができます。

SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("http", 80, PlainSocketFactory.getSocketFactory()));

SSLSocketFactory sslSocketFactory = new SSLSocketFactory(new WeblogicSSLTrustStrategy());
schemeRegistry.register(new Scheme("https", 443, sslSocketFactory));

PoolingClientConnectionManager connectionManager = new PoolingClientConnectionManager(schemeRegistry);

DefaultHttpClient httpClient = new DefaultHttpClient(connectionManager);

唯一の不明なパラメータはWeblogicRealm名です。これは、Weblogic JMX APIから取得することも、単に事前設定することもできます。このように、トラストストアをインスタンス化したり、Weblogicの起動パラメータを再構成したりする必要はありません。

于 2013-03-08T10:56:30.227 に答える
0

これらの値は、 KeyStoreMBeanを使用して JMX 経由で取得できる場合があります。ただし、次の理由により、これは簡単な演習ではない可能性があることに注意してください。

  • これには、キーストアのパスワードを JMX クライアントに平文で保存する必要があります (アプリケーションでパスワードを作成することになります)。これは安全ではなく、監査の目的によっては、これが原因でセキュリティ監査が失敗する可能性があります。
  • JMX サービスの構成が原因で、実行時に MBean にアクセスできない場合や、さまざまなシナリオで別の方法でアクセスする必要がある場合があります。WebLogic 11g を想定すると、JMXMBean の EditMBeanServerEnabled 属性の値を false に設定することで、値を読み取り専用にすることができます。
于 2011-06-05T09:51:42.593 に答える