Cas单点登录配置SSL时遇到的javax.net.ssl.SSLPeerUnverifiedException问题的解决方法

迷途d书童 发布于 2012/03/09 12:20
阅读 5K+
收藏 0

 

网上有很多资料介绍如何集成CAS单点登录产品。由于集成CAS需要预先在tomcat中配置SSL,而且还要在客户端导入证书,但是许多人按照网上介绍的操作操作却发现以下问题:尽管配置了SSL后可以访问https://localhost:8443,也能登录https://localhost:8443/cas/login,但是在地址栏输入自己的Web应用的连接,自动跳到Cas登录页面,登录成功后并没有跳回到受保护页面,而是报下面的异常:

<javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated>

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated

        at com.sun.net.ssl.internal.ssl.SSLSessionImpl.getPeerCertificateChain

这是什么原因呢?

首先简单回顾一下网上介绍的操作步骤:

首先是生成server端的证书

keytool -genkey -alias tomcat -keyalg RSA (说明,提示姓名的时候输入localhost而不是你的名字)

keytool -export -file server.crt -alias tomcat

C:/Documents and Settings/bzwang/.keystore文件复制到tomcatconf目录(bzwangwindows的当前用户目录,tomcat是要配置cas servertomcat,.keystore是和tomcatserver.xml在同一目录下。

然后server.xml中增加以下配置:

<Connector  port="8443" maxHttpHeaderSize="8192" 

 maxThreads="150" minSpareThreads="25" maxSpareThreads="75"  enableLookups="false" disableUploadTimeout="true"     acceptCount="100" scheme="https" secure="true" 

   clientAuth="false" sslProtocol="TLS"      keystoreFile="conf/.keystore"     keystorePass="changeit"/>  

 

这是CAS 所在的tomcat的配置方式,server端环境配置完成。然后在客户端JVM导入证书,由于现在server端和client端都在一台机器上,所以需要注意,实际环境中cas和客户端应用是在不同机器上,导入证书是在部署了web应用的那台机器上执行的。网上介绍客户端导入证书的命令是:

keytool -import -keystore %JAVA_HOME%/jre/lib/security/cacerts -file server.crt -alias tomcat

客户端应用的web.xml中如何配置CAS过滤器我就不讲了,这里重点要说的是为什么用keytool –import 语句导入证书却仍然出现javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated之类的异常,问题是因为你机器上实际的JRE环境不是在JAVA_HOME里的那个JRE,一般大家安装JDK时都默认安装了JDKJRE,例如我的机器上的jdk安装在C:/jdk 1.5.0 _05JRE安装在C:/jre1.5.0_05,所以除了执行上面的import指令外,还需要执行下面的指令:

 

 keytool -import -keystore C:/jre 1.5.0 _05/lib/security/cacerts -file server.crt -alias tomcat

所以请大家一定要牢记,如果你的主机上有多个 JRE 的话,最好每个 JRE 路径下都用 keytool –import 指令导入一次,如果其他配置没问题的话,做完这步一定 
原文链接:http://blog.csdn.net/baozhengw/article/details/2002870
加载中
返回顶部
顶部