这与SSL / TLS重新协商问题有关。我们将Tomcat 7.0.47用作应用程序的Web服务器。
我尝试了多种方式来禁用重新协商,但未能成功。
我们在Server.xml文件中启用了SSL,如下所示:
<Connector SSLEnabled="true"
clientAuth="false"
compressableMimeType="text/html,text/plain,text/xml,text/css,text/javascript,image/png,image/gif,image/jpeg,application/json"
compression="on"
compressionMinSize="2048"
connectionTimeout="15000"
debug="0"
disableUploadTimeout="true"
enableLookups="false"
keyAlias="SomeAlias"
keystoreFile="C:\.keystore"
keystorePass="SomePassword"
maxHttpHeaderSize="20480"
maxSpareThreads="100"
maxThreads="400"
minSpareThreads="25"
port="8443"
protocol="HTTP/1.1"
allowUnsafeLegacyRenegotiation=false
scheme="https"
secure="true"
sslProtocol="TLS"
tomcatAuthentication="false"/>
在这里,我尝试设置选项allowUnsafeLegacyRenegotiation = false,但是服务器无法使用此设置启动。
最佳答案
不幸的是,Oracle当前的JSSE实现无法为您的问题提供任何解决方案。但是您可以按照JSSE Reference Guide table 7中的说明运行旧的Java(Java 6更新19/20/21),因为这些称为“阶段1修复”的版本可以完全消除重新协商支持。
考虑到旧的Java版本还有其他问题,您可能不想运行它们,因此最安全的做法是仅允许最新的重新协商(RFC 5746)。为此,如JSSE Reference Guide table 9中所述,将这两个系统属性设置为false:allowLegacyHelloMessages,allowUnsafeRenegotiation。
并删除不再有用的allowUnsafeLegacyRenegotiation连接器属性。
现在是解决问题的时候了,但是我正在做一些非常棘手的测试,需要花费大量时间。欢迎赏金。