参考文档:
cas证书登录好文
采用证书认证的逻辑,简单的可以X509CredentialsAuthenticationHandler完成,认证通过后,直接跳转回客户端,不会在服务端的某个页面停留。
1、版本
jdk:1.8
tomcat 7.0.39
服务端:cas-server 3.4.1
客户端:cas-client 3.4.1
2、tomcat 双向认证配置
只需要在cas-server端配置https,cas-client仍可采用http链接方式
tomcat 7.0.39 双向认证生效配置如下:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS"
keystoreFile="C:/temp/tomcat.keystore" keystorePass="password"
truststoreFile="C:/temp/tomcat.keystore" truststorePass="password"/>
参考如下链接:
证书相关的命令如下:
keytool -genkey -v -alias tomcat -keyalg RSA -keystore F:\cas\keystore\tomcat.keystore -validity 36500
keytool -keystore F:\cas\keystore\tomcat.keystore -export -alias tomcat -file F:\cas\keystore\tomcat.cer
keytool -genkey -v -alias mykey -keyalg RSA -storetype PKCS12 -keystore F:\cas\keystore\client.key.p12
keytool -export -alias mykey -keystore F:\cas\keystore\client.key.p12 -storetype PKCS12 -storepass password -rfc -file F:\cas\keystore\client.key.cer
keytool -import -v -file F:\cas\keystore\client.key.cer -keystore F:\cas\keystore\tomcat.keystore
keytool -import -keystore %JAVA_HOME%/jre/lib/security/cacerts -file F:\cas\keystore\tomcat.cer -alias tomcat
keytool -import -keystore %JAVA_HOME%/jre/lib/security/cacerts -file F:\cas\keystore\client.key.cer -alias mykey
注意:
1)双向认证时,各个浏览器各有差异,采用谷歌浏览器比较好,每次都弹出证书选择框;
2)创建服务器证书时,dn要和url的域名保持一致(个人的理解,有待验证);
3)%JAVA_HOME%/jre/lib/security/cacerts有时需要删掉重建(unable to find valid certification path to requested target)
3、安装测试:
1)客户端出现No principal was found问题,参考如下链接中的第三种方法,解决了此问题:
a)client端web.xml中配置:
<filter>
<filter-name>CAS Validation Filter</filter-name>
<filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
<!--<filter-class>org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter</filter-class>-->
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value>https://localhost:8443/cas-server</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://localhost:7080</param-value>
</init-param>
<init-param>
<param-name>redirectAfterValidation</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>useSession</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>authn_method</param-name>
<param-value>mfa-duo</param-value>
</init-param>
</filter>
b)server端casServiceValidationSuccess.jsp中
<%@ page session="false" contentType="application/xml;charset=utf-8" %>
2)cas-server端关键配置:
注意多个Authentication Handler和Principal Resolver的配置会把逻辑搞乱,只保留x.509相关的,如果多个并存的话,x.509应该放到第一位
a)login-webflow.xml
<decision-state id="gatewayRequestCheck">
<if test="externalContext.requestParameterMap['gateway'] neq '' && externalContext.requestParameterMap['gateway'] neq null && flowScope.service neq null" then="redirect" else="startAuthenticate" />
</decision-state>
<decision-state id="renewRequestCheck">
<if test="externalContext.requestParameterMap['renew'] neq '' && externalContext.requestParameterMap['renew'] neq null" then="startAuthenticate" else="generateServiceTicket" />
</decision-state>
<action-state id="startAuthenticate">
<evaluate expression="x509Check" />
<transition on="success" to="sendTicketGrantingTicket" />
<transition on="warn" to="warn" />
<transition on="error" to="viewLoginForm" />
</action-state>
b)cas-servlet.xml
<bean
id="x509Check"
p:centralAuthenticationService-ref="centralAuthenticationService"
class="org.jasig.cas.adaptors.x509.web.flow.X509CertificateCredentialsNonInteractiveAction" >
<property name="centralAuthenticationService" ref="centralAuthenticationService"/>
</bean>
c)deployerConfigContext.xml
<property name="credentialsToPrincipalResolvers">
<list>
<bean
class="org.jasig.cas.adaptors.x509.authentication.principal.X509CertificateCredentialsToIdentifierPrincipalResolver">
<property name="identifier" value="$OU $CN" />
</bean>
</list>
</property>
<property name="authenticationHandlers">
<list>
<bean
class="org.jasig.cas.adaptors.x509.authentication.handler.support.X509CredentialsAuthenticationHandler">
<property name="trustedIssuerDnPattern" value="CN=mykey.+" />
</bean>
</list>
</property>
</bean>
上述trustedIssuerDnPattern按实际情况调整,此属性为必输项
3)最后一个问题,cas服务端验证完毕,转向cas客户端时报如下异常:
java.lang.RuntimeException: java.net.SocketException: Software caused connection abort: recv failed org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:341) org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:305) org.jasig.cas.client.validation.AbstractCasProtocolUrlBasedTicketValidator.retrieveResponseFromServer(AbstractCasProtocolUrlBasedTicketValidator.java:50) org.jasig.cas.client.validation.AbstractUrlBasedTicketValidator.validate(AbstractUrlBasedTicketValidator.java:207) org.jasig.cas.client.validation.AbstractTicketValidationFilter.doFilter(AbstractTicketValidationFilter.java:169) org.jasig.cas.client.session.SingleSignOutFilter.doFilter(SingleSignOutFilter.java:76)
此问题费尽周折,最后查明原因 cas-server端的tomcat中的配置 clientAuth="true",改成 clientAuth="want",ticket验证时,不传递客户端证书,改成want就不报错了。
相关推荐
"cas-server-3.4.2.1-release" 是一个特定版本的 CAS(Central Authentication Service)服务器软件包。CAS 是一个开源的身份验证框架,主要用于实现单一登录(Single Sign-On, SSO)服务,广泛应用于教育、研究和...
标题 "cas-server-3.4.3.1-release.zip" 提供的信息是关于CAS服务器的一个特定版本,即3.4.3.1的发布压缩包。CAS(Central Authentication Service)是一种广泛使用的开源单点登录(Single Sign-On, SSO)框架,它...
cas-server-3.4.2.1和cas-client-3.3.3 有需要的拿去, 来自 http://developer.jasig.org/cas/ 但是下载速度及慢, 我下了里面的最新版本, 有需要的拿去
综上所述,"cas-server-3.5.2.1-release.zip" 包含了实现单点登录服务所需的所有组件和配置,是构建和管理企业级SSO解决方案的关键。解压并部署这个包后,你可以根据组织需求进行定制和配置,实现跨应用的统一身份...
Yelu大学研发的CAS(Central Authentication Server) , 单点登录服务器 , 将war包放置到tomcat/webapp中即可运行
cas-client-core-3.4.1.jar
cas-server-webapp-3.3.3.war改名为cas.war部署到web服务器,作为单点登录的服务器。
cas-client-core-3.3.3.jar放到客户端lib文件夹下就ok
可用 cas-client-core-3.1.10.jar
标题中的“IntelCAS_x64-3.2.2.64_entry.rar”指的是Intel的Cache Acceleration Software(CAS)的64位版本,具体为3.2.2.64版的安装程序。这个软件是Intel推出的一种智能缓存解决方案,主要目的是提升基于Intel ...
cas-server-webapp-6.1.x.war Yelu大学研发的CAS(Central Authentication Server) , 单点登录服务器 , 将war包放置到tomcat/webapp中即可运行
cas-server-jdbc-3.0.5-rc2.jar
cas-client-core-3.2.1.jar,所需jar包放tomcat7.0.32\webapps\examples\WEB-INF\lib下
单点登录 sso cas带超详细文档,包含(cas-server-webapp-4.0.0.war、c3p0-0.9.1.2.jar、cas-client-core-3.3.3.jar、cas-server-support-jdbc-4.0.0.jar、cas-server-webapp-support-4.0.0.jar、commons-logging-...
开发者在使用 "cas-client-3.1.12-release.zip" 时,应首先阅读官方文档,理解新版本的变更和改进,然后根据项目需求进行适当的配置和集成。在部署过程中,务必注意对安全性和性能的考量,以及对可能出现的问题进行...
解压"cas-server-3.3.3-release.zip"后,我们可以看到包含以下关键文件和目录: - `bin`:存放启动和停止服务器的脚本。 - `conf`:包含CAS服务器的核心配置文件,如`cas.properties`、`deployerConfigContext.xml`...
shiro-all-1.7.1.jar,shiro-aspectj-1.7.1.jar,shiro-cache-1.7.1.jar,shiro-config-core-1.7.1.jar,shiro-config-ogdl-1.7.1.jar,shiro-core-1.7.1.jar,shiro-crypto-cipher-1.7.1.jar,shiro-crypto-core-1.7.1.jar...
cas server解包,在modules子目录下面有一个cas-server-webapp-3.3.war的文件,用压缩软件将其打开,解压到cas目录中,拷贝到tomcat的webapps目录之下。
在`cas-client-3.1.6`中,可能包含以下关键组件和文件: 1. **cas-client-support-spring.jar**:这是针对Spring框架的CAS客户端支持库,用于在Spring应用上下文中配置CAS。 2. **cas-client-core.jar**:CAS客户端...