天天看點

在Tomcat中使用Yale CAS實作單點登陸(SSO)

Tomcat 中使用 Yale CAS 實作單點登陸 (SSO)

耶魯大學開發的單點登入系統稱為CAS(Central Authentication Server)被設計成一個獨立的Web應用程式(cas.war)。它目前用幾個Java Servlet作為實作并且通過一個Https伺服器來運作。要使用單點登陸功能的Web應用作為CAS的一個用戶端來運作。

由于CAS使用Https協定,是以首先要知道如何在容器中配置SSL。Tomcat的SSL配置相對其它的容器較為簡單,SSL配置完成後CAS伺服器一般都能正常運作了。

CAS的用戶端以一個Web應用的Filter運作。當Web應用的某個功能被請求時,Filter就會攔截應用的URL,進而迫使使用者到CAS伺服器進行登陸。在所有不同的Web應用中,使用同一個CAS伺服器進行登陸,即可達到單點登陸之目的。

本文使用同一個Tomcat(版本Tomcat5.0.30)配置CAS伺服器及用戶端,分别在8443端口及8080端口。下面是在Tomcat中使用Yale CAS實作單點登陸的詳細步驟:

1.  安裝CAS伺服器

1.1.  下載下傳CAS發行包,下載下傳位址:

CAS伺服器:http://www.yale.edu/tp/cas/cas-server-2.0.12.zip 或

https://clearinghouse.ja-sig.org/wiki/download/attachments/924/cas-server-2.0.12.zip

CAS用戶端:http://www.yale.edu/tp/cas/cas-client-2.0.11.zip 或

https://clearinghouse.ja-sig.org/wiki/download/attachments/827/cas-client-2.0.11.zip

1.2.     将cas-server-2.0.12.zip解壓,并将lib/cas.war拷貝到Tomcat的webapps下,測試CAS伺服器是否釋出正常,可以通路http://localhost:8080/cas/login 出現登陸視窗。輸入使用者名密碼(使用者名=密碼),出現登陸成功頁面說明釋出正常。

2.   配置Tomcat使用https協定

2.1.     使用Java自帶的keytool指令,産生SERVER的證書

D

:

/> keytool -genkey -alias my-alias-name -keyalg RSA -keystore keystore-file

其中my-alias-name為别名,這行指令的作用是産生一個新的公共/私有鑰匙對。keystore-file為存儲鑰匙和證書的檔案。

指令運作後,根據提示回答。

注意在開始問“你的名字”或“DName”的時候,必須填寫你伺服器所在域名(在區域網路中測試時,使用主機名或hosts檔案中注冊的域名,本機可以使用localhost)。

2.2.     在Tomcat的8443端口配置SSL

在Tomcat_Path/conf/server.xml檔案中配置SSL的地方,增加如下配置:

    <Connector className="org.apache.coyote.tomcat5.CoyoteConnector"

    port="8443" minProcessors="5" maxProcessors="75"

    enableLookups="true" disableUploadTimeout="true"

    acceptCount="100" debug="0" scheme="https"

    secure="true">

    <Factory className="org.apache.coyote.tomcat5.CoyoteServerSocketFactory"

    keystoreFile="D:/keystore-file"

    keystorePass="password" clientAuth="false" protocol="TLS" />

    </Connector>

其中,keystoreFile使用絕對路徑,keystorePass為第3點輸入的keystore密碼。配置完成後,啟動Tomcat,通路https://localhost:8443 ,通路成功說明SSL配置成功。也可以通路https://localhost:8443/cas/login 。

3.      配置 CAS用戶端

以Tomcat中自帶的Servlet examples應用為例,在Web應用中使用配置CAS用戶端。

3.1.        在Servlet examples應用裡配置CAS用戶端,需修改servlets-examples/WEB-INF/web.xml,在web.xml檔案中,加入如下Filter配置:

    <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://localhost:8443/cas/login</param-value>

        </init-param>

        <init-param>

        <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>

        <param-value>https://localhost:8443/cas/proxyValidate</param-value>

        </init-param>

        <init-param>         <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>

            <param-value>localhost:8080</param-value>

        </init-param>

    </filter>

    <filter-mapping>

        <filter-name>CASFilter</filter-name>

        <url-pattern>/servlet/*</url-pattern>

    </filter-mapping>

其中,第一,二個localhost都改成CAS伺服器域名或主機名,第三個改成你servelt example應用域名或主機名,由于本文中CAS伺服器與用戶端在同一主機同一Tomcat上,是以都為localhost。若不在同一主機,則分别使用兩主機的域名或主機名。

3.2.     将cas-client-2.0.11.zip解壓,把java/lib/casclient.jar拷貝到Tomcat的

webapps/servlets-examples/WEB-INF/lib目錄下(如果沒有就建一個)

3.3.     導出SERVER的證書,用來給所有需要用到的用戶端導入

D:/> keytool -export -file myserver.cert -alias my-alias-name -keystore keystore-file

3.4.     在用戶端的JVM裡導入信任的SERVER的證書,輸入keystore密碼時,注意現在的keystore為cacerts,而cacerts的初密碼為changeit,而不是前面keystore-file的密碼,是以要是沒有改過cacerts密碼應該輸入changeit.

D:/> keytool -import -keystore $JAVA_HOME/jre/lib/security/cacerts -file myserver.cert -alias my-alias-name

其中,$JAVA_HOME改成JDK的絕對路徑。

4.        

測試SSO

啟動Tomcat,通路http://localhost:8080/servlets-examples/ ,随便執行一個servlet,系統會自動跳轉到一個驗證頁面,随便輸入一個相同的賬号,密碼,認證通過之後,就會通路到你點選的servlet了。