SSL握手会有很多意想不到的Exception, 其中很多都是因为没有配置好cacerts导致的。
以Tomcat为例,你需要在conf/server.xml中指定你的keystore并且配置好KeyAlias,
同时,Tomcat会到JAVA_HOME/jre/lib/security目录下读取cacerts文件。
在Weblogic中,你也需要配置Trust.jks和Identity.jks(可以参考WebLoigc Security In Action)。
问题是,IE究竟根据什么来提交证书(包含私钥的证书)?
很简单,服务器提交他的证书到客户端,客户端会根据服务器的证书的DN,检索本地私钥,
选择那些由此DN签发证书X,然后确定使用X对应的本地私钥,用于SSL握手。
cacerts是JDK容器信任的证书列表,如果cacerts中没有包含客户端私钥对应的证书链中的
信任证书,则服务器会拒绝任何从客户端的SSL请求。
典型的Weblogic日志就是:
<Certificate chain received from 客户端- 192.168.10.10 was not trusted causing SSL handshake failure.>