OpenSSL 1.1 API 的迁移问题

很多人都知道,OpenSSL 1.1.0版本有意介绍了从以前的版本引入了重大的API更改,以前公开可见的大量数据结构已经变得不透明,添加了访问器函数以获取和设置这些现在不透明结构中的一些字段。值得注意的是,使用不透明数据结构对库通常是有益的,因为可以改变这些数据结构而不破坏ABI。因此,这些变化的总体方向在很大程度上是合理的。

然而,虽然API更改通常是进展所必需的,但OpenSSL似乎没有转换计划,完全忽视了这些更改对整个开源生态系统的影响。

目前来看唯一可接受的方案是把重任转接给每个使用OpenSSL 的软件项目中:在依然兼容以前API的情况下推进每个项目中把核心代码迁移为OpenSSL 1.1 ,同时保持与先前API的兼容性(例如php-src和openssh-portable)。这迫使每个项目提供自己的向后兼容性,肯定会引发一些问题,引入潜在的安全问题或内存泄漏。

由于许多因素,使用OpenSSL的软件项目不能简单地迁移到1.1 API,并且不再支持1.0 API ——在大多数情况下,他们需要继续支持这两者。首先,我不知道有任何平台已经发布OpenSSL 1.1版本 —— 任何支持OpenSSL 1.1的软件,没有平台可以使用。其次,OpenSSL 1.0.2版本支持到2019年12月31日,而OpenSSL 1.1.0只支持到2018年8月31日——显然任何LTS风格版本都会考虑使用1.0.2。

尝试与OpenSSL 1.1 协同工作的平台已经遭遇了明显的挑战 :例如,目前Debian518个中就有257个包不是针对OpenSSL 1.1 构建的。同时还存在隐藏一些问题,类似不同的类库基于不同的OpenSSL 版本但却贡献OpenSSL 数据结构的场景,这些问题都很难被察觉。因为他们只会在运行时出现。

但是,OpenSSL(仍然有)至少两个选项可以避免这种情况,使得软件项目从旧的API平滑过渡到新的API,而不是每个单独的项目都必须向后兼容至少三年(实际更长)。

我恳求OpenSSL项目认真重新考虑他们的API改变的方法,更重要的是相关的迁移,尤其是记住什么是最好的整体生态系统,而不仅仅是OpenSSL项目。我还要求使用OpenSSL的软件项目仔细考虑他们如何处理这种情况,特别是考虑他们需要多长时间携带兼容性代码和#ifs。

最后我想说的是,这不是LibreSSL的问题 —— 如果我们添加所有的OpenSSL 1.1访问器,为OpenSSL 1.0或OpenSSL 1.1编写的软件将可以与LibreSSL无缝工作。但无论如何,软件仍然必须保持与两个OpenSSL API的兼容性。

