锁定老帖子 主题:Yale CAS最佳实践 --全部
精华帖 (3) :: 良好帖 (3) :: 新手帖 (2) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-12-22
to boogie:
http://wiki.liferay.com/index.php/Single_SignOn_-_Integrating_Liferay_With_CAS_Server Generate the SSL cert with Java keytool Now that we have everything we need, it's time to generate an SSL cert for our CAS server. Instructions and more information on SSL certs can be found here But I found some typos and errors on that page. So following the instructions below should get you what you need. In any directory ( I use my root ) enter the command: keytool -genkey -alias tomcat -keypass changeit -keyalg RSA Answer the questions: (note that your firstname and lastname MUST be hostname of your server and cannot be a IP address; this is very important as an IP address will fail client hostname verification even if it is correct) Since the SSL certificate is bound to the domain name, you have to already know which domain the request is for before the request is decrypted. |
|
返回顶楼 | |
发表时间:2006-12-22
补充:关于cookie在哪里产生?
login.sendTgc() private TicketGrantingTicket sendTgc(String username, HttpServletRequest request, HttpServletResponse response) throws ServletException { try { TicketGrantingTicket t = new TicketGrantingTicket(username); String token = tgcCache.addTicket(t); Cookie tgc = new Cookie(TGC_ID, token); tgc.setSecure(true); tgc.setMaxAge(-1); tgc.setPath(request.getContextPath()); response.addCookie(tgc); return t; } catch (TicketException ex) { throw new ServletException(ex.toString()); } } |
|
返回顶楼 | |
发表时间:2006-12-22
netfly 写道 to boogie:
假如我的电脑ip为192.168.6.110,我的电脑名为netfly 那么,在生成证书的时候,就不能输入localhost,只能输入netfly,在其他电脑上,一样可以通过ip访问我的服务。 我明天有空试一下!如果可以的话那太OK了!谢谢! |
|
返回顶楼 | |
发表时间:2006-12-22
netfly 写道 Since the SSL certificate is bound to the domain name, you have to already know which domain the request is for before the request is decrypted. 这话有点不太明白,是不是说CAS SERVER必须和其它需要CAS认证的应用在同一个域里? |
|
返回顶楼 | |
发表时间:2006-12-23
to boogie:
不是,只是告诉你需要知道请求来自那个域 看看这个帖,也许你能明白 http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=29304&threadID=36975&tstart=60 |
|
返回顶楼 | |
发表时间:2006-12-26
我试了,客户端登陆以后出现
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://10.170.150.95:8443/cas/ServiceValidate] ticket=[ST-6-AnSoGcxl7qoqzGpsNx5dmkNbjBQfmqBVFcw-20] service=[http%3A%2F%2F10.170.150.95%3A8082%2Fservlets-examples%2Fservlet%2FHelloWorldExample] renew=false]]] edu.yale.its.tp.cas.client.filter.CASFilter.doFilter(CASFilter.java:381) 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://10.170.150.95:8443/cas/ServiceValidate] ticket=[ST-6-AnSoGcxl7qoqzGpsNx5dmkNbjBQfmqBVFcw-20] service=[http%3A%2F%2F10.170.150.95%3A8082%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) C:\Documents and Settings\inc062977.INC>keytool -genkey -alias tomcat -keyalg RSA 输入keystore密码: 再次输入新密码: 您的名字与姓氏是什么? [Unknown]: zhangfeng 您的组织单位名称是什么? [Unknown]: browse 您的组织名称是什么? [Unknown]: inventec application 您所在的城市或区域名称是什么? [Unknown]: xi'an 您所在的州或省份名称是什么? [Unknown]: shanxi 该单位的两字母国家代码是什么 [Unknown]: 86 CN=zhangfeng, OU=browse, O=inventec application, L=xi'an, ST=shanxi, C=86 正确吗? [否]: y 输入<tomcat>的主密码 (如果和 keystore 密码相同,按回车): 再次输入新密码: C:\Documents and Settings\inc062977.INC>keytool -genkey -alias tomcat -keyalg RSA 输入keystore密码: 再次输入新密码: 您的名字与姓氏是什么? [Unknown]: 10.170.150.95 您的组织单位名称是什么? [Unknown]: inventec 您的组织名称是什么? [Unknown]: inventec 您所在的城市或区域名称是什么? [Unknown]: xi'an 您所在的州或省份名称是什么? [Unknown]: shanxi 该单位的两字母国家代码是什么 [Unknown]: 86 CN=10.170.150.95, OU=inventec, O=inventec, L=xi'an, ST=shanxi, C=86 正确吗? [否]: y 输入<tomcat>的主密码 (如果和 keystore 密码相同,按回车): 再次输入新密码: C:\Documents and Settings\inc062977.INC>keytool –export –file server.crt –alias t keytool错误: java.lang.RuntimeException: 用法错误,–export 不是合法的命令 C:\Documents and Settings\inc062977.INC>keytool –export -file server.crt -alias tom keytool错误: java.lang.RuntimeException: 用法错误,–export 不是合法的命令 C:\Documents and Settings\inc062977.INC>keytool -export -file server.crt -alias tomc 输入keystore密码: 保存在文件中的认证 <server.crt> C:\Documents and Settings\inc062977.INC>keytool -import -keystore $JAVA_HOME\jre\lib 输入keystore密码: 再次输入新密码: 所有者:CN=10.170.150.95, OU=inventec, O=inventec, L=xi'an, ST=shanxi, C=86 签发人:CN=10.170.150.95, OU=inventec, O=inventec, L=xi'an, ST=shanxi, C=86 序列号:45909b98 有效期: Tue Dec 26 11:48:40 CST 2006 至Mon Mar 26 11:48:40 CST 2007 证书指纹: MD5:50:56:15:B0:E5:96:26:B5:80:CB:6F:2D:C0:FF:AC:13 SHA1:17:BF:EC:F1:88:91:F8:CD:BF:82:10:8A:A8:3A:21:58:19:D9:5A:AE 签名算法名称:SHA1withRSA 版本: 3 信任这个认证? [否]: y 认证已添加至keystore中 keytool错误: java.io.FileNotFoundException: $JAVA_HOME\jre\lib\security\cacerts (系 C:\Documents and Settings\inc062977.INC>keytool -import -keystore d:\Java\jdk1.6.0\j 输入keystore密码: 所有者:CN=10.170.150.95, OU=inventec, O=inventec, L=xi'an, ST=shanxi, C=86 签发人:CN=10.170.150.95, OU=inventec, O=inventec, L=xi'an, ST=shanxi, C=86 序列号:45909b98 有效期: Tue Dec 26 11:48:40 CST 2006 至Mon Mar 26 11:48:40 CST 2007 证书指纹: MD5:50:56:15:B0:E5:96:26:B5:80:CB:6F:2D:C0:FF:AC:13 SHA1:17:BF:EC:F1:88:91:F8:CD:BF:82:10:8A:A8:3A:21:58:19:D9:5A:AE 签名算法名称:SHA1withRSA 版本: 3 信任这个认证? [否]: y 认证已添加至keystore中 |
|
返回顶楼 | |
发表时间:2006-12-26
请注意,
1.是否严格安配置篇的步骤进行配置 2.client端的web.xml文件是否使用了ip?除开client端,其他都不能使用ip 3.如果是多台机器,检查能否ping 你的cas server,如果不能,请在C:\WINDOWS\system32\drivers\etc\hosts\中加入你的cas server ip address. 这是web.xml范例: <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://Solaris4Oracle:8443/cas/login</param-value> </init-param><!--这里的server是服务端的IP--> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name> <param-value>https://Solaris4Oracle:8443/cas/proxyValidate</param-value> </init-param><!--这里的serName是服务端的主机名,而且必须是--> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name> <param-value>192.168.6.167:8080</param-value><!--client:port就是需要CAS需要拦截的地址和端口,一般就是这个TOMCAT所启动的IP和port--> </init-param> </filter> 一句话,引起那种错误的原因,一个是证书错误,一个就是网络错误。 |
|
返回顶楼 | |
发表时间:2006-12-27
引用 所有者:CN=10.170.150.95, OU=inventec, O=inventec, L=xi'an, ST=shanxi, C=86
签发人:CN=10.170.150.95, OU=inventec, O=inventec, L=xi'an, ST=shanxi, C=86 早就强调过,所有者不能使用ip! |
|
返回顶楼 | |
发表时间:2006-12-29
证书CN的问题,我都是这样处理的,可以在生成密钥时,将CN设置为需要的域名,系统实施后,域名自然由DNS处理,开发过程中测试,可以修改本地的hosts表,添加域名到本机(CAS所在机)地址的映射,使用浏览器访问,不要走代理,一般就ok了。
另外,LZ,关于gateway的理解,有没有进展呀?我也看晕了。 |
|
返回顶楼 | |
发表时间:2006-12-29
看了这个页面:
Using CAS without the CAS login screen 再结合: 引用 edu.yale.its.tp.cas.client.filter.gateway: value of CAS "gateway" parameter. Redirects initial call through CAS and if the user has logged in, validates the ticket on return. If the user has not logged in, returns to the web application without setting the CAS_FILTER_USER variable. Note that once a redirect through CAS has occurred, the filter will not automatically try again to log the user in. You can then either provide an explicit CAS login link (https://cas-server/cas/login?service=http://your-app) or set up two instances of the filter mapped to different paths. One instance would have gateway=true, the other wouldn't. When you need the user to be logged in, direct him/her to the path of the other filter.
我是这么理解Gateway的: 1、默认情况下,gateway=false,未认证用户访问客户端应用,被重定向到CAS,CAS会返回认证页面给用户,提示用户输入身份信息。 2、gateway=true时,未认证用户访问客户端应用,被重定向到CAS,CAS会直接重定向回客户端应用。CAS客户端会做一个标识(maybe?),以后这个会话的请求,虽然用户未被认证,但也不会再重定向到CAS。 3、对于用户已认证的情况,gateway=true\false,处理是一样。 4、gateway=true,应该是用在客户端应用本身有认证页面,不希望用户同其交互时,浏览器会跳转到另外一个应用--CAS的页面,或者客户端应用并不是十分在意用户是否通过认证,即允许匿名访问。 这是我的一点理解,也是刚刚看CAS,请大家指正。 |
|
返回顶楼 | |