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

Python搭建Gemini服务器:如何忽略客户端自签名证书的SSL验证?

解决Python Gemini服务器中自签名客户端证书验证失败问题

问题核心:使用ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)创建的上下文,会默认用系统信任根证书验证客户端证书——即使设置了CERT_OPTIONAL,只要客户端发送了证书,就会校验其是否在信任链中,自签名证书自然会触发ssl.SSLCertVerificationError。

解决方案:自定义SSL验证回调

通过自定义验证回调,跳过“证书是否被信任”的检查,仅验证证书本身的有效性(如签名正确、未过期),符合Gemini协议对客户端证书的要求。

修改后的代码示例:

...
self.context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
self.context.load_cert_chain(certfile=certfile, keyfile=keyfile)

self.context.verify_mode = ssl.CERT_OPTIONAL
# 关闭主机名检查(Gemini协议不需要验证客户端证书的主机名)
self.context.check_hostname = False

def verify_client_cert(cert, errnum, errdepth, ok):
    # 仅当证书本身无错误(签名、有效期正常)时接受,忽略信任链验证失败
    return errnum == 0

self.context.verify_callback = verify_client_cert
...

说明

  • verify_callback会在客户端证书验证的每个阶段被调用,errnum为0表示证书本身格式、签名、有效期均正常,仅因不在信任链中导致验证失败。
  • 若完全跳过所有验证(仅限测试场景),可直接在回调中返回True,但这会接受无效证书,不符合生产环境要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 21:50:08