读书人

《Spring Security3》第十一章(客户端

发布时间: 2012-09-02 21:00:34 作者: rapoo

《Spring Security3》第十一章(客户端证书认证)第二部分翻译

?

在Spring Security中配置客户端证书认证

<http auto-config="true" ...><!-- Other content omitted --> <x509 user-service-ref="jdbcUserServiceCustom"/><!-- Other content omitted --></http>

?如果你重启应用,你会再次被提示要求客户端证书,但是这次你能够访问需要授权的内容了。你能够从日志中看到(如果你启用的话)你已经以admin用户登录了!干得漂亮!

Spring Security怎样使用证书信息

<x509 subject-principal-regex="CN=(.*?)," user-service-ref="jdbcUserService"/>

?我们可以看到,这个正则表达式将会匹配admin作为用户名。这个正则表达式必须包含一个匹配值,但是它能够被配置成支持用户名和DN以满足应用的需要——如,如果你们组织的证书包含email或userid域,正则表达式可以修改成使用这些值作为已认证安全实体的名字。

Spring Securit证书认证怎样实现


?我们可以看到o.s.s.web.authentication.preauth.x509. X509AuthenticationFilter负责处理要求未认证用户提供客户端证书的请求。如果这个请求包含了合法的证书,它将会使用o.s.s.web.authentication.preauth.x509.SubjectDnX509PrincipalExtractor抽取出安全实体,如前文所描述,这里会使用匹配证书自己DN的正则表达式。


?如果你读过我们在第十章:使用CAS进行单点登录讲到的CAS认证,你会意识到客户端证书认证请求和CAS请求的相似之处——这是有意的设计,事实上相似的设计影响到Spring Security支持的其它的预先认证机制(较少使用),包括Java EE角色匹配和Site Minder风格的认证。如果你理解了客户端证书认证的流程,理解其它的认证流程就容易多了。

其它未解决的问题

<bean id="forbiddenAuthEntryPoint" name="code"><http ... entry-point-ref="forbiddenAuthEntryPoint">


?不像我们在第六章看到的配置AccessDeniedHandler那样,Http403ForbiddenEntryPoint不能将用户重定向到一个友好页面或Spring管理的URL。作为替代,这样的配置应该在web应用部署描述符的<error-page>声明中配置,这是Java EE servlet规范声明的,或者实现Http403ForbiddenEntryPoint的子类以改写这个行为。

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" sslProtocol="TLS" keystoreFile="conf/tomcat.keystore" keystorePass="password" truststoreFile="conf/tomcat.truststore" truststorePass="password" clientAuth="want" />

?我们也需要移除前面练习中添加的entry-point-ref,这样如果浏览器在初始查询时不能提供一个合法的证书将会启用标准的基于form的认证流程。

<bean id="x509Filter" ref="customAuthenticationManager"/></bean><bean id="preauthAuthenticationProvider" ref="jdbcUserService"/></bean>

<bean id="springSecurityFilterChain" filters=" securityContextPersistenceFilter, x509Filter, anonymousProcessingFilter, exceptionTranslationFilter, filterSecurityInterceptor" /> </security:filter-chain-map></bean>

<bean id="customAuthenticationManager" width="310">

正如我们所看到的,客户端证书认证有利有弊。当它正确实现时,它对于所有的用户会是一种很便利的访问模式,并具有很吸引人的安全性和不可抵赖属性(non-repudiation)。你需要根据特定的情况来决定这种类型的认证是否适合。

小结

???????? 本章中,我们了解了基于客户端证书认证的架构、流程以及Spring Security提供的支持。我们学到了如下的内容:

l? 了解客户端证书(相互的)认证的概念和整体流程;

l? 学习配置ApacheTomcat支持自签名SSL和客户端证书的重要步骤;

l? 配置SpringSecurity能够理解客户端提供的证书认证凭证;

l? 理解SpringSecurity与证书认证相关的类;

l? 学习怎样配置Springbean风格的客户端证书环境;

l?权衡这种方式认证的利弊。

???????? 对于不熟悉客户端证书的开发者来说,可能会被这种环境的复杂性所困扰。我们希望本章的内容能够使得这个复杂的话题更容易理解和实现。

?

读书人网 >编程

热点推荐