技术分享 CAS单点登录 服务端配置 查看内容

cas入门之十九:https形式发布cas证书制作

老高 | 发布于 2017-05-05 14:01| 浏览()| 评论() | 收藏() | 点赞() | 打印

摘要: ​cas 默认是以https 协议发布的,我一直对这个问题避而不谈,因为这个涉及到ssl协议,不是那么容易搞的。

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盘
-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数据对称加密交互,不多说了,因为说不明白);

7.运行cas客户端的tomcat,然后访问:

http://cas.server.com:8070/client2/index.jsp (因为我是同一台机器,测试的应用名为client2)

就能跳转到cas服务端登录页面,输入用户名密码,然后再回来.


这样就完成了cas的https发布所需的证书制作.这篇文章本不在我的计划之列,但是有人问了我这个问题,我想怎么回答都不能圆满解决他的问题,所以就写了一个如何作的例子。

发表评论(对文章涉及的知识点还有疑问,可以在这里留言,老高看到后会及时回复的。)

表情