参考文档:
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就不报错了。
相关推荐
22.2. 把X.509认证添加到你的web系统中 22.3. 为tomcat配置SSL 23. 替换验证身份 23.1. 概述 23.2. 配置 A. 安全数据库表结构 A.1. User表 A.1.1. 组权限 A.2. 持久登陆(Remember-Me)表 A.3. ACL表 A....
迁移到 4.0 版本需要考虑以下关键点: - **API 变更**:检查文档中的 API 变更记录,并调整现有代码。 - **配置更改**:确保配置文件或 Java 配置类符合新版的要求。 - **依赖升级**:更新所有相关的依赖到兼容版本...
- **3.4 CAS 例子**:CAS (Central Authentication Service) 是一种单点登录协议,此示例展示了如何集成 CAS 实现统一认证。 - **3.5 Pre-Authentication 例子**:预认证是一种特殊的身份验证机制,在实际登录之前就...
2.1 针脚配置: 内存模块的物理连接是通过288个针脚实现的,这些针脚的配置决定了内存模组与系统主板的兼容性和互连方式。 2.2 针脚描述: 针脚的详细描述包括它们的功能,例如数据输入输出(DQ),地址线(ADDR)...
**3.4 为 CAS 配置 SSL** 为了保障通信的安全性,建议配置 SSL/TLS 以加密 CAS 服务器和客户端之间的通信。 --- ##### 第12章:Basic 认证 **4.1 配置 Basic 验证** Basic 认证是一种简单但有效的身份验证机制...
通过对性能数据的收集和分析,定位到性能下降的具体原因,可能是由于新版本的某些特性和配置与旧版本存在差异。 ##### 4.3 问题总结 总结性能下降的原因,并提出相应的解决策略,比如调整配置参数、优化代码逻辑等...
它由 **DuraSpace** 组织开发和支持,该版本的手册提供了关于如何安装、配置和使用DSpace 1.6.1的详细指导。 #### 二、DSpace系统文档:功能概述 ##### 2.1 数据模型 DSpace 的核心是其强大的 **数据模型** ,...