1

在我们的应用程序中,我们需要根据存储在数据库中的 URL 和受信任的 SSL 证书调用多个 Web 服务器。这些证书是自签名的,但我们无法将它们添加到 WebLogic 信任库中。这是 2-way 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 用户指定的信任管理器验证状态 16行上,其中在 WebLogic 10g 中该值是 0 而不是 16。

如果我们在 WebLogic 管理控制台中选中“使用 JSSE SSL”(将实现切换到com.sun.net.ssl而不是com.certicom.tls),则TrustManager根本不会调用 。

我们还尝试TrustManager通过实现javax.net.ssl.X509TrustManager我们在weblogic.wsee.connection.transport.https.HttpsTransportInfo传递给存根的 a 上设置的 a 来配置

((weblogic.wsee.jaxrpc.StubImpl) servicePort)._setProperty(TRANSPORT_INFO, transportInfo);

但它也没有被调用——但它适用于例如设置代理。我们正在使用 clientgen Ant 任务 ( weblogic.wsee.tools.anttasks.ClientGenTask) 生成存根。

4

0 回答 0