1、简介
官方网站:http://www.ja-sig.org/products/cas/
2、安装
服务端安装:linux s3,apache-tomcat-6.0.10,jdk1.5.0_08
下载:
CAS Server 3.0.7 Final (stable)
部署cas-server-3.0.7\target\cas.war到tomcat
启用tomcat的ssl:
生成keystore:
[oracle@localhost cas]$ rm ~/.keystore
[oracle@localhost cas]$ $JAVA_HOME/bin/keytool/keytool -genkey -alias tomcat -keyalg RSA
输入keystore密码: helloworld
您的名字与姓氏是什么?
[Unknown]: helloword.test.com --注意:在后面配置客户端时认证url的host部分一定要和此处所填写的一样。另外,此处填写根据客户机访问服务器的方式,有三种选择。1、 服务器,客户机都在互联网上,客户机只能通过域名访问服务器。那么就只能填写服务器的域名。2、服务器,客户机在同一局域网内,客户机可以通过主机名访问服务器时。那么就可以填写服务的主机名。3、如果客户端,服务端在同一台机器上就可以填写localhost。
您的组织单位名称是什么?
[Unknown]: helloword
您的组织名称是什么?
[Unknown]: helloword
您所在的城市或区域名称是什么?
[Unknown]: bj
您所在的州或省份名称是什么?
[Unknown]: bj
该单位的两字母国家代码是什么
[Unknown]: CN
CN=helloword.test.com, OU=helloword, O=helloword, L=bj, ST=bj, C=CN 正确吗?
[否]: y
输入的主密码
(如果和 keystore 密码相同,按回车):
[oracle@localhost cas]$
修改tomcat配置,开放https服务:
在apache-tomcat-6.0.10/conf/server.xml中找到
<connector maxhttpheadersize="8192" port="8443">
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" /> </connector>
去掉前后的注释符修改成
<connector maxhttpheadersize="8192" port="8443">
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false"
keystorePass="helloworld "
sslProtocol="TLS" /></connector>
启动tomcat,浏览https://helloword.test.com:8443/cas/。出现登陆界面,用户名和密码输入相同的任意字符串,登陆成功!即宣告服务器配置完成。
导出keystore,供客户端使用:
[oracle@localhost cas]$ keytool -export -alias tomcat -file server.crt
输入keystore密码: helloworld
保存在文件中的认证
Yale Java Client
2.1.1
Download
把服务器导出的认证文件server.crt拷贝到客户端机器%JAVA_HOME%\jre\lib\security\server.crt
在客户端机器倒入服务器证书:
D:\cas>cd %JAVA_HOME%\jre\lib\security\
D:\Program Files\Java\jdk1.5.0_06\jre\lib\security>del cacerts
D:\Program Files\Java\jdk1.5.0_06\jre\lib\security>keytool -import -trustcacerts -alias tomcat -file d:\cas\server.crt -keystore cacerts
输入keystore密码: helloworld
Owner: CN=helloword.test.com, OU=helloword, O=helloword, L=bj, ST=bj, C=CN
发照者: CN=helloword.test.com, OU=helloword, O=helloword, L=bj, ST=bj, C=CN
序号: 465bb49d
有效期间: Tue May 29 13:05:33 CST 2007 至: Mon Aug 27 13:05:33 CST 2007
认证指纹:
MD5: 64:EB:B1:12:05:0E:8C:73:E1:B8:71:30:05:DD:54:65
SHA1: B6:3A:7C:25:2D:14:C7:E4:2E:04:FB:24:8F:EF:BD:2F:E0:52:BA:D3
信任这个认证? [否]: y
认证已添加至keystore中
创建客户端应用:
把下载的cas-client-java-2.1.1\dist\casclient.jar加入web应用的lib,修改web.xml
<web-app>
...
<filter>
<filter-name>CAS Filter</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://helloword.test.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://helloword.test.com:8443/cas/serviceValidate</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>客户端应用的域名和端口 (e.g., client.test.com:8080)</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
...
</web-app>
注意:配置中的红色的host一定要和生成keystore时填写的"您的名字与姓氏是什么?"一样。
按照上述步骤配置另外一台客户机http://another-client.test.com:8080
启动tomcat,访问http://client.test.com:8080将被重定向到https://helloword.test.com:8443/cas/login,登陆成功后将返回到http://client.test.com:8080。然后再访问http://another-client.test.com:8080将不需要登陆。
rails版客户端安装:
CASLogin plugin为rails应用提供cas认证功能。
D:\cas>rails railscas
D:\cas>cd railscas
D:\cas\railscas>ruby script/plugin install http://developer.csuchico.edu/svn/cas_login/trunk
配置插件:修改vendor\plugins\trunk\lib\cas_login.rb
把
# The URL of the CAS server to authenticate against.
CAS_SERVER_URL = 'cas.csuchico.edu'
# The port the CAS server is running on.
PORT = 443
改成
# The URL of the CAS server to authenticate against.
CAS_SERVER_URL = '
helloword.test.com'
# The port the CAS server is running on.
PORT = 8443
把
redirect_to "https://#{CAS_SERVER_URL}/cas/login?service=#{@service}"
改成
redirect_to "https://#{CAS_SERVER_URL}:8443/cas/login?service=#{@service}"
配置应用程序修改app\controllers\application_controller.rb如下:
class ApplicationController < ActionController::Base
include CasLogin
protected
def is_logged_in
return true unless session[:user].nil?
if is_authenticated?
if is_authorized?
return true
end
end
return false
end
private
def is_authorized?
session[:user] = User.find_by_uid(get_authenticated_user_id)
unless session[:user].nil?
return true
end
flash[:notice] = "User not found"
return false
end
end
修改需要认证的controller如下
class ServersController < ApplicationController
before_filter :is_logged_in
end
3、test