如何配置 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 配置以进行硒测试

如何配置spring-boot千分尺以推入elasticsearch?

Spring Boot CORS 配置不接受授权标头