1 安裝
1.1系統配置
以下的軟件環境是必需的:
1. JDK 1.4.2 or higher
2. Tomcat 5.X
1.2 Tomcat 配置,啟用SSL
1. 在要安裝CAS的機器上為Tomcat生成用于SSL通訊的密鑰:
keytool –genkey –alias tomcat –keyalg RSA
這時需要輸入密鑰密碼和其他參數(第一個參數CN必須設置為CAS機器名,本機使用localhost測試),會在用戶目錄中生成.keystore密鑰文件。
2. 導出密鑰文件:
keytool –export –file server.crt –alias tomcat
這時需要輸入上一步設定的密碼,結果會在當前目錄生成server.crt信任狀。
3. 為客戶端的JVM導入密鑰:
keytool –import –keystore $JAVA_HOME\jre\lib\security\cacerts
–file server.crt –alias tomcat
輸入密碼時注意密碼為“changeit”。
4. 修改服務端Tomcat配置文件,啟用SSL。修改$CATALINA_HOME\conf\server.xml,去掉有關SSL的那一段的注釋,需要在connector字段中加入keystorePass="password"(password即為1、2步中的密碼),keystoreFile= "keystorePath"(可以把第一步生成的.keystore復制到$CATALINA_HOME\conf下,這樣keystoreFile= "conf/.keystore")。
5. 重啟Tomcat,測試https://server:8443是否可以訪問(server應換為機器名或IP地址)。
1.3 CAS Server安裝
下載CAS Server 3.0.4,將其中的cas.war復制到$CATALINA_HOME\webapps下,當然現在CAS中的用戶密碼認證Handler是很簡陋的,產品化必須重寫這部分代碼,生成新的cas.jar。這時可以通過訪問https://localhost:8443/cas測試CAS是否成功部署,應看到CAS登陸界面。
1.4 CAS Client 部署
利用Tomcat自帶的servlets-examples ($CATALINA_HOME\webapps\servlets-examples)和jsp-examples($CATALINA_HOME\ webapps\jsp-examples)進行試驗,下載最新版本的Java CAS Client,將casclient.jar復制到這兩個項目的WEB-INF目錄的lib下(需要新建此目錄)。修改兩個項目的WEB-INF\ web.xml,添加如下的過濾器:
<!-- CAS Filters -->
??? <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://server:8443/cas/login</param-value>
??????? </init-param><!--這里的server是服務端的IP-->
??????? <init-param>
??????????? <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
??????????? <param-value>https://serName:8443/cas/proxyValidate</param-value>
??????? </init-param><!--這里的serName是服務端的主機名,而且必須是-->
??????? <init-param>
????????? <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
????????? <param-value>client:port</param-value><!--client:port就是需要CAS需要攔截的地址和端口,一般就是這個TOMCAT所啟動的IP和port-->
??????? </init-param>
??? </filter>
???
??? <filter-mapping>
??????? <filter-name>CASFilter</filter-name>
??????? <url-pattern>/servlet/*</url-pattern><!--這里的設置是針對servlets-examples的,針對jsp-examples設置為/*-->
??? </filter-mapping>
2 測試
重啟Tomcat,定位到servlets-examples,執行任何一個例子都會被重定向到CAS登陸頁;再定位到jsp-examples,也會被重定向到CAS登陸頁;此時登陸(默認的認證Handler只要求username=password,可任意選擇用戶名);登錄后就會進入jsp- examples;繼續定位到servlets-examples,執行任何一個例子也不用再輸入密碼。
補充:
 在多臺機器上部署CAS:這些機器必需在同一個域中;服務器端生成證書,客戶端導入證書(操作見上)。
 PHP客戶端:使用esup-phpcas客戶端,驗證部分php代碼如下:
// import phpCAS lib
include_once('CAS/CAS.php');
// initialize phpCAS
phpCAS::client(CAS_VERSION_2_0,'freeserver.test-toodou.com',8443,'/cas');
// force CAS authentication
phpCAS::forceAuthentication();
// at this step, the user has been authenticated by the CAS server
// and the user's login name can be read with phpCAS::getUser().
// logout if desired
if (isset($_REQUEST['logout'])) {
phpCAS::logout();
}
登錄結束后,CAS服務器會自動重定向回本頁面。
 CAS服務器與數據庫連接:實際環境中我們需要到數據庫驗證用戶有效性,在CAS中配置JDBC連接。
首先,我們需要創建自己的數據庫驗證器,當然也可以使用Jasig提供的cas-server-jdbc.jar,這里我們修改了cas-server- jdbc的源碼滿足自己的需要。并把mysql的jdbc驅動和修改后的jar部署到CAS%/WEB_INF/lib/。
修改 %CAS%/WEB_INF/deployerConfigContext..xml,其中關于驗證器的一段如下:
………………………………..
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
??????????????????????????? <property name="sql" value="select psw from user where username=?" />
??????????????????????????? <property name="dataSource" ref="dataSource" />
??????????????????????? </bean>
??????????????????? </list>
??????????????? </property>
??????? </bean>
??????? <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">
??????????????? <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
??????????????? <property name="url"><value>jdbc:mysql://192.168.1.246:3306/toodou</value></property>
??????????????? <property name="username"><value>username</value></property>
??????????????? <property name="password"><value>********</value></property>
??????? </bean>
 Jmeter測試:根據目前土豆網的登錄流量,我們使用Jmeter對CAS處理性能進行測試,以每分鐘20人次登錄計,得到平均處理時間為21ms,幾次測試中遇到的最長處理時間也僅為78ms。
但當登錄人次達到500/min時,會出現明顯的性能下降,部分登錄請求的處理時間會超過3000ms。
1.1系統配置
以下的軟件環境是必需的:
1. JDK 1.4.2 or higher
2. Tomcat 5.X
1.2 Tomcat 配置,啟用SSL
1. 在要安裝CAS的機器上為Tomcat生成用于SSL通訊的密鑰:
keytool –genkey –alias tomcat –keyalg RSA
這時需要輸入密鑰密碼和其他參數(第一個參數CN必須設置為CAS機器名,本機使用localhost測試),會在用戶目錄中生成.keystore密鑰文件。
2. 導出密鑰文件:
keytool –export –file server.crt –alias tomcat
這時需要輸入上一步設定的密碼,結果會在當前目錄生成server.crt信任狀。
3. 為客戶端的JVM導入密鑰:
keytool –import –keystore $JAVA_HOME\jre\lib\security\cacerts
–file server.crt –alias tomcat
輸入密碼時注意密碼為“changeit”。
4. 修改服務端Tomcat配置文件,啟用SSL。修改$CATALINA_HOME\conf\server.xml,去掉有關SSL的那一段的注釋,需要在connector字段中加入keystorePass="password"(password即為1、2步中的密碼),keystoreFile= "keystorePath"(可以把第一步生成的.keystore復制到$CATALINA_HOME\conf下,這樣keystoreFile= "conf/.keystore")。
5. 重啟Tomcat,測試https://server:8443是否可以訪問(server應換為機器名或IP地址)。
1.3 CAS Server安裝
下載CAS Server 3.0.4,將其中的cas.war復制到$CATALINA_HOME\webapps下,當然現在CAS中的用戶密碼認證Handler是很簡陋的,產品化必須重寫這部分代碼,生成新的cas.jar。這時可以通過訪問https://localhost:8443/cas測試CAS是否成功部署,應看到CAS登陸界面。
1.4 CAS Client 部署
利用Tomcat自帶的servlets-examples ($CATALINA_HOME\webapps\servlets-examples)和jsp-examples($CATALINA_HOME\ webapps\jsp-examples)進行試驗,下載最新版本的Java CAS Client,將casclient.jar復制到這兩個項目的WEB-INF目錄的lib下(需要新建此目錄)。修改兩個項目的WEB-INF\ web.xml,添加如下的過濾器:
<!-- CAS Filters -->
??? <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://server:8443/cas/login</param-value>
??????? </init-param><!--這里的server是服務端的IP-->
??????? <init-param>
??????????? <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
??????????? <param-value>https://serName:8443/cas/proxyValidate</param-value>
??????? </init-param><!--這里的serName是服務端的主機名,而且必須是-->
??????? <init-param>
????????? <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
????????? <param-value>client:port</param-value><!--client:port就是需要CAS需要攔截的地址和端口,一般就是這個TOMCAT所啟動的IP和port-->
??????? </init-param>
??? </filter>
???
??? <filter-mapping>
??????? <filter-name>CASFilter</filter-name>
??????? <url-pattern>/servlet/*</url-pattern><!--這里的設置是針對servlets-examples的,針對jsp-examples設置為/*-->
??? </filter-mapping>
2 測試
重啟Tomcat,定位到servlets-examples,執行任何一個例子都會被重定向到CAS登陸頁;再定位到jsp-examples,也會被重定向到CAS登陸頁;此時登陸(默認的認證Handler只要求username=password,可任意選擇用戶名);登錄后就會進入jsp- examples;繼續定位到servlets-examples,執行任何一個例子也不用再輸入密碼。
補充:
 在多臺機器上部署CAS:這些機器必需在同一個域中;服務器端生成證書,客戶端導入證書(操作見上)。
 PHP客戶端:使用esup-phpcas客戶端,驗證部分php代碼如下:
// import phpCAS lib
include_once('CAS/CAS.php');
// initialize phpCAS
phpCAS::client(CAS_VERSION_2_0,'freeserver.test-toodou.com',8443,'/cas');
// force CAS authentication
phpCAS::forceAuthentication();
// at this step, the user has been authenticated by the CAS server
// and the user's login name can be read with phpCAS::getUser().
// logout if desired
if (isset($_REQUEST['logout'])) {
phpCAS::logout();
}
登錄結束后,CAS服務器會自動重定向回本頁面。
 CAS服務器與數據庫連接:實際環境中我們需要到數據庫驗證用戶有效性,在CAS中配置JDBC連接。
首先,我們需要創建自己的數據庫驗證器,當然也可以使用Jasig提供的cas-server-jdbc.jar,這里我們修改了cas-server- jdbc的源碼滿足自己的需要。并把mysql的jdbc驅動和修改后的jar部署到CAS%/WEB_INF/lib/。
修改 %CAS%/WEB_INF/deployerConfigContext..xml,其中關于驗證器的一段如下:
………………………………..
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
??????????????????????????? <property name="sql" value="select psw from user where username=?" />
??????????????????????????? <property name="dataSource" ref="dataSource" />
??????????????????????? </bean>
??????????????????? </list>
??????????????? </property>
??????? </bean>
??????? <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">
??????????????? <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
??????????????? <property name="url"><value>jdbc:mysql://192.168.1.246:3306/toodou</value></property>
??????????????? <property name="username"><value>username</value></property>
??????????????? <property name="password"><value>********</value></property>
??????? </bean>
 Jmeter測試:根據目前土豆網的登錄流量,我們使用Jmeter對CAS處理性能進行測試,以每分鐘20人次登錄計,得到平均處理時間為21ms,幾次測試中遇到的最長處理時間也僅為78ms。
但當登錄人次達到500/min時,會出現明顯的性能下降,部分登錄請求的處理時間會超過3000ms。
我現在正在測試CAS的配置,在Tomcat5.0.28上已經配置成功,可是按照一樣的步驟,在Tomcat5.5.17上配置,到通過servlets-examples驗證CAS時,出現如下的錯誤信息,不知道應該如何解決?
HTTP Status 500 -
--------------------------------------------------------------------------------
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Unable to validate ProxyTicketValidator [[edu.yale.its.tp.cas.client.ProxyTicketValidator proxyList=[null] [edu.yale.its.tp.cas.client.ServiceTicketValidator casValidateUrl=[https://xufei:8443/cas/proxyValidate">https://xufei:8443/cas/proxyValidate] ticket=[ST-3-RLKbX9pEFENCGAJqVUuK7MFGeVYy4VQLe2e-20] service=[http%3A%2F%2F202.117.11.116%3A8080%2Fservlets-examples%2Fservlet%2FHelloWorldExample] renew=false]]]
edu.yale.its.tp.cas.client.filter.CASFilter.doFilter(CASFilter.java:381)
filters.ExampleFilter.doFilter(ExampleFilter.java:101)
root cause
edu.yale.its.tp.cas.client.CASAuthenticationException: Unable to validate ProxyTicketValidator [[edu.yale.its.tp.cas.client.ProxyTicketValidator proxyList=[null] [edu.yale.its.tp.cas.client.ServiceTicketValidator casValidateUrl=[https://xufei:8443/cas/proxyValidate">https://xufei:8443/cas/proxyValidate] ticket=[ST-3-RLKbX9pEFENCGAJqVUuK7MFGeVYy4VQLe2e-20] service=[http%3A%2F%2F202.117.11.116%3A8080%2Fservlets-examples%2Fservlet%2FHelloWorldExample] renew=false]]]
edu.yale.its.tp.cas.client.CASReceipt.getReceipt(CASReceipt.java:52)
edu.yale.its.tp.cas.client.filter.CASFilter.getAuthenticatedUser(CASFilter.java:455)
edu.yale.its.tp.cas.client.filter.CASFilter.doFilter(CASFilter.java:378)
filters.ExampleFilter.doFilter(ExampleFilter.java:101)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.17 logs.
--------------
不知道樓主有沒有碰到過,先謝謝了!
快被CAS搞瘋了,在Tomcat5.5.17上就是不成功,驗證已經通過了,返回頁面的時候出錯。
無論如何,謝謝了!
這個問題可能是在keytool -import 時指定的cacerts和tomcat實際使用的不一樣。例如,你可能import到jre的cacerts,但是tomcat是用jdk運行的。
所以換一下Tomcat,使用bat啟動,或是將server.crt生成到jre1.5.0_02目錄下
所以換一下Tomcat,使用bat啟動,或是將server.crt生成到jre1.5.0_02目錄下
所以換一下Tomcat,使用bat啟動,或是將server.crt生成到jre1.5.0_02目錄下
主要原因就是jdk開發環境和運行環境區別
3. 為客戶端的JVM導入密鑰:
這一步時提示我:
信任這個認證? [否]: y
認證已添加至keystore中
keytool錯誤: java.io.FileNotFoundException: $JAVA_HOME\jre\lib\security\cacerts
(系統找不到指定的路徑。)
請問這是什么原因,謝謝
u78olkouh854rjig4k4jfk85jd441rk45di tpnj90hri9tggtjkuyi
這個我也遇到了,我用tomcat5.5.16,怎么都不行。后來換了5.0.30,完全OK,我想可能是5.5的里面某個jar包和cas的起了沖突,導致驗證失敗,至于問題到底在哪里,還需要找個時間專門研究一下。
JAVA_HOME中包括了空格(例如:C:\Programe Files\Java\....)