在weblogic服务器上部署的jax-ws Web服务中未正确加载证书

时间:2013-11-01 12:43:33

标签: glassfish weblogic jax-ws

我在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但我不知道如何在我的应用中实现这个

UPDATE2:

  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。我不能在这里添加

1 个答案:

答案 0 :(得分:0)

<击>确定。我想我看到了问题... 你在尝试什么版本的WLS? WLS&lt; 12.1.1使用基于Certicom的SSL实现。您是否尝试在Weblogic控制台中设置Use JSSE(它位于安全性的某个位置 - &gt;高级 - 我没有在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());