文章转载自 开源中国社区 [http://www.oschina.net]

时间: 2024-09-16 06:38:43

OpenSSL 1.1 API 的迁移问题的相关文章

使用 OpenSSL API 进行安全编程

  使用 OpenSSL API 进行安全编程 创建基本的安全连接和非安全连接     级别: 初级 Kenneth Ballard (kenneth.ballard@ptk.org), 自由程序员 2004 年 8 月 09 日 学习如何使用 OpenSSL -- 用于安全通信的最著名的开放库 -- 的 API 有些强人所难,因为其文档并不完全.您可以通过本文中的提示补充这方面的知识,并驾驭该 API.在建立基本的连接之后,就可以查看如何使用 OpenSSL 的 BIO 库来建立安全连接和非安

Swift 3 API 设计准则

一款编程语言标准库的设计理念,往往对这门编程语言给人的整体感觉有很大影响.好的标准库就好似语言本身的扩展一般,并且保证标准库内部的一致性可以有效提升整体的开发体验.为了搭建一个好的 Swift 标准库,Swift 3 的其中一个主要目标就是要定义一组 API 设计准则,并且始终如一地应用这些准则. Swift API 设计准则包含了几个主要目标,它们都旨在统一 Swift 的开发风格.这些主要目标分别是: Swift API 设计准则:实际的 API 设计准则我们目前正在积极开发中.目前,Swi

CoreOS发布etcd v2.3.0,重点提升稳定性和可靠性

本文讲的是CoreOS发布etcd v2.3.0,重点提升稳定性和可靠性,[编者的话]Etcd v2.3.0正式发布了!这次更新不仅伴随着稳定性和可靠性方面的提升,还为我们带来了新的v3版本API的预览版以及新的存储引擎,除此之外还有哪些诱人的特性呢?赶紧来看看吧! 今天,我们很高兴地宣布etcd v2.3.0正式发布了,这次更新的重点放在稳定性和可靠性方面的改进.这个版本里同样也推出了一个实验性的下一代v3版本API的实现,包括一个客户端和命令行工具,为开发者们提供未来版本etcd的提前体验.

首个云存储开放接口规范CDMI获ISO批准

国际标准组织(ISO)日前批准通过了云数据管理接口(CDMI)规范,该规范包含了一组定义企业如何在私有云和公有云之间安全地迁移数据的协议. 全球http://www.aliyun.com/zixun/aggregation/13684.html">网络存储工业协会(SNIA)的云存储倡议小组在去年春季便向ISO提交了这一标准.CDMI是存储工业开发的首个专用于数据存储即服务(DSaaS)的开放标准. ISO委员会主席Karen Higginbottom在一份声明中称,"业界对云计

7.3. s_server / s_client

7.3.1. SSL POP3 / SMTP / IMAP SSL POP3 / SMTP / IMAP 端口号 POP3 995 SMTP 465 IMAP 993 openssl s_client -connect localhost:110 -starttls pop3 如果提示 CONNECTED(00000003) 侧省去 -starttls pop3 选项 openssl s_client -connect pop.163.com:995 openssl s_client -conn

[译] 将现有的 API 从 REST 迁移到 GraphQL

本文讲的是[译] 将现有的 API 从 REST 迁移到 GraphQL, 原文地址:Moving existing API from REST to GraphQL 原文作者:Roman Krivtsov 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:zaraguo 将现有的 API 从 REST 迁移到 GraphQL 最近的六个月内我发现几乎每一场有关于 Web 开发的大会都谈论到了 GraphQL.也有大量与其相关的文章被发表.但是所有的这些

API版本化与迁移五大策略

业务需求在改变,这通常意味着API必须随之而改变.本文探讨当API必须改变时避免悲剧的五大关键策略. API版本化和迁移是不得不解决的问题,特别是在应用程序接口和不断变化的业务优先级绑定越来越紧密的当下.但是,如果采取一些关键步骤,改动API就不会造成悲剧. 我们采访了Inversoft的CEO,Brian Ponterelli,他分享了五个他所使用的最重要的策略,能够减少API改动的风险. 1.文档化时间线 当API开发完成时,很可能已经计划的一些patch或者功能版本可能会破坏兼容性.要想避

HelloFresh迁移至新的API网关,实现微服务架构

HelloFresh最近以零停机的方式将应用迁移到了一个新的API网关,其技术总监ítalo Lelis de Vietro在一篇文章中分享了他们所面临的挑战以及迁移的过程. 在这次迁移之前,HelloFresh已有的API是单体架构的.为了迁移至微服务架构并让微服务的创建更加简单,同时还要与他们的基础设施进行集成,他们构建了一个新的API网关,这个网关会涵盖已有的和新的服务.他们的基础设施已经有了一些组件,包括服务发现.基于Ansible的自动化以及广泛存在的日志和监控,这些组件都会让微服务更

VPC最佳实践(六):业务如何从经典网络平滑迁移到VPC

专有网络VPC(Virtual Private Cloud)正受到越来越多用户的欢迎,已经成为云上用户的首选网络类型,也是阿里云默认推荐的网络类型.然而,云上还有很多存量用户在使用经典网络,这些用户如何从经典网络迁移到VPC呢?本文将介绍相关的迁移方案. 方案概述 阿里云将提供三种迁移方案.这三个方案可以独立使用,也可以组合使用,以满足不同的迁移场景. 混挂和混访方案 ClassicLink方案 单ECS迁移方案 混挂和混访方案 混挂和混访方案是一种系统平滑迁移方案,即用户通过在VPC中新建EC