我在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
。我不能在这里添加
答案 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());