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