如何配置 Spring Boot 应用程序以接受未知的 SSL 客户端证书?
Posted
技术标签:
【中文标题】如何配置 Spring Boot 应用程序以接受未知的 SSL 客户端证书?【英文标题】:How to configure Spring Boot app to accept unknown SSL client certificate? 【发布时间】:2020-11-02 20:52:58 【问题描述】:我创建了一个带有 2-way SSL 身份验证的 Spring Boot 2 应用程序。 简而言之,归结为以下配置:
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter
@Override
protected void configure(HttpSecurity http) throws Exception
http.authorizeRequests().anyRequest().authenticated()
.and().x509();
该应用具有密钥库/信任库,并且可以与导入的客户端证书一起正常工作。 没想到,如果我尝试连接未知的客户端证书,由于 SSL 握手失败,连接没有建立。
但是,即使证书不被接受,我也想到达应用层,并用来自应用程序的 HTTP 响应进行响应。
有什么办法可以做到吗?
【问题讨论】:
【参考方案1】:回答我自己的问题:我本可以使用 Spring Boot 属性
server.ssl.client-auth: want
而不是
server.ssl.client-auth: need
即使证书无效或不存在,第一个选项仍然允许连接到 tomcat。然后请求将被安全过滤器拒绝。
【讨论】:
【参考方案2】:如果服务器端不需要证书握手,那意味着你不需要SSL
。因此,在您的配置文件中停用它:
server:
ssl:
enabled: false
PS: 仅在 HTTP
协议中公开您的 REST
网络服务是危险的。也许,在您的开发环境中进行这样的配置是有意义的。
【讨论】:
以上是关于如何配置 Spring Boot 应用程序以接受未知的 SSL 客户端证书?的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 应用程序未与 Cloud Config Server 连接
如何配置 Spring Boot 应用程序以使用 aspectj 事务?
如何在 Spring Boot 中编写控制器以接受格式 - /policies?page=2&limit=10 的查询字符串
如何在 spring-boot 配置中加载 application.yaml 配置以进行硒测试