Java 7u9
标题中的错误信息是:"致命错误:80:问题展开网络记录".所以不会让我把"问题"放在标题中.
我正在构建针对Netty的Java HTTPS客户端.SSL握手正常工作,直到我添加"HTTPS"端点识别算法以启用服务器主机名验证:
SSLEngine engine = tcpHelper.getSSLContext().createSSLEngine();
SSLParameters sslParameters = engine.getSSLParameters();
sslParameters.setEndpointIdentificationAlgorithm("HTTPS");
engine.setSSLParameters(sslParameters);
engine.setUseClientMode(true);
Run Code Online (Sandbox Code Playgroud)
添加算法后,SSL握手挂起,连接最终超时.启用SSL调试(javax.net.debug = all)后,我可以看到在ServerHello之后,服务器发送它的证书链后,握手现在失败了
*** ServerHelloDone
1761586552@qtp-1653588482-2, WRITE: TLSv1.2 Handshake, length = 3294
Run Code Online (Sandbox Code Playgroud)
在服务器上.客户端接收并显示证书链,然后失败:
New I/O worker #3, fatal error: 80: problem unwrapping net record
java.lang.RuntimeException: Delegated task threw Exception/Error
%% Invalidated: [Session-1, TLS_DHE_DSS_WITH_AES_128_CBC_SHA256]
New I/O worker #3, SEND TLSv1.2 ALERT: fatal, description = internal_error
New I/O worker #3, WRITE: TLSv1.2 Alert, length = 2
Run Code Online (Sandbox Code Playgroud)
Java 7u9
首先,感谢布鲁诺对这个相关问题的帮助,这个问题引导我做出最终答案.
回答我自己的问题.难得的知识.
解决方案是在创建SSL引擎时将请求目标的主机和端口添加到构造函数:
SSLEngine engine = tcpHelper.getSSLContext().createSSLEngine(targetHost, targetPort);
Run Code Online (Sandbox Code Playgroud)
如果没有这个,Java将最终在SSL库(IPAddressUtil.textToNumericFormatV4)深处抛出NullPointerException方式,这会在SSL调试输出中产生非常有用的错误消息.
归档时间: |
|
查看次数: |
5479 次 |
最近记录: |