您的位置:首页 > 编程语言 > Java开发

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

2007-12-29 13:39 561 查看
网上有很多资料介绍如何集成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文件复制到tomcat的conf目录(bzwang是windows的当前用户目录,tomcat是要配置cas server的tomcat),.keystore是和tomcat的server.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时都默认安装了JDK和JRE,例如我的机器上的jdk安装在C:/jdk1.5.0_05,JRE安装在C:/jre1.5.0_05,所以除了执行上面的import指令外,还需要执行下面的指令:

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

所以请大家一定要牢记,如果你的主机上有多个JRE的话,最好每个JRE路径下都用keytool –import指令导入一次,如果其他配置没问题的话,做完这步一定
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