以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 Java/Eclipse 』  (http://bbs.xml.org.cn/list.asp?boardid=41)
----  一个yale-cas实现单点登录的简单例子实现  (http://bbs.xml.org.cn/dispbbs.asp?boardid=41&rootid=&id=26447)


--  作者:菜籽
--  发布时间:1/14/2006 9:54:00 PM

--  一个yale-cas实现单点登录的简单例子实现
Yale CAS (Central Authentication Service,中央认证服务)是耶鲁大学的一个开源项目。它为耶鲁大学的网络应用提供了一种标准的用户认证服务,从而实现了SSO的功能。
Yale CAS被设计成为一个独立的网络应用程序,它使用JavaS ervlet技术实现,可以作为用户身份认证模块加入到网络应用中。
他的实现的小例子,网上有很多版本,可是总是配置不成功,现在总结一下自己的配置过程。希望对各位网友有所帮助。
Tomcat5.5.9
Jdk 1.5.0.1
按照如下的配置成功:
1首先我打开tomcat5.5的SSL
修改Tomcat配置文件server.xml,去掉对于SSL的注释,即开放8443端口,注意这里需要在connector字段中加入keystorePass="password"参数,password即为上面几步中涉及到的密码
2.生成安全证书
%java_home%\bin\keytool -genkey -alias tomcat -keyalg RSA
密码是:changeit
姓名是:localhost
其他随便写的
之后是
%java_home%\bin\keytool -export -alias tomcat -file server.crt

%java_home%\bin\keytool -import -file server.crt -keystore %java_home%/jre/lib/security/cacerts

3.将CAS server3.0.2中target目录中的CAS.war复制到%tomcat_home%\webapps目录下.
4.将cas-client-java-2.1.1\dist\casclient.jar文件复制到%tomcat_home%\common\lib中
5.修改tomcat自带的servlet-examples的web.xml, 加入cas的过滤器:
<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://localhost:8443/cas/login</param-value>
    </init-param>
    <init-param>
        <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
        <param-value>https://localhost:8443/cas/proxyValidate</param-value>
    </init-param>
    <init-param>
        <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
        <param-value>localhost:8080</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>CASFilter</filter-name>
    <url-pattern>/servlet/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

6.启动tomcat !,CAS.war文件被自动在webapps下释放出CAS目录
进入https://localhost:8443/servlets-examples, 被自动转发到CAS的登陆页面.

说明:
这篇实现原理并没有全部完成


在安装和配置CAS时, 我遇到了一个很尴尬的问题, 大家在用的时候要小心
我是按照下面这篇文章中提到的配置步骤进行配置的
http://www-128.ibm.com/developerworks/web/library/wa-singlesign/
注意:文章中直接给出了需要在web.xml中加入CAS filter的代码
大家注意这段;

edu.yale.its.tp.cas.client.filter.serverName
localhost

中的值是localhost, 这是绝对不行的!一定要加上端口号:如localhost:8443,否则当你在CAS登陆界面中输入完用户名和密码后,将无法redirect回你想要的app,你只能看到"无法显示该页"的错误页面!!

还有就是制作一个自签名的credential了, 在生成keystore文件的时候密码是:changeit(这是tomcat默认的),你的名字一定要是:localhost,当然这是你需要把CAS client和CAS server放在同一台机器上进行测试用的.


--  作者:菜籽
--  发布时间:2/10/2006 6:38:00 PM

--  
一个yale-cas实现单点登录的简单例子实现
发现上面的写点有点问题,修改一下
Tomcat5.5.9
Jdk 1.5.0.1
按照如下的配置成功:
1首先我打开tomcat5.5的SSL
修改Tomcat配置文件server.xml,去掉对于SSL的注释,即开放8443端口
(注意:不用添加任何东西)
2.生成安全证书
首先在命令行中切换到 %java_home%\jre\lib\security目录
%java_home%\bin\keytool -genkey -alias tomcat -keyalg RSA
密码是:changeit
姓名是:localhost
其他随便写的
之后是
%java_home%\bin\keytool -export -alias tomcat -file server.crt

%java_home%\bin\keytool -import -file server.crt -keystore %java_home%/jre/lib/security/cacerts
3.将CAS server3.0.2中target目录中的CAS.war复制到%tomcat_home%\webapps目录下.
(或者\cas-server-2.0.12\lib目录中的CAS.war也可以)
4.将cas-client-java-2.1.1\dist\casclient.jar文件复制到%tomcat_home%\webapps\servlets-examples\WEB-INF\lib中(没有lib文件夹,自己建一个)
5.修改tomcat自带的servlet-examples的web.xml, 加入cas的过滤器:
<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://localhost:8443/cas/login</param-value>
    </init-param>
    <init-param>
        <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
        <param-value>https://localhost:8443/cas/proxyValidate</param-value>
    </init-param>
    <init-param>
        <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
        <param-value>localhost:8080</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CASFilter</filter-name>
    <url-pattern>/servlet/*</url-pattern>
</filter-mapping>
6.启动tomcat !,CAS.war文件被自动在webapps下释放出CAS目录
进入https://localhost:8080/servlets-examples, 被自动转发到CAS的登陆页面.
输入相同的用户名和密码,之后跳转回原来页面
注意:
在制作一个自签名的credential了, 在生成keystore文件的时候密码是:changeit(这是tomcat默认的),你的名字一定要是:localhost,当然这是你需要把CAS client和CAS server放在同一台机器上进行测试用的.

[此贴子已经被作者于2006-2-10 23:59:29编辑过]

--  作者:菜籽
--  发布时间:2/12/2006 9:31:00 PM

--  
上面的步骤在用
tomcat 5.0.30
jdk1.4.2
版本下测试通过
步骤完全一样,谢谢大家支持。
上面步骤中 https://localhost:8080/servlets-examples ,有错误,改正为
http://localhost:8080/servlets-examples,

一个yale-cas实现单点登录的简单例子实现
发现上面的写点有点问题,修改一下
Tomcat5.5.9
Jdk 1.5.0.1
按照如下的配置成功:
1首先我打开tomcat5.5的SSL
修改Tomcat配置文件server.xml,去掉对于SSL的注释,即开放8443端口
(注意:不用添加任何东西)
2.生成安全证书
首先在命令行中切换到 %java_home%\jre\lib\security目录
%java_home%\bin\keytool -genkey -alias tomcat -keyalg RSA
密码是:changeit
姓名是:localhost
其他随便写的
之后是
%java_home%\bin\keytool -export -alias tomcat -file server.crt

%java_home%\bin\keytool -import -file server.crt -keystore %java_home%/jre/lib/security/cacerts
3.将CAS server3.0.2中target目录中的CAS.war复制到%tomcat_home%\webapps目录下.
(或者\cas-server-2.0.12\lib目录中的CAS.war也可以)
4.将cas-client-2.0.11\java\lib文件复制到%tomcat_home%\webapps\servlets-examples\WEB-INF\lib中(没有lib文件夹,自己建一个)
5.修改tomcat自带的servlet-examples的web.xml, 加入cas的过滤器:

<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://localhost:8443/cas/login</param-value>
    </init-param>
    <init-param>
        <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
        <param-value>https://localhost:8443/cas/proxyValidate</param-value>
    </init-param>
    <init-param>
        <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
        <param-value>localhost:8080</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CASFilter</filter-name>
    <url-pattern>/servlet/*</url-pattern>
</filter-mapping>
6.启动tomcat !,CAS.war文件被自动在webapps下释放出CAS目录
进入http://localhost:8080/servlets-examples,随便点击一个Execute,系统 被自动转发到CAS的登陆页面.
输入相同的用户名和密码,之后跳转回原来页面
注意:
在制作一个自签名的credential了, 在生成keystore文件的时候密码是:changeit(这是tomcat默认的),你的名字一定要是:localhost,当然这是你需要把CAS client和CAS server放在同一台机器上进行测试用的.

[此贴子已经被作者于2006-2-13 17:20:49编辑过]

--  作者:gladone
--  发布时间:2/20/2006 12:47:00 PM

--  
谢谢大侠的指导,我按步骤执行到最后,能访问CAS的登陆页面.但是输入用户名和密码后
Tomcat报错如下:javax.servlet.ServletException: java.security.cert.CertificateException: Couldn't find trusted certificate
请各位高手指教。谢谢!
--  作者:菜籽
--  发布时间:2/20/2006 7:29:00 PM

--  
按照3楼的做法:
又一步
2.生成安全证书
首先在命令行中切换到 %java_home%\jre\lib\security目录

就是:
把certificate加到%JDK_HOME%\jre\lib\securitycacerts

你再试试


--  作者:gladone
--  发布时间:2/20/2006 9:09:00 PM

--  
我按照你的步骤重新在%java_home%\jre\lib\security目录下输入这三个命令,结果没有变化。
我的jdk版本是j2sdk1.4.2_02;tomcat版本是5.0
刚才又将JDK的环境重新配置并再次生成证书,还是不行。大侠救命哪~~~


[此贴子已经被作者于2006-2-20 21:41:58编辑过]

--  作者:菜籽
--  发布时间:2/21/2006 9:36:00 AM

--  
列出你的每步的的结果,还有错误信息
--  作者:gladone
--  发布时间:2/21/2006 10:00:00 AM

--  
1.在命令行下转到C:\j2sdk1.4.2_02\jre\lib\security\(java_home在C:\j2sdk1.4.2_02);
2.输入C:\j2sdk1.4.2_02\bin\keytool -genkey -alias tomcat -keyalg RSA,提示“输入keystore密码:”,输入changeit后添加信息,将username设为localhost,其他随便写;
3.生成后输入C:\j2sdk1.4.2_02\bin\keytool -export -alias tomcat -file server.crt输入密码后提示保存在server.crt;
4.输入C:\j2sdk1.4.2_02\bin\keytool -import -file server.crt -keystore C:\j2sdk1.4.2_02\jre\lib\security\cacerts,输入密码后按“y” 提示添加进cacerts;
5.启动tomcat,进入servlets-examples页面,按任意一个“Execute”,提示“即将通过安全连接访问网络”,确定后进入CAS页面,输入相同的用户和密码后,提示“离开安全连接”,确定后出现错误:javax.servlet.ServletException: java.security.cert.CertificateException: Couldn't find trusted certificate
 edu.yale.its.tp.cas.client.filter.CASFilter.getAuthenticatedUser(CASFilter.java:254)
 edu.yale.its.tp.cas.client.filter.CASFilter.doFilter(CASFilter.java:184)
javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: Couldn't find trusted certificate
 com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.a(DashoA6275)
 com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(DashoA6275)
 com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(DashoA6275)
 com.sun.net.ssl.internal.ssl.SunJSSE_az.a(DashoA6275)
 com.sun.net.ssl.internal.ssl.SunJSSE_az.a(DashoA6275)
 com.sun.net.ssl.internal.ssl.SunJSSE_ax.a(DashoA6275)
 com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(DashoA6275)
 com.sun.net.ssl.internal.ssl.SSLSocketImpl.j(DashoA6275)
 com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(DashoA6275)
 sun.net.www.protocol.https.HttpsClient.afterConnect(DashoA6275)
 sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(DashoA6275)
 sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:574)
 sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(DashoA6275)
 edu.yale.its.tp.cas.util.SecureURL.retrieve(SecureURL.java:70)
 edu.yale.its.tp.cas.client.ServiceTicketValidator.validate(ServiceTicketValidator.java:212)
 edu.yale.its.tp.cas.client.filter.CASFilter.getAuthenticatedUser(CASFilter.java:219)
 edu.yale.its.tp.cas.client.filter.CASFilter.doFilter(CASFilter.java:184)
我的CAS-server是2.0.12,cas-client是2.0.11


--  作者:gladone
--  发布时间:2/27/2006 9:45:00 AM

--  
我换了tomcat的版本,在5.0.28下重新配置了一遍,顺利通过了,谢谢!
--  作者:skycas
--  发布时间:4/16/2006 10:28:00 PM

--  
为什么我第一次
用按execute后
会出现找不到服务器。

--  作者:ppxiaofei
--  发布时间:6/13/2006 2:53:00 PM

--  请教楼主
你在Tomcat5.0和Tomcat5.5两个版本的配置过程中有什么区别吗?
我已经在Tomcat5.0.28中配置成功了,但是现在换了Tomcat5.5的版本,
到访问应用程序后提示输入验证用户名和密码以后就会出现错误页面,
异常如下:
*************************************
HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Unable to validate ProxyTicketValidator [[edu.yale.its.tp.cas.client.ProxyTicketValidator proxyList=[null] [edu.yale.its.tp.cas.client.ServiceTicketValidator casValidateUrl=[https://xufei:8443/cas/proxyValidate] ticket=[ST-2-cHE06v0KjLXrd2YOwdbTQAM2hsZeCZfauiz-20] service=[http%3A%2F%2Fxufei%3A8080%2Fservlets-examples%2Fservlet%2FHelloWorldExample] renew=false]]]
 edu.yale.its.tp.cas.client.filter.CASFilter.doFilter(CASFilter.java:381)
 filters.ExampleFilter.doFilter(ExampleFilter.java:101)


root cause

edu.yale.its.tp.cas.client.CASAuthenticationException: Unable to validate ProxyTicketValidator [[edu.yale.its.tp.cas.client.ProxyTicketValidator proxyList=[null] [edu.yale.its.tp.cas.client.ServiceTicketValidator casValidateUrl=[https://xufei:8443/cas/proxyValidate] ticket=[ST-2-cHE06v0KjLXrd2YOwdbTQAM2hsZeCZfauiz-20] service=[http%3A%2F%2Fxufei%3A8080%2Fservlets-examples%2Fservlet%2FHelloWorldExample] renew=false]]]
 edu.yale.its.tp.cas.client.CASReceipt.getReceipt(CASReceipt.java:52)
 edu.yale.its.tp.cas.client.filter.CASFilter.getAuthenticatedUser(CASFilter.java:455)
 edu.yale.its.tp.cas.client.filter.CASFilter.doFilter(CASFilter.java:378)
 filters.ExampleFilter.doFilter(ExampleFilter.java:101)


note The full stack trace of the root cause is available in the Apache Tomcat/5.5.17 logs.

*****************************************
想请教是什么原因?


--  作者:菜籽
--  发布时间:7/8/2006 5:22:00 PM

--  
好久没有关注论坛了,不知道楼上的问题解决了么?
500的错误,应该是设置错误,自己好好检查一下步骤。
--  作者:feng
--  发布时间:8/3/2006 2:46:00 PM

--  
请问,有没有人用远程,在另外一台机器上配置成功过 啊?我的本地机是A,想用远程配置B机器上的tomcat支持CAS,不知道行否?
--  作者:feng
--  发布时间:8/3/2006 2:46:00 PM

--  
我在本地机A上远程登陆机器B,
为Tomcat生成用于SSL通讯的密钥:keytool -genkey -alias tomcat -keyalg RSA,输入密钥密码和相应参数,结果是在用户目录中创建了名为.ketstore的密钥文件。
导出密钥文件:keytool -export -file server.crt -alias tomcat,输入上一步中的密码,结果在当前目录生成server.crt密钥文件。
为JVM导入密钥:keytool -import -keystore %JAVA_HOME%/jre/lib/security/cacerts -file server.crt -alias tomcat,输入密码,将创建cacerts文件。
修改Tomcat配置文件server.xml,去掉对于SSL的注释,即开放8443端口,注意这里需要在connector字段中加入keystorePass="password" keystoreFile="conf/.keystore"参数,password即为上面几步中涉及到的密码。

到这里都很正常,但是启动Tomcat,测试https://localhost:8443/时候,怎么也打不开页面。找不到服务器,无法打开网页。
无法显示网页
您正在查找的页当前不可用。 网站可能遇到支持问题,或者您需要 调整您的浏览器设置。

--------------------------------------------------------------------------------

请尝试以下操作:

单击  刷新按钮,或稍后重试。

如果您已经在地址栏中输入该网页的地址, 请确认其拼写正确。

要检查您的网络连接,请单击工具菜单,然后单击 Internet 选项。在连接选项卡上,单击设置。 设置必须与您的局域网 (LAN) 管理员或 Internet 服务供应商 (ISP) 提供的一致。
查看您的 Internet 连接设置是否正确被检测。您可能设置让 Microsoft Windows 检查您的网站并自动发现网络连接设置(如果您的网络管理员已经启用此设置)。
单击工具菜单,然后单击Internet 选项。
在连接选项卡上,单击LAN 设置。
选择自动检测设置,然后单击确定。
某些站点要求 128-位的连接安全性。单击帮助菜单,然后单击关于 Internet Explorer 可以查看您所安装的安全强度。
如果您要访问某安全站点,请确保您的安全设置能够支持。请单击工具菜单,然后单击 Internet 选项。在“高级”选项卡上,滚动到“安全”部分,复选 SSL 2.0、SSL 3.0、TLS 1.0、PCT 1.0 设置。
单击上一步按钮,尝试其他链接。

找不到服务器或 DNS 错误
Internet Explorer  

是怎么回事呢?我在本地机上配置的好好的,难道不能远程配置吗?有人远程配置成功过吗?
谢谢谢,急等


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
93.750ms