问题描述
我正在创建一些安静的 Web 服务,并且正在使用 Spring-Boot 创建一个嵌入式 tomcat 容器.
I'm creating some restful web services and am using Spring-Boot to create an embedded tomcat container.
其中一项要求是实现 2 路 SSL.我一直在查看 HttpSecurity 对象,并且可以使用以下方法让它仅通过 SSL 通道运行网络服务:-
One of the requirements is that this implements 2 way SSL. I've been looking at the HttpSecurity object and can get it to only run the webservices over an SSL channel using this:-
@Override
protected void configure(HttpSecurity http) throws Exception {
System.out.println("CONFIGURED");
http
// ...
.requiresChannel()
.anyRequest().requiresSecure();
}
我似乎找不到一种方法,可以使 Web 服务只能由提供有效客户端证书的应用程序访问.
What I can't seem to find is a way of making the webservice only accessible to applications providing a valid client cert.
我只有 SSL 的基本知识,因此即使是正确方向的一般指针也将不胜感激.
I have only a basic knowledge of SSL so even a general pointer in the right direction would be appreciated.
正在部署的服务器将包含多种应用程序 - 这是唯一需要使用 2-way SSL 锁定的应用程序.我真正在寻找的是一种将单个应用程序锁定为仅接受客户端证书的方法.
The server this is being deployed onto will have a mix of applications - this is the only one that needs to be locked down with 2-way SSL. What I'm really looking for is a way of locking down a single application to only accept client certificates.
推荐答案
您可以配置 clientAuth=want
,参见 Apache Tomcat 8 配置参考:
You could configure clientAuth=want
, see Apache Tomcat 8 Configuration Reference:
如果您希望 SSL 堆栈在接受连接之前需要来自客户端的有效证书链,请设置为 true
.如果您希望 SSL 堆栈请求客户端证书,则设置为 want
,但如果未提供,则不会失败.false
值(默认值)不需要证书链,除非客户端请求使用 CLIENT-CERT
身份验证的安全约束保护的资源.
然后使用 Spring Security - X.509 身份验证:
您还可以将 SSL 与相互身份验证"一起使用;然后,作为 SSL 握手的一部分,服务器将从客户端请求有效证书.服务器将通过检查其证书是否由可接受的授权机构签署来验证客户端.如果已提供有效证书,则可以通过应用程序中的 servlet API 获取.Spring Security X.509 模块使用过滤器提取证书.它将证书映射到应用程序用户并加载该用户的一组授予权限,以便与标准 Spring Security 基础架构一起使用.
和
clientAuth
设置为 want
.除非您使用非 X.509 身份验证机制(例如表单身份验证),否则不提供证书的客户端将无法访问任何受 Spring Security 保护的对象.
这篇关于使用 spring boot 实现 2 路 SSL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!