リクエストが認証に証明書を必要とするグラスフィッシュサーバーにいくつかの単純な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
。ここには追加できません