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

如何使用Python创建SSL Socket服务器及SSL证书报错排查

SSL Socket服务报错解答

跨服务器使用现有SSL文件的可行性

从其他站点获取的SSL文件可以在新服务器使用,需满足三个前提:

  • 证书cert.crt的通用名称(CN)或主题备用名称(SAN)字段,包含新服务器的访问域名或公网IP
  • 私钥key.key与证书cert.crt匹配,且未被篡改
  • 访问服务的客户端已将ca.pem导入信任根证书列表,否则会触发证书不信任错误

本次报错的核心原因

SSLV3_ALERT_CERTIFICATE_UNKNOWN是TLS握手阶段对端返回的证书校验失败告警,结合你的代码配置,触发原因包括:

  1. 客户端校验服务端证书失败
    新服务器的访问地址不在cert.crt的有效范围内,或客户端未信任ca.pem,客户端校验不通过主动断开连接,返回该告警。
  2. 服务端校验客户端证书失败
    你的代码中设置了cert_reqs=ssl.CERT_REQUIRED,强制要求客户端提交证书,并用ca.pem校验合法性,以下情况都会触发错误:
  • 客户端握手时未提交有效证书
  • 客户端提交的证书不是当前ca.pem签发的
  • 客户端证书的通用名称不是DemoClt,或证书处于未生效/已过期状态
  1. 本地证书文件异常
  • cert.crt和key.key不匹配,无法完成服务端身份校验
  • ca.pem文件缺失根证书或中间证书,无法完成完整的证书链校验

排查方案

  • 验证证书与私钥是否匹配,执行以下两条命令,输出哈希值一致则匹配:
openssl x509 -noout -modulus -in cert.crt | openssl md5
openssl rsa -noout -modulus -in key.key | openssl md5
  • 检查证书的有效地址是否包含当前服务器的访问地址:
openssl x509 -in cert.crt -text -noout | grep -E 'Subject:|DNS:|IP Address:'
  • 测试时可临时将cert_reqs参数改为ssl.CERT_NONE,如果不再报错说明问题出在客户端证书校验环节,优先排查客户端证书配置即可。

额外提示:你的代码中使用了time.time()但未导入time模块,修复SSL问题后需要补充导入,否则会触发名称错误。另外ssl.wrap_socket方法在Python3.7及以上版本已被弃用,推荐使用SSLContext类实现SSL包装,兼容性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:06:00