环境信息:JDK6_24,weblogic10.3
最近在weblogic10.3上发布应用,并集成cas单点登录后,登录时出现了问题,
具体表现为:
1.访问新应用
2.跳转到统一的login页面
3.登录后无法跳转至新应用页面
4.新应用后台日志不断输出如下内容
<Security> <BEA-090477> <Certificate chain received from testserver1.gmcc.net - 10.201.37.41 was not trusted causing SSL handshake failure.>
处理过程(该处理过程可以适用于检查与初始安装接入SSO的新应用):
1.检查新应用的cas配置
检查web.xml是否加入了cas的filter
2.检查证书是否成功导入JRE
使用命令:
keytool -list -v -alias testserver1 -storepass changeit -keystore ${JRE_HOME}/lib/security/cacerts
3.检查weblogic SSL配置
进入Home >Summary of Servers >AdminServer的General Tab,确保“SSL Listen Port Enabled”为勾选状态;
进入Keystores Tab,确保“Java Standard Trust Keystore” 为${JRE_HOME}/lib/security/cacerts(应该跟添加jvm参数“-Dweblogic.security.TrustKeyStore”的效果一样)
除了步骤3,其它项均无问题,执行步骤3后问题依旧。
于是打开SSL调试信息(启动脚本中添加jvm参数“-Dssl.debug=true -Dweblogic.StdoutDebugEnabled=true”)
启动后可以看见如下日志:
<Error> <WebLogicServer> <BEA-000297> <Inconsistent security configuration, java.security.cert.CertificateParsingException: PKIX: Unsupported OID in the AlgorithmIdentifier object: 1.2.840.113549.1.1.11>
<Emergency> <Security> <BEA-090034> <Not listening for SSL, java.io.IOException: PKIX: Unsupported OID in the AlgorithmIdentifier object: 1.2.840.113549.1.1.11.>
在登录过后跳转时,出现如下异常日志:
<Debug> <SecuritySSL> <BEA-000000> <SSLSetup: loading trusted CA certificates>
<Debug> <SecuritySSL> <BEA-000000> <Failure loading trusted CA list
java.security.cert.CertificateParsingException: PKIX: Unsupported OID in the AlgorithmIdentifier object: 1.2.840.113549.1.1.11
at com.certicom.security.cert.internal.x509.X509V3CertImpl.<init>(Unknown Source)
。。。省略。。。
<Debug> <SecuritySSL> <BEA-000000> <Certificate chain is untrusted>
<Debug> <SecuritySSL> <BEA-000000> <SSLTrustValidator returns: 16>
<Debug> <SecuritySSL> <BEA-000000> <Trust status (16): CERT_CHAIN_UNTRUSTED>
<Debug> <SecuritySSL> <BEA-000000> <NEW ALERT with Severity: FATAL, Type: 42
java.lang.Exception: New alert stack
。。。省略。。。
这说明weblogic不支持OID为1.2.840.113549.1.1.11的算法,即SHA256withRSA算法;
就是因为CA链中有SHA256withRSA算法的证书,因此导致认证失败。
这是JDK1.6.0_13的一个bug,出现在官方bug database上
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6832375
当时他们在JDK1.6.0_13上增加了几个证书
http://www.oracle.com/technetwork/java/javase/6u13-142696.html
因此,我们需要把使用SHA256withRSA算法的证书统统删掉,好在使用JDK1.6版本的keytools命令可以列出各个证书的算法。
我们列出所有的证书,把结果保存到文本文件里,然后通过查找工具,找出所有包含SHA256withRSA算法的证书别名。
有了别名,我们就可以使用如下命令逐个删除之:
keytool -delete -keystore ${JRE_HOME}/lib/security/cacerts -alias entrustrootcag2 -storepass changeit
keytool -delete -keystore ${JRE_HOME}/lib/security/cacerts -alias thawteprimaryrootcag3 -storepass changeit
keytool -delete -keystore ${JRE_HOME}/lib/security/cacerts -alias ttelesecglobalrootclass3ca -storepass changeit
keytool -delete -keystore ${JRE_HOME}/lib/security/cacerts -alias ttelesecglobalrootclass2ca -storepass changeit
keytool -delete -keystore ${JRE_HOME}/lib/security/cacerts -alias globalsignr3ca -storepass changeit
keytool -delete -keystore ${JRE_HOME}/lib/security/cacerts -alias secomscrootca2 -storepass changeit
keytool -delete -keystore ${JRE_HOME}/lib/security/cacerts -alias verisignuniversalrootca -storepass changeit
keytool -delete -keystore ${JRE_HOME}/lib/security/cacerts -alias keynectisrootca -storepass changeit
keytool -delete -keystore ${JRE_HOME}/lib/security/cacerts -alias geotrustprimarycag3 -storepass changeit
重启weblogic后,问题得到解决