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

使用OpenSSL建立SSL连接:服务器证书是否必填?客户端无证书连接失败原因

SSL握手失败排查:客户端无证书+服务器SSL_VERIFY_PEER场景

问题场景

  • 基于C语言+OpenSSL实现客户端-服务器SSL连接模型
  • 服务器配置:SSL_VERIFY_PEER,依赖CA证书验证客户端证书
  • 客户端配置:SSL_VERIFY_NONE,不验证服务器证书
  • 异常表现:客户端不发送任何证书时,连接建立失败,报错如下:
    • 服务器端错误:140510060005296:error:1408A0C1:SSL routines:ssl3_get_client_hello:no shared cipher:s3_srvr.c:1435:
    • 客户端错误:140575466600368:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:s3_pkt.c:1493:SSL alert number 40

问题原因

核心错误是no shared cipher——客户端和服务器协商不出双方都支持的加密套件,深层原因和配置直接相关:

  1. 服务器SSL_VERIFY_PEER的影响:当服务器开启客户端证书验证时,它的SSL上下文通常只会加载需要客户端提供证书的加密套件。而客户端没有配置任何证书,在握手的Client Hello阶段会告知服务器无法提供证书,此时两边找不到共同兼容的加密套件,握手直接失败。
  2. 服务器未配置自身证书:如果服务器没有加载自己的证书和私钥,哪怕客户端不验证,也会导致握手失败——SSL/TLS协议要求服务器必须提供证书完成密钥交换,这是握手的基础环节。

服务器证书的必要性

是的,哪怕客户端设置SSL_VERIFY_NONE不验证服务器证书,服务器也必须拥有并加载自己的证书和私钥。

SSL/TLS的握手流程中,服务器需要发送证书来完成密钥协商和身份标识(客户端只是不验证这个证书的真实性,但证书本身必须存在)。如果服务器没有配置证书,整个握手流程无法推进,直接会触发握手失败。至于匿名加密套件,虽然不需要证书,但这类套件缺乏身份验证,极易被中间人攻击,OpenSSL默认是禁用状态,不能作为解决方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 23:27:08