SSLException:收到致命警报:internal_error(在 tomcat 下抛出,但在桌面上运行良好)

SSLException: Received fatal alert: internal_error (thrown under tomcat, but works fine in desktop)

当我在桌面应用程序中应用该代码时:

 WebClient webClient = new WebClient();
 WebRequest wreq = new WebRequest( new URL (url), com.gargoylesoftware.htmlunit.HttpMethod.GET);
 HtmlPage p = (HtmlPage) webClient.getPage( wreq);

它工作正常,我得到一个答案:

[Raw read]: length = 5
0000: 16 03 03 00 5D                                     ....]
[Raw read]: length = 93

(然后进行握手)

但是当我尝试在 tomcat 的网络应用程序中使用完全相同的代码时,它显示错误:

[Raw read]: length = 5
0000: 15 03 03 00 02                                     .....
[Raw read]: length = 2
0000: 02 50                                              .P
tt_20170131_142449, READ: TLSv1.2 Alert, length = 2
tt_20170131_142449, RECV TLSv1.2 ALERT:  fatal, internal_error
tt_20170131_142449, called closeSocket()
tt_20170131_142449, handling exception: javax.net.ssl.SSLException: Received fatal alert: internal_error

TLS 版本相同。我尝试了一些通常在这种情况下建议的事情,比如 webClient.getOptions().setUseInsecureSSL( false) 等等,但是,正如我所说,这看起来不像是协议问题,因为完全相同的代码工作得很好而 运行 没有 tomcat。那么我应该去哪里挖掘才能找到解决方案呢?

还有不同长度的 MD5 和 SHA1 哈希:

[写入] MD5 和 SHA1 哈希:len = 161 <--- 导致异常

[写入] MD5 和 SHA1 哈希:len = 213 <--- 工作正常

通过将 httpclient-4.3.1.jar 替换为 4.3.3 版本解决。