Hacker News 中文摘要

RSS订阅

pyca/cryptography 中 OpenSSL 的现状 -- The State of OpenSSL for pyca/cryptography

文章摘要

Python加密库cryptography的维护者指出,OpenSSL经历了三个阶段:早期维护不足,Heartbleed事件后有所改善,但2021年OpenSSL 3发布后,其发展方向问题日益严重,导致他们考虑减少对其依赖或要求OpenSSL进行重大改变。

文章总结

标题:pyca/cryptography项目对OpenSSL现状的声明——Cryptography 47.0.0.dev1文档

发布日期:2026年1月14日

过去12年间,我们(Paul Kehrer和Alex Gaynor)一直维护Python加密库pyca/cryptography。在此期间,OpenSSL始终是我们的核心加密算法提供方。但在2025年10月的OpenSSL大会上,我们公开指出了OpenSSL发展方向的严重问题,认为其当前的发展轨迹已迫使我们必须做出改变——要么OpenSSL自身改革,要么我们减少对其依赖。

OpenSSL的三阶段演变

  1. Heartbleed漏洞前(2014年前):维护不足,发展停滞
  2. Heartbleed漏洞后:引入代码审查、CI测试、模糊测试等改进措施
  3. OpenSSL 3时代(2021年后):API重构带来性能倒退、复杂度激增,而测试验证、内存安全等关键领域未见提升

核心问题剖析

性能退化

  • 椭圆曲线公钥加载速度比1.1.1版本慢3倍
  • 自研Rust代码实现X.509证书解析后,性能反超OpenSSL 3十倍
  • 公钥解析改用Rust后,端到端验证效率提升60%

复杂性与API设计

  • 新引入的OSSL_PARAM机制导致:
    • 代码冗长(ML-KEM封装需37行代码 vs BoringSSL的19行)
    • 性能下降
    • 可读性降低
  • 提供者(Provider)机制引发连锁问题:
    • 不必要的动态算法替换设计
    • 被迫引入缓存和RCU机制
    • 最终仍无法挽回性能损失

测试与验证缺陷

  • CI测试脆弱性掩盖严重漏洞(如AVX-512 CPU上的RSA缓冲区溢出漏洞)
  • 缺乏针对不同CPU指令集的专项测试
  • 形式化验证领域落后于BoringSSL等分支

内存安全滞后

  • 在Rust等内存安全语言普及的当下,OpenSSL仍无迁移计划
  • 我们通过Rust重构已成功规避多个OpenSSL CVE漏洞

未来计划

  1. 逐步降低依赖
    • 新功能将优先支持LibreSSL/BoringSSL/AWS-LC
    • 评估静态链接OpenSSL分支的可行性
  2. 长期规划
    • 跟踪Graviola等新型加密库
    • 不排除完全放弃OpenSSL支持

我们理解这些改变对用户的影响,但出于技术严谨性必须采取行动。建议OpenSSL用户积极参与社区改进,以避免最激进的变更方案。

(注:原文中关于具体代码示例、会议演讲细节等非核心内容已精简,保留关键论据和技术决策依据)

评论总结

以下是评论内容的总结:

  1. OpenSSL代码复杂难读

    • 多位评论者批评OpenSSL代码结构复杂,包含大量间接调用、条件编译等,导致难以理解和调试。
    • 引用:"Finally, taking an OpenSSL public API and attempting to trace the implementation... has become an exercise in self-flagellation."
    • 引用:"OpenSSL code was not pleasant or easy to read even in v1 though..."
  2. 性能问题显著

    • 评论指出OpenSSL的密钥解析等操作存在严重性能瓶颈,替换为自定义实现后性能提升显著。
    • 引用:"...moving public key parsing to our own Rust code made end-to-end X.509 path validation 60% faster."
    • 引用:"...it was nuts to see how much performance was left on the ground by OpenSSL."
  3. 替代方案更优

    • 用户推荐LibreSSL、BoringSSL、AWS-LC等替代方案,认为它们在代码质量和性能上更优。
    • 引用:"...isn’t true in LibreSSL, BoringSSL, or AWS-LC."
    • 引用:"Since that Haproxy has effectively abandoned OpenSSL in favor or AWS-LC."
  4. 转向Rust的积极态度

    • 多数评论支持PyCA/cryptography库转向Rust,认为这能提升长期稳定性和开发体验。
    • 引用:"I think moving the backend to Rust is probably the right move for long term stability."
    • 引用:"The python-level APIs are well thought-out and well documented."
  5. API设计问题

    • 新版OpenSSL API被批评设计不佳,例如EVP接口性能比旧接口差5倍。
    • 引用:"...the EVP code is slow... about 5x slower."
    • 引用:"my personal 'new OpenSSL APIs suck' anecdote..."

总结观点分布:
- 负面评价占主导(代码质量差、性能低、API设计问题)
- 正面评价集中在PyCA/cryptography库的设计和转向Rust的决策
- 替代方案(如AWS-LC)获得行业认可