我们有一个应用程序使用 JAX-RPC 客户端库并在 Java 的旧版本 (1.4.2) 上运行,并且收到以下 SSL 错误:
java.lang.NoClassDefFoundError
javax.crypto.Cipher.a(DashoA6275)
javax.crypto.Cipher.getInstance(DashoA6275)
com.sun.net.ssl.internal.ssl.SunJSSE_i.a(DashoA12275)
com.sun.net.ssl.internal.ssl.CipherBox$JCECipherBox.<init>(DashoA12275)
com.sun.net.ssl.internal.ssl.CipherRC4.a(DashoA12275)
com.sun.net.ssl.internal.ssl.SunJSSE_h.a(DashoA12275)
com.sun.net.ssl.internal.ssl.CipherSuite$BulkCipher.a(DashoA12275)
com.sun.net.ssl.internal.ssl.SunJSSE_ax.c(DashoA12275)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.f(DashoA12275)
com.sun.net.ssl.internal.ssl.SunJSSE_ax.a(DashoA12275)
com.sun.net.ssl.internal.ssl.SunJSSE_az.j(DashoA12275)
com.sun.net.ssl.internal.ssl.SunJSSE_az.a(DashoA12275)
com.sun.net.ssl.internal.ssl.SunJSSE_az.a(DashoA12275)
com.sun.net.ssl.internal.ssl.SunJSSE_ax.a(DashoA12275)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(DashoA12275)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.j(DashoA12275)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(DashoA12275)
sun.net.www.protocol.https.HttpsClient.afterConnect(DashoA12275)
sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(DashoA12275)
sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:569)
sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(DashoA12275)
com.sun.xml.rpc.client.http.HttpClientTransport.writeMessageToConnection(HttpClientTransport.java:278)
com.sun.xml.rpc.client.http.HttpClientTransport.invoke(HttpClientTransport.java:64)
com.sun.xml.rpc.client.StreamingSender._send(StreamingSender.java:69)
[ ... trace continues into internal application code ... ]
这以前对我们有用,客户端库的唯一更改是与使用的身份验证协议相关的更改,并且需要更新到最新版本的 BouncyCastle。这些变化都比 SSL 协议更高,而且这个错误似乎甚至不涉及 BouncyCastle。
有没有人见过这样的错误,也许有任何想法或建议?我尝试将证书添加到cacerts
. 如果在 Java 1.6 上运行,这可以正常工作,但不幸的是,运行它的生产系统暂时仍与 Java 1.4 相关联。
此外,如果我们在没有 SSL 的情况下连接到我们的开发系统,我们的 JAX-RPC 代码以及它所做的身份验证也可以正常工作。
[编辑 - 附加信息] 我现在可以看到,新版本的 BouncyCastle 发生了一些冲突,导致了这个问题。我尝试使用古老的(1.18)版本,但似乎没有收到 SSL 错误,而是从我们的应用程序中获取了一个错误,因为它需要更新的算法。