plantegg 发表于 2017-2-20 09:18:06

resin下配置cas server

resin下配置cas server

环境:
cas server:
Linux Resin-2.1.17 Jdk1.6

cas client:
Linux Resin-3.1.9 Jdk1.6

cas server选择Resin-2.1.17是因为Resin3的Professional版本才支持SSL,Professional需要license

步骤:
1. 搭建cas server(Resin Webserver)
因为cas需要使用ssl协议,所以要保证resin Webserver支持SSL,那么第一步应该是安装openssl或直接使用sun的jsse。
当然首选openssl,安装openssl一切顺利,但是按照resin-2.1.17的文档,编译失败,所以只能使用jsse

a. 生成证书仓库
为维护方便,我在Resin主目录下建立keys目录,用于存放证忆仓库文件(否则默认情况下将生成到user's home directory/.keystroe)
resin-2.1.17>keytool -genkey -keyalg RSA -alias my_cas -keystore keys/server.keystore
keytool工具会提示输入密码(我写的是123456,呵呵),还要提供一系列信息,这里面最重要的是CN,一定要填cas server的域名(我写的是cas.app.xxx.com),不要填IP。

b. 生成证书仓库后,就可以配置Resin Webserver的SSL了,
Resin的resin.conf中打开SSL相关的配置项
<http port='8443'>
<ssl>true</ssl>
<key-store-type>jks</key-store-type>
<key-store-file>keys/server.keystore</key-store-file>
<key-store-password>123456</key-store-password>
</http>

c. 完成上述两步,就可以启Resin Webserver了
http://cas.app.xxx.com:8080/测试Resin是否启动
http://cas.app.xxx.com:8443/测试SSL是否配置成功

d. 下载cas server
http://www.yale.edu/tp/cas/cas-server-2.0.12.zip
解压,并lib/cas.war拷贝到Resin Webserver的webapps下,重启Resin后,会自动部署
至此,cas server搭建完成

2. 搭建cas client(Resin Webserver)
a. 回到cas server服务器,导出分发给cas client端的证书
resin-2.1.17>keytool -export -alias my_cas -keystore keys/server.keystore -file ./my_cas.cert
将my_cas.cert拷贝到cas client服务器(我放到了/root/下)

b. 在cas client服务器上,将my_cas.cert导入到Jdk的证书仓库里
通常我们的Jdk安装在/usr/local/jdk下,其证书仓库文件是/usr/local/jdk/jre/lib/security/cacerts,
keytool -import -alias my_cas -keystore /usr/local/jdk/jre/lib/security/cacerts -file /root/my_cas.cert
这时是要往Jdk的证书仓库中导入新证书,肯定要输入该证书仓库的密码(貌似这个密码是changeit)

可以验证是否导入成功,通过以下命令
keytool -list -keystore /usr/local/jdk/jre/lib/security/cacerts

c. 部署client server的Resin环境
随便创建一个Resin web项目(我的在webapps/myweb),新建WEB-INF、WEB-INF/lib目录,
在WEB-INF下创建web.xml文件,
<web-app xmlns="http://caucho.com/ns/resin" xmlns:resin="http://caucho.com/ns/resin/core">
       <filter>
                <filter-name>CASFilter</filter-name>
                <filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
                <init-param>
                <param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
                <param-value>https://cas.app.xxx.com:8443/cas/login</param-value>
                </init-param>
                <init-param>
                <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
                <param-value>https://cas.app.xxx.com:8443/cas/proxyValidate</param-value>
                </init-param>
                <init-param>
                <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
                <param-value>192.168.1.23:8080</param-value>
                </init-param>
      </filter>
      <filter-mapping>
                <filter-name>CASFilter</filter-name>
                <url-pattern>/servlet/*</url-pattern>
      </filter-mapping>
</web-app>
d. 下载cas client
http://www.yale.edu/tp/cas/cas-client-2.0.11.zip
解压,cas-client-2.0.11/java/lib/casclient.jar拷贝到Resin Webserver的webapps/myweb/WEB-INF/lib/下,重启Resin
至此,cas client搭建完成

3. 测试
http://192.168.1.23:8080/myweb/servlet/helloworld,
浏览器会被重定向到https://cas.app.xxx.com:8443/cas/login,要求输入用户名/密码,
输入admin/admin,提交,浏览器又会被重定向回http://192.168.1.23:8080/myweb/servlet/helloworld?ticket=ST-x-xxxxxxxx,注意这时url串后会有一个票据了。
如果配置成功,会出现熟悉的helloworld;
否则会报出异常,我曾得到了两个不同种类的异常
javax.servlet.ServletException: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present
这个貌似是因为CN没有配成域名,我一开始配的是个IP地址

javax.servlet.ServletException: 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
这个貌似是因为配成域名后,证书仓库没有及时更新导致

参考资料:
http://sumongh.iteye.com/blog/98527
http://linliangyi2007.iteye.com/blog/165307
感谢前人的耕耘!
页: [1]
查看完整版本: resin下配置cas server