下午技术总监告诉我:喂,我帮你把cas服务器添加了个ssl证书,现在登录不了了,你看看什么问题。
既然有了需求,那我们只能卖力的看问题了。
ps:可能是昨天加班太晚,今天整个人都是懵逼的
1.添加tomcat对https的支持
修改conf/server.xml
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="443" protocol="HTTP/1.1"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
keystoreFile="/usr/tomcat/ssl/server.jks" keystorePass="yourpass"
clientAuth="false" sslProtocol="TLS" />
配置说明:keystoreFile 秘钥仓库地址 keystorePass 密码 clientAuth 客户端是否需要证书认证
2.由于cas客户端向服务端请求认证ST票据 通过httpClient 这样就存在问题 一直出现错误
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1904)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:279)
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1904)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:279)
证书认证不通过
查找原因 是在httpClient请求https jre需要包含服务端证书信息
3.导入服务端证书到jre中
首先导出证书 :从jks中导出证书
查看jks中证书内容
keytool -list -v -keystore server.jks
类似于
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
Alias name: 1
Keystore provider: SUN
Your keystore contains 1 entry
Alias name: 1
发现包含一个证书 Alias name 为1
导出该证书 命令为:
keytool -export -alias 1 -keystore server.jks -rfc -file server.cer
* -rfc 表示以base64编码输出 否则以二进制
然后复制server.cer文件到客户端服务器
命令:keytool -import -keystore "/usr/java/jdk7/jre/lib/security/cacerts" -storepass changeit -keypass changeit -alias 1 -file server.cer
-keystore 后面接jre秘钥仓库目录 -storepass jre秘钥仓库密码 默认 changeit -keypass 一样默认changeit -alias 上面查看到的Alias name -file 导出的证书文件.cer
同理 服务端单点登出请求的时候 一样需要添加客户端证书
到此证书导入完成 问题解决