術語:css
CAS(Central Authentication Service)
TGT(Ticket Granting Ticket)
ST(Service Ticket)
PGT(Proxy Granting Ticket)html
從結構上看,CAS 包含兩個部分: CAS Server 和 CAS Client。CAS Server 須要獨立部署,主要負責對用戶的認證工做;CAS Client 負責處理對客戶端受保護資源的訪問請求,須要登陸時,重定向到 CAS Server。圖1 是 CAS 最基本的協議過程:java
圖 1. CAS 基礎協議web
複雜的應用場景,具體介紹能夠參考 CAS 官方網站上的相關文檔。apache
一、 客戶端介質cas-client-java-2.1.1.zipapi
二、 服務端介質cas-server-3.3.3-release.zip瀏覽器
三、 Tomcat6.0緩存
四、 JDK6.0tomcat
(1) JDK環境變量配置:安全
若是你的JDK安裝在C盤裏,如:C:\j2sdk1.4.2_05,那麼就在系統變量裏(固然也能夠在用戶變量裏)點新建:
變量名:JAVA_HOME
變量值:C:\j2sdk1.4.2_05
再次點新建:
變量名:classpath
變量值:.;%JAVA_HOME%\lib\dt.jar;
並在path里加入 .;%JAVA_HOME%\bin;
測試:
啓動:運行cmd
Dos命令下分別輸入Java和JavaC後回車
(2) Tomcat環境變量配置:
若是你的Tomcat安裝在C盤裏,如:F:\Tomcat50(在這裏切記一下,安裝Tomcat時,在其字母周圍
必定不要存在空格,不然最後可能致使配置不成功)
一樣,在系統變量裏點新建:
變量名:CATALINA_BASE
變量值:C:\apache-tomcat-6.0.18\apache-tomcat-6.0.18
再次新建:
變量名:CATALINA_HOME
變量值:C:\apache-tomcat-6.0.18\apache-tomcat-6.0.18
點擊肯定後在classpath中加入%CATALINA_HOME%\common\lib\servlet-api.jar;
在path中加入%CATALINA_HOME%\lib;
測試:
進入%CATALINA_HOME%bin
運行startup.bat
背景:做爲服務機與客戶機通訊的協議
步驟:
3.1生成keystore
在命令行下使用以下命令:
C:\Documents and Settings\administrator>keytool -genkey -alias mykey -keyalg RSA -keystore server.keystore
輸入keystore密碼:123456
再次輸入新密碼:123456
您的名字與姓氏是什麼?
[Unknown]: 主機名或者IP最好是作了host映射的主機名
您的組織單位名稱是什麼?
[Unknown]: capinfo
您的組織名稱是什麼?
[Unknown]: capinfo
您所在的城市或區域名稱是什麼?
[Unknown]: beijing
您所在的州或省份名稱是什麼?
[Unknown]: beijing
該單位的兩字母國家代碼是什麼
[Unknown]: cn
CN=fengqingyu, OU=capinfo software ltd., O=capinfo, L=beijing, ST=beijing, C=cn 正確嗎?
[否]: y
輸入<mykey>的主密碼
(若是和 keystore 密碼相同,按回車):
在C:\Documents and Settings\new下能夠找到一個文件:server.keystore,其中就包含了自簽名的證書。
注意:
這裏要求certificate keystore 和certificate的密碼一致,此爲Tomcat的約束。
3.2添加keystore目錄
在%TOMCAT_HOME%目錄下新建目錄keystore,並拷貝server.keystore到其目錄下。
3.3修改配置文件
修改%TOMCAT_HOME%/conf/server.xml文件。添加https的Connector。
<Connector
port="8443" minSpareThreads="5" maxSpareThreads="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="keystore/server.keystore" keystorePass="123456"
clientAuth="false" sslProtocol="TLS"/>
注意:
1)keystoreFile指向文件%TOMCAT_HOME%/keystore/server.keystore文件。
2)keystorePass就是剛纔生成certificate keystore的密碼。
3)測試Https。訪問https://localhost:8443/,提示有不安全的證書,接受證書,看到可親的tom貓
4)訪問的時候localhost最好換成你的主機名。
至此SSL協議配置結束。
4.1 CAS在tomcat上的發佈
1)將下載的cas-server-3.3.3-release.zip解壓
2)將解壓包內的modules文件夾下的cas-server-webapp-3.3.3.war 拷貝到 tomcat的webapps 目錄,並改名爲 cas.war
能夠從新啓動 tomcat,而後訪問:https://localhost:8443/cas ,若是能出現正常的 CAS登陸頁面,則說明 CAS Server 已經部署成功。
一、 配置客戶端服務器的HTTPS協議方法同服務端。
二、 客戶端的安裝
1) 將cas-client-java-2.1.1.zip解壓並將\cas-client-java-2.1.1\dist下的casclient.jar拷貝到你所要應用的項目的WEB-INF\lib目錄下
2) 將\cas-client-java-2.1.1\lib下的全部包copy到WEB-INF\lib目錄下
三、 密鑰的交換。
1) 服務端密鑰的導出
C:\Documents and Settings\administrator>keytool -export -file client.cert -alias mykey -keystore server.keystore
2) 客戶端密鑰的導入
將導出的client.cert密鑰copy到客戶端機器上在客戶端機器上運行
keytool -import -trustcacerts -file client.cert -keypass changeit -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -alias mykey1
注意:
導入的部位是
JAVA_HOME的jre目錄下,不是跟jdk同級的jre目錄
例如: C:/Program Files/Java/jdk1.6.0_03/jre/lib/security/cacerts
四、 配置文件的修改
1) 修改webapps\examples\WEB-INF\web.xml,加入servlet filter實現SSO檢查。
注:該web.xml爲你要加入SSO功能的項目下的web.xml文件,本示例爲使用tomcat下自帶的example項目
<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://cas02.com.cn:8443/cas/login</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<param-value>https://cas02.com.cn:8443/cas/proxyValidate</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>cas02.com.cn:8080</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.wrapRequest</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
注意:本測試案例的服務端與客戶端在同臺機器下因此地址欄中全使用了同一主機名,如客戶機與服務機在不一樣機器上,則第一二兩個表紅色的主機名要換成服務機的主機名,第三個標藍色的主機名爲客戶機的主機名。
1)經過IE訪問http://主機名:8080後進入TOMCAT頁面後選擇example會跳轉到CAS得登陸面輸入相同的用戶名密碼進入example的登陸後頁面,至此該簡單的SSO結束
CAS Client 與受保護的客戶端應用部署在一塊兒,以 Filter 方式保護受保護的資源。對於訪問受保護資源的每一個 Web 請求,CAS Client 會分析該請求的 Http 請求中是否包含 Service Ticket,若是沒有,則說明當前用戶還沒有登陸,因而將請求重定向到指定好的 CAS Server 登陸地址,並傳遞 Service (也就是要訪問的目的資源地址),以便登陸成功事後轉回該地址。用戶在第 3 步中輸入認證信息,若是登陸成功,CAS Server 隨機產生一個至關長度、惟1、不可僞造的 Service Ticket,並緩存以待未來驗證,以後系統自動重定向到 Service 所在地址,併爲客戶端瀏覽器設置一個 Ticket Granted Cookie(TGC),CAS Client 在拿到 Service 和新產生的 Ticket 事後,在第5,6 步中與 CAS Server 進行身份合適,以確保 Service Ticket 的合法性。
在該協議中,全部與 CAS 的交互均採用 SSL 協議,確保,ST 和 TGC 的安全性。協議工做過程當中會有 2 次重定向的過程,可是 CAS Client 與 CAS Server 之間進行Ticket 驗證的過程對於用戶是透明的。
另外,CAS 協議中還提供了 Proxy (代理)模式,以適應更加高級、複雜的應用場景,具體介紹能夠參考 CAS 官方網站上的相關文檔。