在 Windows Server 2008 上,Tomcat 7.0.37 和 JRE 7 update 21 使用以下 server.xml 文件条目进行客户端身份验证运行良好:
<Connector port="8443" crlFile="conf/mvca.crl" truststoreType="JKS" truststorePass="changeit" truststoreFile="c:/program files/java/jre7/lib/security/cacerts" keystorePass="maxview" keystoreFile="conf/mvkey.ks" sslProtocol="TLS" clientAuth="true" secure="true" scheme="https" maxThreads="150" SSLEnabled="true" protocol="HTTP/1.1"/>
升级到 JRE 7 update 40 后,我无法再打开 https:/mymachine.mydomain.com:8443 上的 tomcat 主页
使用 JRE 7 update 40 和 Tomcat 7.0.42 时我看到同样的错误。
没有HTTP错误代码。显示的错误信息为:Internet Explorer无法显示网页
Tomcat7 服务启动。
如果关闭客户端身份验证,主页将会运行。
我在 Tomcat 日志中没有看到任何相关的错误消息。
我可以采取哪些步骤来进一步阐明该问题并确定根本原因?
答案1
我想知道这是否与更新 40 RSA 密钥中的某些加密更改有关 <1024 已被禁用。
摘自发行说明:
http://www.oracle.com/technetwork/java/javase/7u40-relnotes-2004172.html#newft
默认 x.509 证书具有更长的密钥长度 从 7u40 开始,使用长度小于 1024 位的 RSA 密钥的 x.509 证书受到限制。此限制通过 Java 安全属性 jdk.certpath.disabledAlgorithms 应用。jdk.certpath.disabledAlgorithms 的默认值现在如下:
jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024 为了避免兼容性问题,建议使用 RSA 密钥小于 1024 位的 X.509 证书的用户使用更强的密钥更新其证书。作为一种解决方法,用户可以通过安全属性 jdk.certpath.disabledAlgorithms 调整密钥大小以允许更小的密钥大小,但风险自负。
节目之间的快速差异$JAVA_HOME/jre/lib/security/java.security
:
$ diff java.security /opt/jdk1.7.0_21/jre/lib/security/java.security
149,152c149,150
< com.sun.org.apache.xml.internal.security.,\
< com.sun.org.glassfish.,\
< org.jcp.xml.dsig.internal.,\
< oracle.jrockit.jfr.
---
> com.sun.org.glassfish.
>
186,189c184,185
< com.sun.org.apache.xml.internal.security.,\
< com.sun.org.glassfish.,\
< org.jcp.xml.dsig.internal.,\
< oracle.jrockit.jfr.
---
> com.sun.org.glassfish.
>
402c398
< jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024
---
> jdk.certpath.disabledAlgorithms=MD2
jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024
奇怪的是没有日志表明出了什么问题。