一.环境
软件:jdk1.7、 tomcat7、 cas-server-3.4.11、cas-client-3.2.1
系统环境:
编辑C:\Windows\System32\drivers\etc\host文件,添加如下内容:
demo.wh.com 127.0.0.1
app1.wh.com 127.0.0.1
二.证书配置
2.1.证书生成
keytool -genkey -alias ssodemo -keyalg RSA -keysize 1024 -keypass michaelpwd(密码) -validity 365 -keystore g:\sso\ssodemo.keystore(位置) -storepass michaelpwd(密码)
注意:
- 截图中需要输入的姓名和上面hosts文件中配置的一致;
- keypass 和 storepass 两个密码要一致,否则下面tomcat 配置https 访问失败;
2.2导出证书
keytool -export -alias ssodemo -keystore c:\sso\ssodemo.keystore(上一步的位置) -file c:\sso\ssodemo.crt -storepass michaelpwd(上一步的密码)
2.3客户端导出证书
keytool -import -keystore %JAVA_HOME%\jre\lib\security\cacerts -file c:\sso\ssodemo.crt -alias ssodemo(上面的名字)(输入的密码是changeit)
三.配置及验证
解压apache-tomcat-7.0.73,修改conf/server.xml文件
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" URIEncoding="UTF-8"/>
修改如下:
<Connector port="38443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
keystoreFile="c:/sso/sso.keystore" keystorePass="michaelpwd"(上面设定的密码)
clientAuth="false" sslProtocol="TLS" URIEncoding="UTF-8"/>
访问https://demo.wh.com:8443,能出现tomcat官网界面则表示成功。
四.配置cas-server
下载cas-server jar包,解压提取cas-server-3.4.11/modules/cas-server-webapp-3.4.11.war文件,把改文件copy到 tomcat安装目录的webapps 目下,并重命名为:cas.war.
启动tomcat,在浏览器地址栏输入: https://demo.wh.com:8443/cas/login ,回车,出现下图界面则表示成功:
五.部署CAS-Client相关的Tomcat
自定义一个项目如A,下载cas-client jar包,解压提取cas-client-3.2.1/modules/cas-client-core-3.2.1.jar到A项目的WEB-INF\lib文件下,修改WEB-INF\web.xml 如下:
<!-- ======================== 单点登录开始 ======================== -->
<!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置-->
<listener>
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
<!-- 该过滤器用于实现单点登出功能,可选配置。 -->
<filter>
<filter-name>CAS Single Sign Out Filter</filter-name>
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS Single Sign Out Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>CAS Filter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>https://demo.wh.com:8443/cas/login</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://app1.wh.com:18080</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 该过滤器负责对Ticket的校验工作,必须启用它 -->
<filter>
<filter-name>CAS Validation Filter</filter-name>
<filter-class>
org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value>https://demo.wh.com:8443/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://app1.wh.com:18080</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Validation Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--
该过滤器负责实现HttpServletRequest请求的包裹,
比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。
-->
<filter>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<filter-class>
org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--
该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。
比如AssertionHolder.getAssertion().getPrincipal().getName()。
-->
<filter>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- ======================== 单点登录结束 ======================== -->
修改conf/server.xml
<Server port="8005" shutdown="SHUTDOWN">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
修改端口号如下:
<Server port="18005" shutdown="SHUTDOWN">
<Connector port="18080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="18443" />
<Connector port="18009" protocol="AJP/1.3" redirectPort="18443" />
至此,cas-server端及cas-client端配置完成。
六.验证cas单点登录环境
启动tomcat-server及tomcat-client,当server未登录时,访问client端会自动跳转到cas登录界面;若登陆则可直接访问。
七.搭建中遇到的问题
1.导出证书时,输入keytool -import -keystore %JAVA_HOME%\jre\lib\security\cacerts -file c:\sso\ssodemo.crt -alias ssodemo,可能会出现以下两种问题:
我的java安装在C:\Program Files下,%JAVA_HOME%读取该路径,会提示Files\jre\lib\security\cacerts找不到,主要是不能识别空格造成的。
解决办法:重新安装java环境到不包含空格的文件路径下。提示找不到jre的路径,此问题可能是tomcat运行使用的jre是安装jdk时安装jre的目录,非jdk自带的jre,当然如果是安装在同一目录下除外。
解决办法:修改tomcat的jre的path即可。