You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

two-way SSL(双向SSL)能否实现异步校验?具体实现方案是什么

这个需求可以实现,核心是将原本双向SSL握手阶段的同步客户端证书校验,调整为连接建立后的业务层异步校验,具体实现方案如下:

实现核心逻辑

常规双向SSL会在握手阶段强制要求客户端上传证书并同步校验,校验失败直接中断握手。要实现你要的效果,只需要跳过握手阶段的客户端证书强制校验,先完成单向SSL握手建立连接,后续再异步完成客户端证书的校验流程,校验不通过直接主动断连即可。

具体操作步骤

  • 第一步:调整服务端TLS配置,关闭握手阶段的客户端证书强制校验
    • 如果你用Nginx做SSL接入,将原本双向认证配置中的ssl_verify_client on;修改为ssl_verify_client optional;,该配置会允许客户端握手阶段不上传证书,优先完成单向SSL连接建立
    • 如果你是自研服务端(比如用Java Netty、Go TLS、Node.js TLS模块开发),将TLS配置中的客户端认证模式从RequireAndVerifyClientAuth(强制校验)调整为RequestClientAuth(主动请求但不强制校验)或NoClientAuth(不主动请求)即可
  • 第二步:连接建立后触发异步校验逻辑
    • 如果客户端握手阶段已经主动上传了证书,你可以直接从TLS会话上下文里提取到客户端证书信息,丢到独立的异步线程池/协程中执行校验,校验规则和常规双向SSL一致:包含证书有效期校验、CA信任链校验、证书吊销状态校验、主体/域名匹配校验等
    • 如果客户端握手阶段没有上传证书,你可以在业务层自定义一个证书索要指令,连接建立后主动发给客户端,要求客户端在约定超时时间内上传证书,收到后再执行异步校验
  • 第三步:校验阶段不阻塞业务流程
    异步校验全程跑在独立的调度资源里,当前连接的消息收发、ACK返回全部正常处理,不会被校验流程阻塞
  • 第四步:异常场景断连处理
    一旦异步校验判定客户端证书无效,或者客户端超过约定时间没有上传证书,直接调用底层TCP/TLS连接的关闭接口主动断连即可,后续客户端发的所有消息都会被直接拒绝

注意事项

如果校验窗口内会传输敏感业务数据,建议业务层先做临时权限兜底,避免证书异常的客户端在未完成校验的窗口期拿到敏感信息。


内容的提问来源于stack exchange,提问作者msl12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 08:54:03