- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们使用 Oracle jdk 1.7.0_71 和 Tomcat 7.0.55。不幸的是,我们在服务器之间的 SSL 连接期间开始出现以下异常:
javax.net.ssl.SSLHandshakeException: server certificate change is restrictedduring renegotiation
这是什么意思?如何预防?
Tomcat重启后异常消失。
完整堆栈:
Caused by: javax.net.ssl.SSLHandshakeException: server certificate change is restrictedduring renegotiation
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) ~[?:1.7.0_71]
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1884) ~[?:1.7.0_71]
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276) ~[?:1.7.0_71]
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:266) ~[?:1.7.0_71]
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1402) ~[?:1.7.0_71]
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:209) ~[?:1.7.0_71]
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:878) ~[?:1.7.0_71]
at sun.security.ssl.Handshaker.process_record(Handshaker.java:814) ~[?:1.7.0_71]
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016) ~[?:1.7.0_71]
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312) ~[?:1.7.0_71]
at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:702) ~[?:1.7.0_71]
at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:122) ~[?:1.7.0_71]
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82) ~[?:1.7.0_71]
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140) ~[?:1.7.0_71]
at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:506) ~[commons-httpclient-3.1.jar:?]
at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114) ~[commons-httpclient-3.1.jar:?]
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096) ~[commons-httpclient-3.1.jar:?]
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398) ~[commons-httpclient-3.1.jar:?]
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171) ~[commons-httpclient-3.1.jar:?]
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397) ~[commons-httpclient-3.1.jar:?]
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323) ~[commons-httpclient-3.1.jar:?]
at org.springframework.remoting.httpinvoker.CommonsHttpInvokerRequestExecutor.executePostMethod(CommonsHttpInvokerRequestExecutor.java:205) ~[spring-web-3.2.9.RELEASE.jar:3.2.9.RELEASE]
at org.springframework.remoting.httpinvoker.CommonsHttpInvokerRequestExecutor.doExecuteRequest(CommonsHttpInvokerRequestExecutor.java:140) ~[spring-web-3.2.9.RELEASE.jar:3.2.9.RELEASE]
at org.springframework.remoting.httpinvoker.AbstractHttpInvokerRequestExecutor.executeRequest(AbstractHttpInvokerRequestExecutor.java:136) ~[spring-web-3.2.9.RELEASE.jar:3.2.9.RELEASE]
at org.springframework.remoting.httpinvoker.HttpInvokerClientInterceptor.executeRequest(HttpInvokerClientInterceptor.java:192) ~[spring-web-3.2.9.RELEASE.jar:3.2.9.RELEASE]
at org.springframework.remoting.httpinvoker.HttpInvokerClientInterceptor.executeRequest(HttpInvokerClientInterceptor.java:174) ~[spring-web-3.2.9.RELEASE.jar:3.2.9.RELEASE]
at org.springframework.remoting.httpinvoker.HttpInvokerClientInterceptor.invoke(HttpInvokerClientInterceptor.java:142) ~[spring-web-3.2.9.RELEASE.jar:3.2.9.RELEASE]
... 160 more
最佳答案
客户端层代码中的此错误消息是最近 Java 更新中“SSL V3.0 Poodle 漏洞 - CVE-2014-3566”后代码强化的结果。这是一个错误 - 如果您无法立即更新 JRE,这里有一些解决方法:
第一个选项是在建立 HTTPS 连接时强制使用 TLS 协议(protocol):
如果您可以将 HttpClient 更新到比 4.3.6 更新的版本,则默认情况下将禁用 SSLv3,您的代码不应再报告此类异常。
如果您无法升级 HttpClient 版本,则必须使用此答案的代码将协议(protocol)限制为 TLS:https://stackoverflow.com/a/26439487/737790
对于来自 Java 7 运行时的其他 http 访问,必须设置以下系统属性
-Dhttps.protocols="TLSv1"
可在此处找到完整详细信息:Java http clients and POODLE
第二个选项是放宽客户端检查以仍然允许与以下属性重新协商:
-Djdk.tls.allowUnsafeServerCertChange=true
-Dsun.security.ssl.allowUnsafeRenegotiation=true
第三种选择是根据this post in Burp forum“改进”您的服务器证书,将集群成员的所有 IP 地址作为主题备用名称包括在内。
第四个选项是在添加此证书/重新协商检查之前降级您的 Java 版本,即在 7u41 之前(待确认)
更新 此错误行为现已在 JDK 更新 7u85 和 8u60 中修复。感谢 Pada 找到了 JDK-8072385引用。
关于tomcat - "javax.net.ssl.SSLHandshakeException: server certificate change is restrictedduring renegotiation"是什么意思,如何预防?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27105004/
我们使用 Oracle jdk 1.7.0_71 和 Tomcat 7.0.55。不幸的是,我们在服务器之间的 SSL 连接期间开始出现以下异常: javax.net.ssl.SSLHandshake
我是一名优秀的程序员,十分优秀!