X.509认证
18.1. 概述
X.509证书认证最常见的使用方法是使用SSL验证服务器的身份,通常情况是在浏览器使用SSL。 浏览器使用一个它维护的可信任的证书权限列表,自动检测服务器发出的证书(比如数字签名)。
你也可以使用SSL进行“mutual authentication”相互认证;服务器会从客户端请求一个合法的证书,作为SSL握手协议的一部分。 服务器将验证客户端,通过检测它被签在一个可接受的权限里的认证。 如果已经提供了一个有效的证书,就可以从程序的servlet API里获得。 Spring Security X.509模块确认证书,使用过滤器,传递一个配置好的X.509认证提供器,允许任何复杂的特定程序检测使用。 它也可以为应用程序的用户映射证书,并使用标准的Spring Security基础设施读取用户的已授予权限集合。
你应该很熟悉使用证书,在使用Spring Security之前为你的servlet容器启动客户端认证。 大多数工作都是创建和安装合适的证书和密匙。 比如,如果你使用tomcat,可以阅读这里的教程http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html。 在你把它用在Spring Security里之前,先知道它是怎么工作,是很重要的。
18.2. 把X.509认证添加到你的web系统中
启用X.509客户端认证非常直观。 只需要把<x509/>元素添加到你的http安全命名空间配置里。
<http>
...
<x509 subject-principal-regex="CN=(.*?)," user-service-ref="userService"/>
...
</http>
这个元素有两个可选属性:
*
subject-principal-regex。这是一个正则表达式,用来从证书主体名称里获得用户名。默认值已经写在上面了。这个用户名会传递给UserDetailsService来获得用户的认证信息。
*
user-service-ref。这是X.509需要用到的一个UserDetailsService的bean的id。如果你的application context里只定义了一个bean,就不需要使用它。
subject-principal-regex应该包含一个单独的组。 比如默认的表达式"CN=(.*?),"匹配普通的名字字段。 所以,如果证书主题名是"CN=Jimi Hendrix, OU=...",就会得到一个名叫"Jimi Hendrix"的用户。 这个匹配是大小写不敏感的。 所以"emailAddress=(.?),"也会匹配"EMAILADDRESS=jimi@hendrix.org,CN=...",得到一个"jimi@hendrix.org"用户名。 如果客户端给出一个证书,并成功获得了一个合法用户名,然后在安全环境里应该有一个有效的Authentication对象。 如果没有找到证书,或没有找到对应的用户,安全环境会保持为空。 这说明你可以很简单的和其他选项一起使用X.509认证,比如基于表单登录。
18.3. 为tomcat配置SSL
在Spring Security项目的samples/certificate目录下,有几个已经生成好的证书。 如果你不想自己去生成,就可以使用们启用SSL做测试,。 server.jks文件包含了服务器证书,私匙和签发证书颁发机构证书。 这里还有一些客户端证书文件,提供给例子程序的用户。 你可以把他们安装到你的浏览器,启动SSL客户端认证。
要运行支持SSL的tomcat,把 server.jks 文件放到tomcat的 conf 目录下,然后把下面的连接器添加到 server.xml 文件中
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLS"
keystoreFile="${catalina.home}/conf/server.jks"
keystoreType="JKS" keystorePass="password"
truststoreFile="${catalina.home}/conf/server.jks"
truststoreType="JKS" truststorePass="password"
/>
clientAuth 也可以设置成 want,如果你希望客户端没有提供证书的时候SSL链接也能成功。 客户端不提供证书的话,就不能访问Spring Security的任何安全对象,除非你使用了非X.509认证机制,比如表单认证。
分享到:
相关推荐
Spring_Security_2.0.x中文参考文档.pdf
Spring Security 2.0.x完全中文参考文档 学习Asegi Security 的不可或缺的东西! 完全版文档,绝无仅有!
Spring Security参考文档2.0.x.chm,
NULL 博文链接:https://ReturnOfKing.iteye.com/blog/255089
博文链接:https://antgreen.iteye.com/blog/241206
Spring Security 2.0 中文参考文档 喜欢的请下载
Spring Security 2.0.x 参考手册 中文版
你可以在spring参考文档得到更多信息。 命名空间元素可以简单的配置单个bean,或使用更强大的,定义一个备用配置语法,这可以更加紧密的匹配问题域,隐藏用户背后的复杂性。 简单元素可能隐藏事实,多种bean和处理...
Spring_Security_参考文档_2.0.pdf
文献资料Spring Frameworks维护参考文档( 和),Github 以及。 在整个Spring项目中也有。从源构建请参阅Wiki页面以及 。保持联系在Twitter上关注 , 及其。 可以在上找到深入的文章,并通过我们的宣布其。执照...
- 核心框架:Spring Boot 2.0 - 安全框架:Apache Shiro 1.4 - 视图框架:Spring MVC 5.0 - 持久层框架:MyBatis 3.3 - 定时器:Quartz 2.3 - 数据库连接池:Druid 1.1 - 日志管理:SLF4J 1.7、Log4j - 页面交互:...
包括Struts2.0API Spring+Security安全权限管理手册 Hibernate中文参考文档 Spring+Framework+中文参考手册
JspSmartUpload,JSP基础语法帮助,JUnit4.1_帮助文档,log4j 1.2.14,Microsoft Jet SQL参考,MySQL 5.1参考手册,MySQL使用,PostgreSQL 8.0.0 中文文档,Servlet2.3-帮助文档,Spring Security安全权限管理手册,...
数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写...
该系统涉及 分销商、供应商、平台管理员等多种分销角色,技术采用spring-cloud 2.0微服务化框架、eureka注册中心、ribbon负载均衡、hystrix限流降级、spring security权限控制、redis缓存 elasticsearch索引等主流...
数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写...
ORM框架用的 Spring Data JPA,权限管理用的是 Spring Security。 以 MySQL 作为数据库,同时用 Redis 数据库缓存几个排行榜。模板引擎使用的是官方推荐的 Thymeleaf,告别JSP吧。 图片上传使用第三方上传——七牛云...
ASP.NET 2.0 Security FAQs Asp.net 2.0功能体验,细节之Web控件(一) 隐藏控件 Asp.net 2.0功能体验,总体设计思想 Asp.net 2.0 WebPart使用经验点滴 革新:.NET 2.0的自定义配置文件体系初探 关于如何在ASP.NET ...
- 使用最新技术栈,社区资源丰富,基于Java 21(Core Module Support 17-21)、Spring Boot 3.2。 (Support Virtual Threads/fibre/loom) - 基于注解的动态查询(Specification),可根据需要扩充查询注解。 - 支持...