﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-哈哈,吼吼,这是个好地方-随笔分类-sso</title><link>http://www.blogjava.net/tufanshu/category/30359.html</link><description>没有风雨躲的过，
没有坎坷不必走……
</description><language>zh-cn</language><lastBuildDate>Thu, 27 Jan 2011 17:11:08 GMT</lastBuildDate><pubDate>Thu, 27 Jan 2011 17:11:08 GMT</pubDate><ttl>60</ttl><item><title>cas server使用mysql数据库和oralce数据库的差异</title><link>http://www.blogjava.net/tufanshu/archive/2011/01/26/343543.html</link><dc:creator>雪地孤鸿</dc:creator><author>雪地孤鸿</author><pubDate>Wed, 26 Jan 2011 01:05:00 GMT</pubDate><guid>http://www.blogjava.net/tufanshu/archive/2011/01/26/343543.html</guid><wfw:comment>http://www.blogjava.net/tufanshu/comments/343543.html</wfw:comment><comments>http://www.blogjava.net/tufanshu/archive/2011/01/26/343543.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tufanshu/comments/commentRss/343543.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tufanshu/services/trackbacks/343543.html</trackback:ping><description><![CDATA[测试环境下使用的是mysql数据库，切换到正式的oralce数据库中去发现cas server是无效的，主要的原因是由于数据库的差异导致的<br />
认证用户的sql语句在mysql<span style="color: red;">下为</span>：<br />
select password from user_login where username=? and e<span style="color: red;">nabled=tr</span>ue<br />
而在oracle下应该为<br />
select password from user_login where username=? and <span style="color: red;">enabled=1</span><br />
主要由于oralce和mysql对boolean字段的处理不一致导致的。<br />
<br />
<img src ="http://www.blogjava.net/tufanshu/aggbug/343543.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tufanshu/" target="_blank">雪地孤鸿</a> 2011-01-26 09:05 <a href="http://www.blogjava.net/tufanshu/archive/2011/01/26/343543.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cas Logout问题释疑(转载)</title><link>http://www.blogjava.net/tufanshu/archive/2008/03/28/189293.html</link><dc:creator>雪地孤鸿</dc:creator><author>雪地孤鸿</author><pubDate>Fri, 28 Mar 2008 08:16:00 GMT</pubDate><guid>http://www.blogjava.net/tufanshu/archive/2008/03/28/189293.html</guid><wfw:comment>http://www.blogjava.net/tufanshu/comments/189293.html</wfw:comment><comments>http://www.blogjava.net/tufanshu/archive/2008/03/28/189293.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tufanshu/comments/commentRss/189293.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tufanshu/services/trackbacks/189293.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt;">假设有webapp1, webapp2, cas server，webapp1, webapp2均受cas server保护<br />
首先，我在这里简单解释一下：<br />
第1种不能logout的情况：<br />
1）登录了WebApp1，redirect到caserver<br />
casserver认证后，再redirect到webapp1，ok！<br />
2）http方式 lougout casserver1，即http://yale_casserver:8080/cas/lougout<br />
显示logout成功<br />
3）访问webapp2，还能访问！<br />
这是非常正常的一种情况，因为你不通过https来注销，casserver怎么"杀"掉<br />
它通过https发给你的TGC Cookie?<br />
<br />
第2种不能logout的情况：<br />
1）登录了WebApp1，redirect到caserver<br />
casserver认证后，再redirect到webapp1，ok！<br />
2）https方式 lougout casserver1，即https://yale_casserver:8443/cas/lougout<br />
显示logout成功<br />
3）访问webapp1，还能访问！访问webapp2，不能访问，重定向到casserver要求登录！<br />
这也是非常正常的一种情况，因为你已经能够访问，你继续可以继续访问，<br />
CASLogout不能阻止你访问webapp1，它只能阻止你访问webapp2，因为你已经<br />
被允许访问webapp1，而webapp2则还没有，如果你在(1)的时候，顺带也访问<br />
webapp2，那么你的注销将毫无作用了，CAS无法阻止你访问这两个webapp，<br />
因为你有Service Ticket。<br />
<br />
如果你对此费解，那时因为你已为Logout就是退出系统，那我只能表示遗憾，<br />
因为CAS Logout的作用不是这样，它的作用是阻止你继续通过TGC（它简单地<br />
清楚了IE的TGC Cookie）来获取ST，阻止你获取通向其他web应用的Ticket。<br />
<br />
所以，用完webapp1的时候，注销，然后再关闭掉IE就彻底Logout了。<br />
&nbsp;<br />
<br />
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1503551<br />
</span>
<img src ="http://www.blogjava.net/tufanshu/aggbug/189293.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tufanshu/" target="_blank">雪地孤鸿</a> 2008-03-28 16:16 <a href="http://www.blogjava.net/tufanshu/archive/2008/03/28/189293.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cas配置之初体验</title><link>http://www.blogjava.net/tufanshu/archive/2008/03/25/188552.html</link><dc:creator>雪地孤鸿</dc:creator><author>雪地孤鸿</author><pubDate>Tue, 25 Mar 2008 10:05:00 GMT</pubDate><guid>http://www.blogjava.net/tufanshu/archive/2008/03/25/188552.html</guid><wfw:comment>http://www.blogjava.net/tufanshu/comments/188552.html</wfw:comment><comments>http://www.blogjava.net/tufanshu/archive/2008/03/25/188552.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tufanshu/comments/commentRss/188552.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tufanshu/services/trackbacks/188552.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt;"><span style="font-size: 10pt;">今天花了一个下午的时间，终于完成的cas配置的一次完整的运行。cas前世今生我就不介绍了，有兴趣的朋友谷歌或是百度一下就可以有很详细的了解了，重点记录一下今天的配置过程和遇到的问题及解决方法。<br />
环境：浏览器(ie6.0,windows xp)<br />
&nbsp;&nbsp;&nbsp; cas server 在一台Linux服务器，cas client在另外一台linux服务器<br />
&nbsp;&nbsp;&nbsp; 应用服务器为tomcat5.5.26<br />
初步的配置实用过程参考了http://www.blogjava.net/yida/archive/2007/04/03/55466.html的描述，各位亦可以访问阿木的blog。整理如下：<br />
1.请下载到cas的官方网站下载cas-server（我用的是3.2）和cas-client（2.0.11），tomcat5.5.26<br />
&nbsp;&nbsp;&nbsp; cas的官方网站：http://www.ja-sig.org/products/cas/<br />
2.安装cas-server，我们假定安装cas-server的服务器为server1<br />
&nbsp;&nbsp;&nbsp; (<span style="font-size: 10pt;"><span style="font-size: 10pt;">1)请在server1服务器上安装好jdk1.5或以上版本的jdk，tomcat5.5.26，并配置环境变量JAVA_HOME<br />
&nbsp;&nbsp;&nbsp; (2)将cas-server-3.2-release.zip解压，将moudels目录下cas-server-webapp-3.2.war拷贝到tomcat的webapps目录下，修&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 改名称为cas.war.<br />
&nbsp;&nbsp;&nbsp; (3)生成server1的安全证书：<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  </span><span style="font-size: 10.5pt;" twffan="done" lang="EN-US">keytool -genkey -alias my-alias-name -keyalg RSA -keystore keystore-file<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  (4)在server1</span><span style="font-size: 10.5pt;" twffan="done" lang="EN-US">配置https<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  在</span><span style="font-size: 10.5pt;" twffan="done" lang="EN-US">$CATALINA_HOME/conf/server.xml里修改为一下配置<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &lt;Connector port="8443" maxHttpHeaderSize="8192"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxThreads="150" minSpareThreads="25" maxSpareThreads="75"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; enableLookups="false" disableUploadTimeout="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; acceptCount="100" scheme="https" secure="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; clientAuth="false" sslProtocol="TLS"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; keystoreFile="/path/keystore-file" keystorePass="your-password"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp; (5)导出server1的证书，</span><span style="font-size: 10.5pt;" twffan="done" lang="EN-US">用来给所有需要用到的客户端导入<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  </span><span style="font-size: 10.5pt;" twffan="done" lang="EN-US">keytool -export -file myserver.cert -alias my-alias-name -keystore keystore-file<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp; </span><span style="font-size: 10.5pt;" twffan="done" lang="EN-US">(6)将导出的证书上传的client1服务器上。<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; (7)启动server1上的tomcat，检验cas配置是否成功，访问http://ip:8443/cas/login,如果能看到cas的登录页面则表示配&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 置成功。<br />
3.<span style="font-size: 10pt;">配置 cas-client，我们以tomcat下自带的servlet-example为例子进行说明  <br />
&nbsp;&nbsp;&nbsp; (1)</span></span></span></span><span style="font-size: 10pt;"><span style="font-size: 10pt;"><span style="font-size: 10pt;">请在client1服务器上安装好jdk1.5或以上版本的jdk，tomcat5.5.26，并配置环境变量JAVA_HOME<br />
&nbsp; (2)</span></span></span><span style="font-size: 10.5pt;" twffan="done" lang="EN-US">将cas-client-2.0.11.zip解压，把java/lib/casclient.jar拷贝到client1服务器上的<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; webapps/servlets-examples/WEB-INF/lib目录下（如果没有就建一个）</span><span style="font-size: 10pt;"><span style="font-size: 10pt;"><span style="font-size: 10.5pt;" twffan="done" lang="EN-US"></span></span></span><br />
&nbsp; (3)<span style="font-size: 10.5pt;" twffan="done" lang="EN-US">在要使用CAS的客户端client1里设置（以servlets-examples这个APP为例），我们使用ServletFilter(CAS client里提供&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 的)来实现SSO的检查，</span><span style="font-size: 10.5pt;" twffan="done" lang="EN-US">修改servlets-examples/WEB-INF/web.xml，添加以下内容：<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  &lt;filter&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;filter-name&gt;CASFilter&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;filter-class&gt;edu.yale.its.tp.cas.client.filter.CASFilter&lt;/filter-class&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;param-name&gt;edu.yale.its.tp.cas.client.filter.loginUrl&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;https://your.cas.server.name(eg:server1):port/cas/login&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;param-name&gt;edu.yale.its.tp.cas.client.filter.validateUrl&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;param-value&gt;https://your.cas.server.name(eg:server1):port/cas/proxyValidate&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;param-name&gt;edu.yale.its.tp.cas.client.filter.serverName&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;param-value&gt;your.client.server.name(eg:client1):port&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/filter&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;filter-mapping&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;filter-name&gt;CASFilter&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/servlet/*&lt;/url-pattern&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/filter-mapping&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  (4)</span><span style="font-size: 10.5pt;" twffan="done" lang="EN-US">在客户端的JVM里导入信任的SERVER的证书(根据情况有可能需要管理员权限)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  </span><span style="font-size: 10.5pt;" twffan="done" lang="EN-US">keytool -import -keystore $JAVA_HOME/jre/lib/security/cacerts -file myserver.cert -alias my-alias-name<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  此时需要输入密码，默认密码为changeit<br />
通过以上配置，基本完成cas-server和cas-client的配置，但是还有以下问题需要注意和解决<br />
由于cas的证书需要域名才能正确的进行认证信息的交互，不支持ip，如果server和client在同一台机器上，可以使用localhost，如果像我们上面描述的三台服务器这样的环境，使用localhost或者ip是不能正常运行的。如果使用ip，运行时会抛出</span> <span style="color: red;">HTTPS hostname wrong</span> 的错误，解决的方法如下：<br />
假设server1的ip为：192.168.10.1，client1的ip为192.168.10.2，开发机器(xp)的ip为：192.168.10.3<br />
在server1和client1上设置本机的域名映射：<br />
vi /etc/hosts 添加以下行<br />
192.168.10.1 cas.server<br />
在开发机器(xp)下，在C:\WINDOWS\system32\drivers\etc目录下，编辑hosts文件，添加以下行<br />
192.168.10.1 cas.server<br />
<br />
重新生成cas-sever的服务器端的证书，在<span style="font-family: 宋体;" twffan="done"><strong>开始问&#8220;你的名字&#8221;或&#8220;<span twffan="done" lang="EN-US">DName&#8221;的时候，必须填写你服务器所在域名（cas.server）<br />
然后重新到处服务器器端的证书，并将其导入到client1服务器的jvm<br />
<br />
最后修改</span></strong></span><span style="font-size: 10.5pt;" twffan="done" lang="EN-US">修改servlets-examples/WEB-INF/web.xml中关于cas过滤器的配置：请将your.cas.server.name(eg:server1)修改为cas.server即可。重新启动server1和client1的服务器上的tomcat就可正常运行。<br />
<br />
<br />
</span><span style="font-size: 10.5pt;" twffan="done" lang="EN-US">ttp://client1:8080/servlets-examples/servlet/HelloWorldExample<br />
系统会自动跳转到一个验证页面，随便输入一个相同的账号,密码，严正通过之后就会访问<br />
到真正的HelloWorldExample这个servlet了</span><br />
<span style="font-size: 10.5pt;" twffan="done" lang="EN-US"><br />
</span>
</span>
<img src ="http://www.blogjava.net/tufanshu/aggbug/188552.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tufanshu/" target="_blank">雪地孤鸿</a> 2008-03-25 18:05 <a href="http://www.blogjava.net/tufanshu/archive/2008/03/25/188552.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>