此文參考了網(wǎng)上文章,并對(duì)其中做了補(bǔ)充。
參考原文地址一:
http://blogger.org.cn/dispbbs.asp?BoardID=41&id=26447&replyID=19949&star=1&skin=0
參考原文地址二:
http://www.diybl.com/course/3_program/java/javashl/2008414/110181.html
Yale CAS (Central Authentication Service,中央認(rèn)證服務(wù))是耶魯大學(xué)的一個(gè)開(kāi)源項(xiàng)目。它為耶魯大學(xué)的網(wǎng)絡(luò)應(yīng)用提供了一種標(biāo)準(zhǔn)的用戶認(rèn)證服務(wù),從而實(shí)現(xiàn)了SSO的功能。
Yale CAS被設(shè)計(jì)成為一個(gè)獨(dú)立的網(wǎng)絡(luò)應(yīng)用程序,它使用JavaS ervlet技術(shù)實(shí)現(xiàn),可以作為用戶身份認(rèn)證模塊加入到網(wǎng)絡(luò)應(yīng)用中。
2004 年 12 月正式成為 JA-SIG 的一個(gè)項(xiàng)目。CAS 具有以下特點(diǎn):
開(kāi)源的企業(yè)級(jí)單點(diǎn)登錄解決方案。
CAS Server 為需要獨(dú)立部署的 Web 應(yīng)用。
CAS Client 支持非常多的客戶端(這里指單點(diǎn)登錄系統(tǒng)中的各個(gè) Web 應(yīng)用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。
CAS 原理和協(xié)議
從結(jié)構(gòu)上看,CAS 包含兩個(gè)部分: CAS Server 和 CAS Client。CAS Server 需要獨(dú)立部署,主要負(fù)責(zé)對(duì)用戶的認(rèn)證工作;CAS Client 負(fù)責(zé)處理對(duì)客戶端受保護(hù)資源的訪問(wèn)請(qǐng)求,需要登錄時(shí),重定向到 CAS Server。圖1 是 CAS 最基本的協(xié)議過(guò)程:
圖 1. CAS 基礎(chǔ)協(xié)議

CAS Client 與受保護(hù)的客戶端應(yīng)用部署在一起,以 Filter 方式保護(hù)受保護(hù)的資源。對(duì)于訪問(wèn)受保護(hù)資源的每個(gè) Web 請(qǐng)求,CAS Client 會(huì)分析該請(qǐng)求的 Http 請(qǐng)求中是否包含 Service Ticket,如果沒(méi)有,則說(shuō)明當(dāng)前用戶尚未登錄,于是將請(qǐng)求重定向到指定好的 CAS Server 登錄地址,并傳遞 Service (也就是要訪問(wèn)的目的資源地址),以便登錄成功過(guò)后轉(zhuǎn)回該地址。用戶在第 3 步中輸入認(rèn)證信息,如果登錄成功,CAS Server 隨機(jī)產(chǎn)生一個(gè)相當(dāng)長(zhǎng)度、唯一、不可偽造的 Service Ticket,并緩存以待將來(lái)驗(yàn)證,之后系統(tǒng)自動(dòng)重定向到 Service 所在地址,并為客戶端瀏覽器設(shè)置一個(gè) Ticket Granted Cookie(TGC),CAS Client 在拿到 Service 和新產(chǎn)生的 Ticket 過(guò)后,在第 5,6 步中與 CAS Server 進(jìn)行身份合適,以確保 Service Ticket 的合法性。
在該協(xié)議中,所有與 CAS 的交互均采用 SSL 協(xié)議,確保,ST 和 TGC 的安全性。協(xié)議工作過(guò)程中會(huì)有 2 次重定向的過(guò)程,但是 CAS Client 與 CAS Server 之間進(jìn)行 Ticket 驗(yàn)證的過(guò)程對(duì)于用戶是透明的。
另外,CAS 協(xié)議中還提供了 Proxy (代理)模式,以適應(yīng)更加高級(jí)、復(fù)雜的應(yīng)用場(chǎng)景,具體介紹可以參考 CAS 官方網(wǎng)站上的相關(guān)文檔。
下面就來(lái)說(shuō)說(shuō)該如何配置我們的第一個(gè)CAS服務(wù)器
首先需要到官網(wǎng)上下載CAS Server 和 Client,地址分別為:
http://www.ja-sig.org/downloads/cas/cas-server-3.1.1-release.zip
http://www.ja-sig.org/downloads/cas-clients/cas-client-java-2.1.1.zip
1、打開(kāi)tomcat中的SSL協(xié)議
修改Tomcat配置文件server.xml,去掉對(duì)于SSL的注釋,即開(kāi)放8443端口,注意這里需要在connector字段中加入keystorePass="password"參數(shù),password即為上面幾步中涉及到的密碼,代碼如下:
1
<!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
2
<!-- -->
3
<Connector port="8443" maxHttpHeaderSize="8192"
4
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
5
enableLookups="false" disableUploadTimeout="true"
6
acceptCount="100" scheme="https" secure="true"
7
clientAuth="false" sslProtocol="TLS" keystorePass="changeit" />
2、生成安全證書(shū)
如果你的JDK環(huán)境是自動(dòng)安裝的話,你需要在系統(tǒng)中加入JAVA_HOME這個(gè)環(huán)境變量
然后在DOS環(huán)境下(開(kāi)始-》運(yùn)行-》cmd-》回車后出現(xiàn)DOS窗口)一次敲入如下的命令
%java_home%\bin\keytool -genkey -alias tomcat -keyalg RSA
PS:敲入這個(gè)命令后,會(huì)提示你輸入密碼,初始的默認(rèn)密碼為changeit。在證書(shū)生成的時(shí)候,需要你回答一些問(wèn)題,其它的你可以隨便寫(xiě),但是姓名這個(gè)問(wèn)題必須填入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復(fù)制到%tomcat_home%\webapps目錄下.
4、將cas-client-java-2.1.1\dist\casclient.jar文件復(fù)制到%tomcat_home%\common\lib中
5、修改tomcat自帶的servlet-examples的web.xml, 加入cas的過(guò)濾器:
1
<filter>
2
<filter-name>CASFilter</filter-name>
3
<filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
4
<init-param>
5
<param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
6
<param-value>https://localhost:8443/cas/login</param-value>
7
</init-param>
8
<init-param>
9
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
10
<param-value>https://localhost:8443/cas/proxyValidate</param-value>
11
</init-param>
12
<init-param>
13
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
14
<param-value>localhost:8080</param-value>
15
</init-param>
16
</filter>
17
18
<filter-mapping>
19
<filter-name>CASFilter</filter-name>
20
<url-pattern>/servlet/*</url-pattern>
21
</filter-mapping>
22
<filter-mapping>
23
<filter-name>CASFilter</filter-name>
24
<url-pattern>/*</url-pattern>
25
</filter-mapping>
26
6、啟動(dòng)tomcat !,CAS.war文件被自動(dòng)在webapps下釋放出CAS目錄
最后,如果配置成功,進(jìn)入
https://localhost:8443/servlets-examples, 被自動(dòng)轉(zhuǎn)發(fā)到CAS的登陸頁(yè)面,在這個(gè)頁(yè)面上隨便填入相同的用戶名和密碼,進(jìn)入到了被轉(zhuǎn)發(fā)的頁(yè)面。
PS:證書(shū)的刪除命令如下
%java_home%\bin\keytool -delete -alias tomcat -keyalg RSA
%java_home%\bin\keytool -delete -keystore %java_home%/jre/lib/security/cacerts