今天花了一個下午的時間,終于完成的cas配置的一次完整的運行。cas前世今生我就不介紹了,有興趣的朋友谷歌或是百度一下就可以有很詳細的了解了,重點記錄一下今天的配置過程和遇到的問題及解決方法。
環境:瀏覽器(ie6.0,windows xp)
cas server 在一臺Linux服務器,cas client在另外一臺linux服務器
應用服務器為tomcat5.5.26
初步的配置實用過程參考了http://www.tkk7.com/yida/archive/2007/04/03/55466.html的描述,各位亦可以訪問阿木的blog。整理如下:
1.請下載到cas的官方網站下載cas-server(我用的是3.2)和cas-client(2.0.11),tomcat5.5.26
cas的官方網站:http://www.ja-sig.org/products/cas/
2.安裝cas-server,我們假定安裝cas-server的服務器為server1
(1)請在server1服務器上安裝好jdk1.5或以上版本的jdk,tomcat5.5.26,并配置環境變量JAVA_HOME
(2)將cas-server-3.2-release.zip解壓,將moudels目錄下cas-server-webapp-3.2.war拷貝到tomcat的webapps目錄下,修 改名稱為cas.war.
(3)生成server1的安全證書:
keytool -genkey -alias my-alias-name -keyalg RSA -keystore keystore-file
(4)在server1配置https
在$CATALINA_HOME/conf/server.xml里修改為一下配置
<Connector port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="/path/keystore-file" keystorePass="your-password"
/>
(5)導出server1的證書,用來給所有需要用到的客戶端導入
keytool -export -file myserver.cert -alias my-alias-name -keystore keystore-file
(6)將導出的證書上傳的client1服務器上。
(7)啟動server1上的tomcat,檢驗cas配置是否成功,訪問http://ip:8443/cas/login,如果能看到cas的登錄頁面則表示配 置成功。
3.配置 cas-client,我們以tomcat下自帶的servlet-example為例子進行說明
(1)請在client1服務器上安裝好jdk1.5或以上版本的jdk,tomcat5.5.26,并配置環境變量JAVA_HOME
(2)將cas-client-2.0.11.zip解壓,把java/lib/casclient.jar拷貝到client1服務器上的
webapps/servlets-examples/WEB-INF/lib目錄下(如果沒有就建一個)
(3)在要使用CAS的客戶端client1里設置(以servlets-examples這個APP為例),我們使用ServletFilter(CAS client里提供 的)來實現SSO的檢查,修改servlets-examples/WEB-INF/web.xml,添加以下內容:
<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://your.cas.server.name(eg:server1):port/cas/login</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<param-value>https://your.cas.server.name(eg:server1):port/cas/proxyValidate</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>your.client.server.name(eg:client1):port</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
(4)在客戶端的JVM里導入信任的SERVER的證書(根據情況有可能需要管理員權限)
keytool -import -keystore $JAVA_HOME/jre/lib/security/cacerts -file myserver.cert -alias my-alias-name
此時需要輸入密碼,默認密碼為changeit
通過以上配置,基本完成cas-server和cas-client的配置,但是還有以下問題需要注意和解決
由于cas的證書需要域名才能正確的進行認證信息的交互,不支持ip,如果server和client在同一臺機器上,可以使用localhost,如果像我們上面描述的三臺服務器這樣的環境,使用localhost或者ip是不能正常運行的。如果使用ip,運行時會拋出 HTTPS hostname wrong 的錯誤,解決的方法如下:
假設server1的ip為:192.168.10.1,client1的ip為192.168.10.2,開發機器(xp)的ip為:192.168.10.3
在server1和client1上設置本機的域名映射:
vi /etc/hosts 添加以下行
192.168.10.1 cas.server
在開發機器(xp)下,在C:\WINDOWS\system32\drivers\etc目錄下,編輯hosts文件,添加以下行
192.168.10.1 cas.server
重新生成cas-sever的服務器端的證書,在開始問“你的名字”或“DName”的時候,必須填寫你服務器所在域名(cas.server)
然后重新到處服務器器端的證書,并將其導入到client1服務器的jvm
最后修改修改servlets-examples/WEB-INF/web.xml中關于cas過濾器的配置:請將your.cas.server.name(eg:server1)修改為cas.server即可。重新啟動server1和client1的服務器上的tomcat就可正常運行。
ttp://client1:8080/servlets-examples/servlet/HelloWorldExample
系統會自動跳轉到一個驗證頁面,隨便輸入一個相同的賬號,密碼,嚴正通過之后就會訪問
到真正的HelloWorldExample這個servlet了
posted on 2008-03-25 18:05
雪地孤鴻 閱讀(4731)
評論(0) 編輯 收藏 所屬分類:
sso