2

リクエストが認証に証明書を必要とするグラスフィッシュサーバーにいくつかの単純なWebサービスアプリケーションがあります。証明書がいくつかあります。私が使いたいものはidに依存します:これはglassfishで動作します:

MyCustomPortType service;
...
// set certifikate
setSSLSocketFactory(id, (BindingProvider) service);
// send request
final MyCustomType response = service.process(params);

今、このアプリケーションを weblogic にデプロイする必要がありますが、ここに問題があります。最初のIDでリクエストを渡し、他のリクエストは証明書が悪いためエラーを返します。Weblogicには、グラスフィッシュで欠落しているキャッシュがいくつかあり、リクエストにはSSLSocketFactoryが異なっていても同じ証明書が含まれていると思います

アップデート:

この記事を読みました: http://docs.oracle.com/cd/E13222_01/wls/docs92/secmanage/ssl.html#wp1194460しかし、アプリにこれを実装する方法がわかりません

更新 2:

  protected void setSSLSocketFactory(final String agenda, final BindingProvider service) {
    service.getRequestContext().put(JAXWSProperties.SSL_SOCKET_FACTORY,
        MutualSSLContext.getFactory(configuration, agenda));
  }

  public static final SSLSocketFactory getFactory(final RobaktConfiguration cfg, final String agenda) {

if (cfg == null || agenda == null) {
  return null;
}

  try {
    final File keyStore = cfg.getKeystorePath(agenda);
    final KeyManager[] keyManagers;
    if (keyStore != null) {
      keyManagers = new KeyManager[] {new MutualKeyManager(cfg, agenda)};
    } else {
      keyManagers = null;
    }
    final SSLContext sslContext = SSLContext.getInstance("SSL");
    sslContext.init(keyManagers, new TrustManager[] {new MutualTrustManager()}, null);
    final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();

    return sslSocketFactory;
  } catch (Exception e) {
    throw new MutualSSLException(e.getMessage(), e);
  }

}

クラスMutualKeyManagerはインターフェイスを実装しますX509ExtendedKeyManager。ここには追加できません

4

1 に答える 1

0

Ok。問題があると思います...どのバージョンの WLS を試していますか? WLS < 12.1.1 は、Certicom ベースの SSL 実装を使用します。Weblogic コンソールで設定を試みUse JSSEましたか ([セキュリティ] -> [詳細設定] のどこかにあります - ATM の周りに古いバージョンの WLS はありません)。

あなたはすでに JSSE に切り替えようとしたので、私が考えることができる最後のオプションは を使用することweblogic.security.SSL.SSLContextです。基本的に、現在行っているのと同じことを行います。

SSLContext context = weblogic.security.SSL.SSLContext.getInstance("TLS");
Certificate[] certs = ...; // load the certificates from your prop-files keystore
PrivateKey privKey = ...; // load the private key from your keystore
context.loadLocalIdentity(certs, key);

service.getRequestContext().put(JAXWSProperties.SSL_SOCKET_FACTORY, context.getSocketFactory());
于 2013-11-04T14:44:25.460 に答える