調試了一上午,搞定了,這裏做個記錄。
1.錯誤:unable to find valid certification path to requested target
這個錯誤是說找不到證書,而很多人都確認自己確實導入了證書,我也是。這就可以從下面兩點去排錯:
- 如果你更新了cas server的證書信息,那麼請重啓cas server,不然無論你在client端怎麼處理,它還是報這個錯;
- 確保你使用keytool 命令import的路徑是eclipse所使用的jre中,很多電腦中有多個jre,自己要確保你導入的確實是eclipse所使用的那個jre中;
2。錯誤:No subject alternative names present
這個錯誤是我們導入了證書,但是這個證書卻不能被正確的識別。這就要回到我們在使用keytool 命令genkey的時候了,命令如下:
keytool -genkey -alias tomcat -keyalg RSA -keystore d:\cskeys -dname -storepass changeit
然後提示我們要輸CN 城市,國家等等信息,這裏最重要的是CN這個值,經我的實驗,這個值不要使用IP地址也不要使用localhost(如果你僅僅是在本機測試那可以),推薦使用域名(可是一般人沒有),那就使用主機名,我使用主機名一切工作正常。
關於cas client端的配置文件的說明,常用的配置文件如下(指的是涉及到地址的配置):
<filter>
<filter-name>CASFilter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>https://hfut:8443/cas/login</param-value>
<!--這裏的server是服務端的IP -->
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://acer:8080/</param-value><!--注意:這裏使用的一定是cas client的地址,這也是cas server返回的地址>
</init-param>
</filter>
<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 該過濾器負責對Ticket的校驗工作,必須啓用它 -->
<filter>
<filter-name>CAS Validation Filter</filter-name>
<filter-class>
org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value>https://hfut:8443/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://acer:8080/</param-value><!--同上-->
</init-param>
</filter>
上面兩處最重要的地方就是serverName的值了,這個值是cas server認證成功後返回的值,所以這裏一定要設置成你的應用的地址,級cas client的地址。
ps:區別下cas server和cas client。
cas server不用說,大家都很清楚,關鍵是這個cas client,特別注意,這個client是針對cas server說的。而實際上,cas client是集成到某個應用服務器的,也就是說它是被cas server認證的應用,只有通過了cas server的認證,這個應用(即client)就可以被訪問了。這個client對用戶而言就是server了,即我們通常意義上的應用服務器。