调试了一上午,搞定了,这里做个记录。
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了,即我们通常意义上的应用服务器。