Spring Security整合CAS实现单点登录
CAS Server是一套基于Java实现的服务,该服务以一个Java Web Application单独部署在与servlet2.3兼容的Web服务器上。另外,由于Client与CAS Server之间的交互采用Https 协议,因此部署CAS Server的服务器还需要支持SSL协议。当SSL配置成功过后,像普通Web应用一样将CAS Server部署在服务器上就能正常运行了,不过,在真正使用之前,还需要扩展验证用户的接口。在Tomcat上部署一个完整的CAS Server主要按照以下几个步骤。
一 配置Tomcat使用Https协议
如果希望Tomcat支持Https,主要的工作是配置SSL协议,其配置过程和配置方法可以参考Tomcat的相关文档。不过在生成证书的过程中,会有需要用到主机名的地方,CAS建议不要使用IP地址,而要使用机器名或域名。为了实现SSL,一个Web服务必须对每一个接受安全连接的外部接口或者IP地址有一个相关联的证书,数字证书的获取一般从像verisign或者Thawte这样的著名证书颁发机构(Certificate Authority CA)购买证书,或者如果身份验证并不很重要,比如管理员只是希望保证服务器发送和接收的数据是私有的并且不能被连接中的任何窃(和谐)听者探听到,则可以只是使用自签名的证书,从而省去获取CA证书的时间和成本。此处使用自签名证书作为客户端与服务器端安全通信的凭证。
1.使用Java Keytool工具为系统生成HTTPS证书,并为系统注册
用管理员身份运行cmd,输入以下命令:
keytool -delete -alias tomcat-cas-server -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit keytool -delete -alias tomcat-cas-server -storepass changeit
注释:清除系统中可能存在的名字为tomcat-cas-server的同名证书,“changeit”是jdk中证书的默认密码,如果系统中无tomcat-cas-server名称的证书,则弹出错误警告信息,不用理会。
keytool -list -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit
注释:列出系统证书仓库中存在证书名称列表。
keytool -genkey -validity 36000 -keyalg RSA -alias tomcat-cas-server -dname "cn=[HOST_NAME]" -storepass changeit
注释:如果不指定证书文件的文件名和存放地址,默认位置为%OS_DISK%\Documents and Settings\your user\,默认文件名.keystore,具体参数参见keytool命令。[-validity 36000]为证书有效期,指定使用RSA算法,生成别名为tomcat-cas-server的证书,存贮口令为changeit,也可以保存其他的口令,证书的DN为"cn= [HOST_NAME] ",这个DN必须同当前主机完整名称一致,切记。如:cn=MyComputer。
keytool -export -alias tomcat-cas-server -file "%JAVA_HOME%/jre/lib/security/server.crt" -storepass changeit
注释:从keystore中导出别名为tomcat-cas-server的证书,生成文件server.crt。
keytool -import -alias tomcat-cas-server -file "%JAVA_HOME%/jre/lib/security/server.crt" -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit
注释: 将server.crt导入jre的可信任证书仓库。注意,安装JDK是有两个jre目录,一个在jdk底下,一个是独立的jre,这里的目录必须同Tomcat使用的jre目录一致,否则后面Tomcat的HTTPS通讯就找不到证书。重点,保存该server.crt,CAS Client端部署的时候同样需要导入该证书。这样CAS Server和Cas Client才能通过“握手”验证。
keytool -list -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit > list.txt
注释:列出jre可信任证书仓库中证书名单,验证先前的导入是否成功,如果导入成功,应该在列表中能找到tomcat-cas-server这个别名,在%JAVA_HOME%\jre\lib\security目录下能找到“server.crt”这个文件,在%OS_DISK%:\Documents and Settings\[USER]目录下能找到“.keystore”文件。拷贝.keystore到%CATALINA_HOME%\conf下。
2.配置Tomcat的HTTPS服务
编辑%CATALINA_HOME%\conf下的server.xml文件,找到<!-- Define a SSL HTTP/1.1 Connector on port 8443 -->,修改如下:
<!-- Define a SSL HTTP/1.1 Connector on port 8443 This connector uses the JSSE configuration, when using APR, the connector should be using the OpenSSL style configuration described in the APR documentation --> <!-- <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" /> --> <Connector protocol="org.apache.coyote.http11.Http11Protocol" port="8443" minSpareThreads="5" maxSpareThreads="75" enableLookups="true" disableUploadTimeout="true" acceptCount="100" maxThreads="200" scheme="https" secure="true" SSLEnabled="true" keystoreFile="conf/.keystore" keystorePass="changeit" clientAuth="false" sslProtocol="TLS" />