Featured image of post OpenSSL学习(0): 发布策略说明

OpenSSL学习(0): 发布策略说明

OpenSSL学习笔记,发布策略说明、版本号语义等。

简介

OpenSSL 是一个功能丰富且自包含的开源安全工具箱。它提供的主要功能有:SSL/TLS 协议实现、大量软算法(对称/非对称/摘要)、大数运算、非对称算法密钥生成、ASN.1 编解码库、证书请求(PKCS10)编解码、数字证书编解码、CRL 编解码、OCSP 协议、数字证书验证、PKCS7 标准实现和 PKCS12 个人数字证书格式实现等功能。

发布时间策略

https://www.openssl.org/policies/general/release-policy.html

OpenSSL 的发布计划遵循一年发布两次的模式,每年4月和10月发布新版本。多个版本可能同事处于活跃状态,从而导致发布周期重叠。每个版本可分为以下几个阶段:

  • 规划阶段:持续过程,为发布定义阶段提供输入,
  • 发布定义:定义发布储备,持续 4 周,
  • 开发:功能开发从 20 周到 24 周不等,
  • 发布:解决社区在预发布中发现的问题,长达6周,
    • Alpha:此阶段的功能开发已经完成,正在处理社区的反馈,测试、错误修复和文档更新正在进行中;
    • Beta:此阶段表示库已经接近最终版本,
    • Final:最终版本,此阶段没有代码修复,没有文档修改,仅作发布前的必要工作。比如:更新已知问题、颁发数字签名等。
  • 支持:支持维护阶段。
    • 完全支持:在最终版本发布后,常规版本将完全支持一年,LTS 版本将支持 4 年,
    • 维护支持:完全支持期结束后,立即开始“维护支持“阶段,为期一年,主要重点是修复安全问题。

发布策略说明

发布策略:https://www.openssl.org/policies/releasestrat.html

从 OpenSSL 3.0 的版本号格式变更为:MAJOR.MINOR.PATCH,此格式保证在相同 MAJOR 版本间的 API/ABI 兼容。在这之前,OpenSSL 保证相同 MAJOR.MINOR 版本间的 API/ABI 兼容。

  • MAJOR: 导致API/ABI不兼容的更改时递增,
  • MINOR: 增加API/ABI兼容的特性功能时递增,
  • PATCH: 修复缺陷时递增。

OpenSSL 发布策略中包含 2 种类型版本:正式的发行版(major release)和预发行版(pre-release)。

  • 正式发行版本(major release):分为长期支持版本和非长期支持版本,

    • 长期支持版本(LTS):至少支持 5 年,至少每 4 年指定一次长期支持版本

    • 非长期支持版本:至少维护支持 2 年,

    • 在支持的最后一年,OpenSSL 不承诺修复出安全问题之外的其他内容。

  • 预发布版本(pre-release):alpha 和 beta 版,

    • alpha:功能可能是不完整的,不一定实现了所有新的API,

    • beta:功能完成,只会修复缺陷,不会新增功能。

版本生命周期

现在时间是 2024 年 04 月:

OpenSSL 1.1.1 是长期支持版本(LTS),原先策略支持到2023-09-11,

OpenSSL 1.1.0 支持到 2019-09-11,

OpenSSL 1.0.2 是长期支持版本(LTS),支持到2019-12-31。

关于 OpenSSL 当前和未来版本的生命周期策略如下:

  • 3.2 版本将支持到 2025-11-23,
  • 3.1 版本将支持到 2025-03-14,
  • 3.0 版本将支持到 2026-09-07(LTS),
  • 1.1.1, 1.0.2 版本将不再支持,提供对1.1.1, 1.0.2的扩展支持,以访问这些版本的安全修复补丁,
  • OpenSSL 1.1.0, 1.0.1, 1.0.0 和 0.9.8 版本已不再支持。

版本号语义

在上面的章节提到 OpenSSL 从 3.0 开始版本号的语义会稍微有点变化,需要关注 OpenSSL 的两个宏:

1
2
3
#include <openssl/opensslv.h>
#define OPENSSL_VERSION_NUMBER 0xnnnnnnnnnL
#define OPENSSL_VERSION_TEXT "OpenSSL x.y.z xx XXX xxxx"

对应的 OpenSSL 提供了两个 API 接口来获取上述两个宏的值:

1
2
3
4
5
6
/* openssl/crypto.h */
/* libcrypto.so */

// 低版本是: SSLeay() 和 SSLeay_version()
unsigned long OpenSSL_version_num(void);
const char *OpenSSL_version(int type);

其中,OPENSSL_VERSION_TEXT 宏的值如 "OpenSSL 1.0.1a 15 Oct 2015"。OpenSSL 3.0 与之前版本的区别在于OPENSSL_VERSION_NUMBER 宏即OpenSSL_version_num返回值

的表达形式不同。

在 3.0 之前,OpenSSL 的语义如下(以 OpenSSL 1.1.1w 版本为例):

status:0 表示开发(dev),1~14表示测试版(beta),f 表示发布版(release)

1
2
3
4
5
6
7
8
 MNNFFPPS: major minor fix patch status
 0x1010117fL
 0x 01 01 01 17 f L
   +  +   +  +  +
 +-+  |   |  |  |
 v    v   v  v  v
MM   NN   FF PP S
 1 .  1 . 1  w  f

3.0 开始,删除了 fix 和 status 语义,只保留了 主版本号、次要版本号和修复版本号。

1
0xMNN00PP0L: major minor patch

OpenSSL 3.0 变化

https://www.openssl.org/docs/man3.0/man7/migration_guide.html

因为是一个大版本的改动(从1.1.1到3.0),所以并不能保证之前的应用程序可以正常工作。

许可证的变更:从旧的 OpenSSL/SSLeay License 变更为 Apache License v2.

版本控制方案变更:格式变为MAJOR.MINOR.PATCH,相比于 OpenSSL 1.1.1及更低版本补丁级别由原来版本号末尾的字母表示(比如 OpenSSL 1.1.1k),变更由版本号中的PATCH表示。

其他更多特性变更见链接:/docs/man3.0/man7/migration_guide.html (openssl.org)

产品路线图

Last Updated:11 January 2024

OpenSSL 3.3 是下一个计划发布的版本,计划于 2024年4月发布。该版本计划引入在服务器端支持 multi-stream QUIC 特性,以及其他社区内贡献的功能。

稳定版更新策略

https://www.openssl.org/policies/technical/stable-release-updates.html

稳定版本(stable release)是值从 MAJOR 和 MINOR 版本及其更新的系列版本。

补丁版本(patch release)是稳定版本的更新。

缺陷修复(bug fix)是指对库、模块、应用程序以及构建系统功能的修复,包括对一些意外行为的修复,比如:

  • 内存泄漏

  • 崩溃

  • 挂起/死锁或竞争条件

  • 越界读写

  • 读取未初始化值

  • 使用释放后的内存

  • …..

安全策略

https://www.openssl.org/policies/general/security-policy.html

向 OpenSSL 报告安全问题。

参考引用

/policies/general/release-policy.html

[ Release Strategy ] - /policies/releasestrat.html

/policies/technical/stable-release-updates.html

/policies/general/security-policy.html

哦吼是一首歌。
Built with Hugo
Theme Stack designed by Jimmy