私たちのアプリケーションでは、データベースに保存されている URL と信頼できる SSL 証明書に基づいて、いくつかの Web Servervices を呼び出す必要があります。これらの証明書は自己署名されていますが、WebLogic トラストストアに追加することはできません。これは双方向 SSL ですが、サーバーはリモート証明書を拒否します。
これを行う正しい方法は何ですか?
(質問の残りの部分では、既に試したことについて説明します。)
WebLogic 10g では、次のことを行っていました。
WlsSSLAdapter adapter = new WlsSSLAdapter();
try {
// setup for client certificate
adapter.setKeystore(…);
adapter.setClientCert(…);
// setup for accepting the remote certificate
adapter.setTrustManager(new TrustManager() {
@Override
public boolean certificateCallback(X509Certificate[] paramArrayOfX509Certificate, int paramInt) {
return paramArrayOfX509Certificate[0] == expectedCertificate;
}
});
} catch (Exception e) {
throw new RuntimeException(e);
}
((weblogic.wsee.jaxrpc.StubImpl) servicePort)._setProperty(weblogic.wsee.jaxrpc.WLStub.SSL_ADAPTER, adapter);
ただし、WebLogic 11g では、TrustManager
(デバッガーを使用して確認した) が呼び出されても、WebLogic は証明書を拒否するようです。
<validationCallback: validateErr = 16>
< cert[0] = Serial number: 9232073310112809071929676484517784211
Issuer:C=US, ST=MyState, L=MyTown, O=MyOrganization, OU=FOR TESTING ONLY, CN=mestoudi2
Subject:C=US, ST=MyState, L=MyTown, O=MyOrganization, OU=FOR TESTING ONLY, CN=mestoudi2
Not Valid Before:Tue Nov 01 14:33:31 CET 2011
Not Valid After:Sun Nov 02 14:33:31 CET 2031
Signature Algorithm:MD5withRSA
>
<weblogic user specified trustmanager validation status 16>
<Certificate chain received from mestoudi2 - 10.142.0.23 was not trusted causing SSL handshake failure.>
<Validation error = 16>
<Certificate chain is untrusted>
<SSLTrustValidator returns: 16>
<Trust status (16): CERT_CHAIN_UNTRUSTED>
<NEW ALERT with Severity: FATAL, Type: 42
java.lang.Exception: New alert stack
at com.certicom.tls.record.alert.Alert.<init>(Unknown Source)
at com.certicom.tls.record.handshake.HandshakeHandler.fireAlert(Unknown Source)
at com.certicom.tls.record.handshake.ClientStateReceivedServerHello.handle(Unknown Source)
…
最初の違いは、 weblogic ユーザーが trustmanager validation status 16 を指定した行で発生すると思います。ここで、WebLogic 10g では値が 16 ではなく 0 でした。
WebLogic 管理コンソールで [Use JSSE SSL] をオンにすると (実装がcom.sun.net.ssl
ではなく に切り替わりますcom.certicom.tls
)、TrustManager
はまったく呼び出されません。
また、次を使用してスタブに渡された a に設定した a をTrustManager
実装することにより、を構成しようとしました。javax.net.ssl.X509TrustManager
weblogic.wsee.connection.transport.https.HttpsTransportInfo
((weblogic.wsee.jaxrpc.StubImpl) servicePort)._setProperty(TRANSPORT_INFO, transportInfo);
ただし、どちらも呼び出されませんが、たとえばプロキシの設定には機能します。clientgen Ant タスク ( weblogic.wsee.tools.anttasks.ClientGenTask
) を使用してスタブを生成しています。