2

我在 glassfish 服务器中有一些简单的 Web 服务应用程序,其中请求需要证书才能授权。有几个证书。我想使用取决于 id:这适用于 glassfish:

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

现在我需要在 weblogic 上部署这个应用程序,这就是问题所在。现在只需传递带有第一个 ID 的请求和其他请求返回错误,因为它们的证书不正确。我认为在 weblogic 中有一些缓存在 glassfish 中丢失并且请求仍然包含相同的证书,即使 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

好的。我想我看到了问题......你在尝试什么版本的 WLS?WLS < 12.1.1 使用基于 Certicom 的 SSL 实现。您是否尝试过Use JSSE在 Weblogic 控制台中进行设置(它位于安全性 -> 高级中的某个位置 - 我在 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 回答