cas 默认是以https 协议发布的,我一直对这个问题避而不谈,因为这个涉及到ssl协议,不是那么容易搞的。我在公司应用cas也是以http协议发布的,因为这个集成公司内网应用,没有必要弄一个证书,花钱出力不讨好。但是即然提到这个https,那么从学习的角度来看,我们也应当学习一下。下面以oracle jdk 1.7为例应用keytool自己制作一个
https证书(下面以单认证的方式进行认证,即只需要cas服务器提供证书)。
1.因为oracle jdk不支持以ip建立证书,所以只能虚拟一个域名cas.server.com
这个配置在C:\Windows\System32\drivers\etc\hosts中
192.168.0.104 cas.server.com
2.进行cmd窗口(开始-运行,输入cmd回车)
输入如下命令:
keytool -genkeypair -keyalg RSA -keysize 2048 -sigalg SHA1withRSA -validity 36500 -alias cas.server.com -keystore d:/tomcat.keystore -dname "CN=cas.server.com,OU=cas,O=cas,L=shanghai,ST=shanghai,C=CN"
各参数含义:
-genkeypair 生成密钥
-keyalg 指定密钥算法,这时指定RSA,
-keysize 指定密钥长度,默认是1024位,这里指定2048,长一点,我让你破解不了(哈哈...),
-siglag 指定数字签名算法,这里指定为SHA1withRSA算法
-validity 指定证书有效期,这里指定36500天,也就是100年,我想我的应用用不到那么长时间
-alias 指定别名,这里是cas.server.com
-keystore 指定密钥库存储位置,这里存在d盘
输入上述命令,下面密码我们输入 123456,然后一直回车,就在d盘生成了tomcat.keystore文件;
3.导出数字证书
在cmd下输入如下命令:
keytool -exportcert -alias cas.server.com -keystore d:/tomcat.keystore -file d:/tomcat.cer -rfc
导出数字证书,即根据刚才生成的tomcat.keystore文件生成一个tomcat.cer文件,在生成的过程中输入的密码也是123456
4.配置cas服务器tomcat
将tomcat中server.xml中的连接器配置改为:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="tomcat.keystore"
keystorePass="123456"/>
同时将生成的tomcat.keystore复制到tomcat的主目录下,即与conf目录在同一个目录下;
5.下面所有操作都是针对cas客户端的(如果能够在另外一台电脑上操作那就更清晰了,我只能在本机了;如果是另外一台电脑,请选将d:/tomcat.cert拷贝一份到那台机器并且也放在d盘)
配置应用端web.xml
主要配置:
<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>
<listener>
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
<filter>
<filter-name>CAS Authentication Filter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>https://cas.server.com:8443/cas/login</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>cas.server.com:8070</param-value>
</init-param>
</filter>
<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://cas.server.com:8443/cas/</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>cas.server.com:8070</param-value>
</init-param>
<init-param>
<param-name>redirectAfterValidation</param-name>
<param-value>false</param-value>
</init-param>
</filter>
<filter>
<filter-name>CAS HttpServletRequest WrapperFilter</filter-name>
<filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
</filter>
<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 Authentication Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Validation Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS HttpServletRequest WrapperFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
即将应用发布在另一个tomcat下,端口为8070
6.将服务端的证书tomcat.cer导入到客户端java的cacerts证书库中
cmd到 C:\Program Files\Java\jdk1.7.0_51\jre\lib\security因为我的
JAVA_HOME=C:\Program Files\Java\jdk1.7.0_51
运行如下命令:
keytool -import -alias cacerts -keystore cacerts -file d:/tomcat.cer -trustcacerts
这样就完成了cas的https发布所需的证书制作.这篇文章本不在我的计划之列,但是有人问了我这个问题,我想怎么回答都不能圆满解决他的问题,所以就写了一个如何作的例子。
https证书(下面以单认证的方式进行认证,即只需要cas服务器提供证书)。
1.因为oracle jdk不支持以ip建立证书,所以只能虚拟一个域名cas.server.com
这个配置在C:\Windows\System32\drivers\etc\hosts中
192.168.0.104 cas.server.com
2.进行cmd窗口(开始-运行,输入cmd回车)
输入如下命令:
keytool -genkeypair -keyalg RSA -keysize 2048 -sigalg SHA1withRSA -validity 36500 -alias cas.server.com -keystore d:/tomcat.keystore -dname "CN=cas.server.com,OU=cas,O=cas,L=shanghai,ST=shanghai,C=CN"
各参数含义:
-genkeypair 生成密钥
-keyalg 指定密钥算法,这时指定RSA,
-keysize 指定密钥长度,默认是1024位,这里指定2048,长一点,我让你破解不了(哈哈...),
-siglag 指定数字签名算法,这里指定为SHA1withRSA算法
-validity 指定证书有效期,这里指定36500天,也就是100年,我想我的应用用不到那么长时间
-alias 指定别名,这里是cas.server.com
-keystore 指定密钥库存储位置,这里存在d盘
-dname 指定用户信息,不用一个一个回答它的问题了;
输入上述命令,下面密码我们输入 123456,然后一直回车,就在d盘生成了tomcat.keystore文件;
3.导出数字证书
在cmd下输入如下命令:
keytool -exportcert -alias cas.server.com -keystore d:/tomcat.keystore -file d:/tomcat.cer -rfc
导出数字证书,即根据刚才生成的tomcat.keystore文件生成一个tomcat.cer文件,在生成的过程中输入的密码也是123456
4.配置cas服务器tomcat
将tomcat中server.xml中的连接器配置改为:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="tomcat.keystore"
keystorePass="123456"/>
同时将生成的tomcat.keystore复制到tomcat的主目录下,即与conf目录在同一个目录下;
启动tomcat,然后访问https://cas.server.com:8443/cas 可以访问的只是有警告,因为浏览器没有进行证书认证。
我们可以将生成的tomcat.cer导入到浏览器中,不导入也可以;如果要导入的,各个浏览器不导也步骤大体相似,以IE浏览器为例:
点击 工具->Internet选项->内容->证书->受信任的根证书颁发机构->导入->下一步->浏览->选择d:/tomcat.cer->下一步,一路确认下去,直到证书导入成功。
如果导入在受信任的根证书颁发机构 中可以找到名字为cas.server.com的证书.
至此cas服务器商配置完毕.
-------------------------------------------------------------------------------------------------------------------------------------------------5.下面所有操作都是针对cas客户端的(如果能够在另外一台电脑上操作那就更清晰了,我只能在本机了;如果是另外一台电脑,请选将d:/tomcat.cert拷贝一份到那台机器并且也放在d盘)
配置应用端web.xml
主要配置:
<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>
<listener>
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
<filter>
<filter-name>CAS Authentication Filter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>https://cas.server.com:8443/cas/login</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>cas.server.com:8070</param-value>
</init-param>
</filter>
<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://cas.server.com:8443/cas/</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>cas.server.com:8070</param-value>
</init-param>
<init-param>
<param-name>redirectAfterValidation</param-name>
<param-value>false</param-value>
</init-param>
</filter>
<filter>
<filter-name>CAS HttpServletRequest WrapperFilter</filter-name>
<filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
</filter>
<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 Authentication Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Validation Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS HttpServletRequest WrapperFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
即将应用发布在另一个tomcat下,端口为8070
6.将服务端的证书tomcat.cer导入到客户端java的cacerts证书库中
cmd到 C:\Program Files\Java\jdk1.7.0_51\jre\lib\security因为我的
JAVA_HOME=C:\Program Files\Java\jdk1.7.0_51
运行如下命令:
keytool -import -alias cacerts -keystore cacerts -file d:/tomcat.cer -trustcacerts
输入cacerts证书库的密码 changeit,这个是它的默认密码; 这一步最主要的,一般情况下,没有把它说明白,其实这一步就是让cas客户端服务器去理解cas.server.com这台机器所发过来的经过加密的数据(这个涉及到https数据对称加密交互,不多说了,因为说不明白);
http://cas.server.com:8070/client2/index.jsp (因为我是同一台机器,测试的应用名为client2)
就能跳转到cas服务端登录页面,输入用户名密码,然后再回来.
这样就完成了cas的https发布所需的证书制作.这篇文章本不在我的计划之列,但是有人问了我这个问题,我想怎么回答都不能圆满解决他的问题,所以就写了一个如何作的例子。