查看源代码 SSL 发行说明

本文档描述了对 SSL 应用程序所做的更改。

SSL 11.2.6

改进和新功能

  • 增强了来自 TLS 连接套接字的主动消息的返回值规范。

    自有 ID: OTP-19387 辅助 ID: PR-9067

SSL 11.2.5

已修复的 Bug 和故障

  • 避免为应该由 supervisor 正常关闭的情况生成内部警报。

    自有 ID: OTP-19311 辅助 ID: PR-8980

  • 如果存在,则应始终对对等证书执行扩展的密钥用法 TLS (SSL) 角色检查(pk-clientAuthpk-serverAuth)。如果存在 AnyExtendedKeyUsage 目的,则中间 CA 证书可能会放宽此要求。

    在 OTP-25.3.2.8、OTP-26.2 和 OTP-27.0 中,这些要求变得过于宽松。存在两个问题,首先,仅当对等证书扩展被标记为关键时才会对其进行检查,其次,CA 证书检查没有断言放宽的 AnyExtendedKeyUsage 目的。

    这可能导致证书被滥用于证书颁发机构未计划的目的。

    感谢 Bryan Paxton 报告此问题。

    自有 ID: OTP-19352 辅助 ID: PR-9130, CVE-2024-53846, OTP-19240

改进和新功能

  • 将用于 TLS-1.3 服务器的 certificate_authorities 选项向后移植到 TLS-1.3 之前的服务器,以使它们能够禁用在其证书请求中发送证书颁发机构。这将具有与 TLS-1.3 服务器选项相同的效果,尽管在这些版本中它由不同的机制处理,其中该功能被描述为更多的是指导,尽管一些 pre TLS 客户端已被证明使其像 TLS-1.3 扩展处理中一样是强制性的。

    自有 ID: OTP-19325 辅助 ID: PR-9001, ERIERL-1147

SSL 11.2.4

已修复的 Bug 和故障

  • 重构试图进行一些优化,在 OTP-26.2.1 中的签名算法检查中引入了一个错误。这可能表现为无法使用需要使用某些 TLS-1.2 兼容旧签名方案的证书来协商连接。

    自有 ID: OTP-19249 辅助 ID: ERIERL-1137, PR-8866

  • 更正为自己的警报运行的终止代码的超时处理,以便使用预期的超时,而不是回退到某些平台上不合理地长的 OS TCP 堆栈超时。

    自有 ID: OTP-19274 辅助 ID: PR-8901

  • 修复断言,使其按预期工作。这可能导致某些 TLS-1.2 客户端无法连接到 erlang 服务器。此 Bug 在 OTP-27.1.1 中引入

    自有 ID: OTP-19288 辅助 ID: GH-8908, PR-8916

SSL 11.2.3

已修复的 Bug 和故障

  • 从 TLS-1.3 开始,一些服务器握手警报可能会在 ssl:connection/2,3,4 返回后到达。如果套接字处于活动模式,控制进程将收到警报消息,但被动套接字在下次调用 ssl:recv/2,3 或 ssl/setopts/2 时只会收到 {error, closed}。被动套接字调用现在将返回 {error, error_alert()}。

    自有 ID: OTP-19236 辅助 ID: PR-8261

  • 配置为仅支持版本(pre TLS-1.2)的服务器应忽略 hello 版本扩展,因为它对它们来说是未知的扩展,这将导致不支持旧服务器版本的新客户端从服务器收到安全不足警报,而不是协议版本警报,这与旧服务器无法支持更高协议版本的方式一致。

    自有 ID: OTP-19257

SSL 11.2.2

已修复的 Bug 和故障

  • 修复了 SSL 分发的 kTLS 风格中的竞争,以便 inet_drv.c 不会提前读取太多数据,这可能会导致 kTLS 加密在一些加密数据已作为未加密数据读取到 inet_drv.c 缓冲区时激活得太晚。

    自有 ID: OTP-19175 辅助 ID: GH-8561, PR-8690

改进和新功能

  • 所有 TLS-1.3 终止现在都是优雅的(之前的 TLS 版本终止已经如此)。

    自有 ID: OTP-17848

  • 现在可以使用 4 个参数的验证函数,使用户函数可以访问证书的编码版本和解码版本。这对于解决编码错误以防止重新编码变得可靠是可取的。如果需要编码版本,这也可以节省一些工作量。

    请注意,不建议仅使用解码证书调用 public_key:pkix_path_validation/3,因为存在解码解决方法,尽管只要不需要这些解决方法它就可以工作。

    如果在调用 public_key 之前需要解码版本,建议使用 combined_cert- 类型以避免双重解码。请注意,路径验证算法本身始终需要证书的编码版本和解码版本。

    ssl 实现现在将受益于使用此函数而不是模拟 verify_fun/4。

    自有 ID: OTP-19169

  • 一些已删除函数的编译器警告已更正,以指出正确的替换函数。

    自有 ID: OTP-19186 辅助 ID: PR-8709

  • 在 SNI(服务器名称指示)不匹配错误的日志记录中包含更多信息。

    自有 ID: OTP-19187

SSL 11.2.1

已修复的 Bug 和故障

  • 检查 TLS-1.3 支持应检查最低要求。

    自有 ID: OTP-19094 辅助 ID: GH-8489

  • 如果同时支持 TLS-1.3 和 TLS-1.2 并且协商了 TLS-1.2,则将 TLS-1.3 ECDSA 方案转换为 TLS-1.2 哈希和签名对,以提高互操作性。

    自有 ID: OTP-19107 辅助 ID: GH-8376

  • TLS-1.3 协商现在正确使用基于 SNI 的选项,而不是忽略它们。

    自有 ID: OTP-19140

改进和新功能

  • 更容易区分无效签名和不支持的签名。

    自有 ID: OTP-19091

  • 增强 ALERT 日志,以帮助理解导致警报的原因。

    自有 ID: OTP-19092 辅助 ID: GH-8482

  • 当使用 signature_algs 的默认值时,将 signature_algs_cert 默认设置为默认值 + rsa_pkcs1_sha1,以允许证书使用此算法,但不允许 TLS 协议使用此算法。这是为了更好的互操作性。如果显式设置了 signature_algs,则如果它们应该不同,则还必须显式设置 signature_algs_cert。

    自有 ID: OTP-19152 辅助 ID: GH-8588

SSL 11.2

已修复的 Bug 和故障

  • 启动没有足够凭据(证书或匿名密码)的 TLS 服务器会起作用,但无法连接到它。

    这已更正为返回错误,而不是启动服务器。

    自有 ID: OTP-18887 辅助 ID: GH-7493, PR-7918

  • 在更多地方处理 ASN.1 解码错误,以确保返回错误而不是导致崩溃。

    自有 ID: OTP-18969 辅助 ID: GH-8058, PR-8256

  • 改进了 API 函数的错误检查。

    自有 ID: OTP-18992 辅助 ID: GH-8066, PR-8156

改进和新功能

  • ssl 客户端可以协商和处理证书状态请求(客户端的 OCSP 装订支持)。

    感谢 voltone 进行互操作性测试和相关讨论。

    自有 ID: OTP-18606 辅助 ID: OTP-16875,OTP-16448

  • 通过重构内部数据结构及其用法,减少了内存消耗并提高了性能。

    自有 ID: OTP-18665 辅助 ID: PR-7447

  • 添加了 ssl_crl_cache_api:lookup/2 作为可选的 -callback 属性。

    自有 ID: OTP-18788 辅助 ID: PR-7700

  • 扩展了关键自定义支持,允许硬件安全模块(HSM)或可信平台模块(TPM)的实施者具有更大的灵活性。

    自有 ID: OTP-18876 辅助 ID: PR-7898, PR-7475

  • 现在使用 proc_lib:set_label/1 函数来提高 ssl 进程的可观察性。

    自有 ID: OTP-18879

  • TLS-1.3 现在支持 Brainpool 椭圆曲线。

    自有 ID: OTP-18884 辅助 ID: PR-8056

  • 文档已迁移为使用 Markdown 和 ExDoc。

    自有 ID: OTP-18955 辅助 ID: PR-8026

  • 出于安全原因,CBC 密码现在不再包含在 TLS-1.2 的默认密码列表中。

    潜在的不兼容性

    自有 ID: OTP-19025 辅助 ID: PR-8250

  • 有一个新的 cert_policy_opts 选项,用于配置证书路径验证的证书策略选项。

    自有 ID: OTP-19027 辅助 ID: PR-8255

SSL 11.1.4.6

修复的错误和故障

  • 如果存在,则应始终对对等证书执行扩展的密钥用法 TLS (SSL) 角色检查(pk-clientAuthpk-serverAuth)。如果存在 AnyExtendedKeyUsage 目的,则中间 CA 证书可能会放宽此要求。

    在 OTP-25.3.2.8、OTP-26.2 和 OTP-27.0 中,这些要求变得过于宽松。存在两个问题,首先,仅当对等证书扩展被标记为关键时才会对其进行检查,其次,CA 证书检查没有断言放宽的 AnyExtendedKeyUsage 目的。

    这可能导致证书被滥用于证书颁发机构未计划的目的。

    感谢 Bryan Paxton 报告此问题。

    自有 ID: OTP-19352 辅助 ID: PR-9130, CVE-2024-53846, OTP-19240

SSL 11.1.4.5

修复的错误和故障

  • 避免为应该由 supervisor 正常关闭的情况生成内部警报。

    自有 ID: OTP-19311 辅助 ID: PR-8980

改进和新功能

  • 将用于 TLS-1.3 服务器的 certificate_authorities 选项向后移植到 TLS-1.3 之前的服务器,以使它们能够禁用在其证书请求中发送证书颁发机构。这将具有与 TLS-1.3 服务器选项相同的效果,尽管在这些版本中它由不同的机制处理,其中该功能被描述为更多的是指导,尽管一些 pre TLS 客户端已被证明使其像 TLS-1.3 扩展处理中一样是强制性的。

    自有 ID: OTP-19325 辅助 ID: PR-9001, ERIERL-1147

SSL 11.1.4.4

修复的错误和故障

  • 从 TLS-1.3 开始,一些服务器握手警报可能会在 ssl:connection/2,3,4 返回后到达。如果套接字处于活动模式,控制进程将收到警报消息,但被动套接字在下次调用 ssl:recv/2,3 或 ssl/setopts/2 时只会收到 {error, closed}。被动套接字调用现在将返回 {error, error_alert()}。

    自有 ID: OTP-19236 辅助 ID: PR-8261

  • 重构试图进行一些优化,在 OTP-26.2.1 中的签名算法检查中引入了一个错误。这可能表现为无法使用需要使用某些 TLS-1.2 兼容旧签名方案的证书来协商连接。

    自有 ID: OTP-19249 辅助 ID: ERIERL-1137, PR-8866

  • 配置为仅支持版本(pre TLS-1.2)的服务器应忽略 hello 版本扩展,因为它对它们来说是未知的扩展,这将导致不支持旧服务器版本的新客户端从服务器收到安全不足警报,而不是协议版本警报,这与旧服务器无法支持更高协议版本的方式一致。

    自有 ID: OTP-19257 辅助 ID: ERIERL-1131

  • 更正为自己的警报运行的终止代码的超时处理,以便使用预期的超时,而不是回退到某些平台上不合理地长的 OS TCP 堆栈超时。

    自有 ID: OTP-19274 辅助 ID: PR-8901

SSL 11.1.4.3

修复的错误和故障

  • 修复了 SSL 分发的 kTLS 版本中的竞争问题,以便 inet_drv.c 不会提前读取过多数据,这可能导致在一些加密数据已被作为未加密数据读取到 inet_drv.c 缓冲区中时,ktLS 加密激活得太晚。

    自有 ID: OTP-19175 辅助 ID: GH-8561, PR-8690

改进和新功能

  • 确保所有 TLS-1.3 终止都是正常的(之前的 TLS 版本终止已经是正常的)。

    自有 ID: OTP-17848

  • 在 SNI(服务器名称指示)不匹配错误的日志记录中包含更多信息。

    自有 ID: OTP-19187

SSL 11.1.4.2

改进和新功能

  • 当使用 signature_algs 的默认值时,将 signature_algs_cert 默认设置为默认值 + rsa_pkcs1_sha1,以允许证书使用此算法,但不允许 TLS 协议使用此算法。这是为了更好的互操作性。如果显式设置了 signature_algs,则如果它们应该不同,则还必须显式设置 signature_algs_cert。

    自有 ID: OTP-19152 辅助 ID: GH-8588

SSL 11.1.4.1

修复的错误和故障

  • 检查 TLS-1.3 支持应检查最低要求。

    自有 ID: OTP-19094 辅助 ID: GH-8489

  • 如果同时支持 TLS-1.3 和 TLS-1.2 并且协商了 TLS-1.2,则将 TLS-1.3 ECDSA 方案转换为 TLS-1.2 哈希和签名对,以提高互操作性。

    自有 ID: OTP-19107 辅助 ID: GH-8376

  • TLS-1.3 协商现在正确使用基于 SNI 的选项,而不是忽略它们。

    自有 ID: OTP-19140

改进和新功能

  • 更容易区分无效签名和不支持的签名。

    自有 ID: OTP-19091

  • 增强 ALERT 日志,以帮助理解导致警报的原因。

    自有 ID: OTP-19092 辅助 ID: GH-8482

SSL 11.1.4

修复的错误和故障

  • 修复证书颁发机构检查,使最接近对端的 CA 不会丢失。这可能会表现为连接失败,因为客户端未能意识到它有一个有效的证书链要发送到服务器。

    自有 ID: OTP-19065 辅助 ID: GH-8356, PR-8367

  • 当列出所有可用算法时,ssl:signature_algs/2 没有正确列出一些旧版算法方案。

    自有 ID: OTP-19067 辅助 ID: PR-8379

SSL 11.1.3

修复的错误和故障

  • 当监听套接字的所有者死亡时,清理并关闭 DTLS 中的所有连接。

    改进了 DTLS 中的 IPv6 处理。

    自有 ID: OTP-19037 辅助 ID: GH-7951 GH-7955

  • 修复了 dtls accept 中的崩溃。

    自有 ID: OTP-19059 辅助 ID: GH-8338

SSL 11.1.2

修复的错误和故障

  • 如果调用适当,ssl:prf/5 将开始工作而不是在 TLS-1.3 上下文中挂起。请注意,实现已更改,并且在 OTP-27 中将记录更合适的 API。

    自有 ID: OTP-18890 辅助 ID: GH-7911

  • 如果使用 IP 地址作为字符串建立连接,则服务器名称验证不起作用。

    自有 ID: OTP-18909 辅助 ID: GH-7968

  • "dh" ssl 选项之后的后备是再次从 ssl 选项中获取 "dh"。这显然是错误的,现在已更改为记录的后备 "dhfile" ssl 选项。

    自有 ID: OTP-18919 辅助 ID: PR-7984

  • DTLS 的正确默认值选择。只会影响链接到非常旧版本的 cryptolib 库的用户。

    自有 ID: OTP-18962 辅助 ID: GH-8079

  • 遵守 RFC 8422 中 TLS-1.3 之前的椭圆曲线,即将 Edwards 曲线添加到可用于密钥交换的曲线中,并对齐 eccs/0,1 的文档和实现。

    自有 ID: OTP-18991

改进和新功能

  • 改进当 ecdhe_rsa 密钥交换没有任何可用的公共曲线时发出的警报原因

    自有 ID: OTP-18985

SSL 11.1.1

修复的错误和故障

  • 旧版名称处理可能会导致 TLS-1.3/1.2 客户端和 TLS-1.2 服务器之间的互操作问题。

    自有 ID: OTP-18917 辅助 ID: GH-7978

SSL 11.1

修复的错误和故障

  • ssl 应用程序将仅在终端实体证书中验证 id-kp-serverAuth 和 id-kp-clientAuth 扩展密钥用法。 public_key 应用程序将禁止 CA 证书使用 "anyExtendedKeyUsage",其中包含扩展密钥用法扩展并将其标记为关键。

    自有 ID: OTP-18739

  • 在一些文件中,将意外的 Erlang Public License 1.1 标头替换为预期的 Apache License 2.0 标头。

    自有 ID: OTP-18815 辅助 ID: PR-7780

  • 正确处理 TLS-1.3 旧版方案名称,可能会导致 TLS-1.2 客户端的互操作失败。

    自有 ID: OTP-18817

  • 为 connection_info() API 类型添加缺失的导出。

    自有 ID: OTP-18886

改进和新功能

  • 修复了 服务器名称指示,该指示未得到正确处理。

    自有 ID: OTP-18836 辅助 ID: GH-7795

  • 对齐文档和实现

    自有 ID: OTP-18853 辅助 ID: PR-7841

  • 通过优化证书查找来改进连接设置。

    自有 ID: OTP-18893 辅助 ID: PR-7920 PR-7921

SSL 11.0.3

修复的错误和故障

  • 通过处理 inet:getopts 可能在某些情况下(例如套接字处于关闭状态)返回空列表,避免 ssl:getopts/2 中的函数子句错误。

    自有 ID: OTP-18697 辅助 ID: GH-7506

  • API 函数 `ssl:recv/3` 已被收紧以禁止负长度,该长度从未记录过可以工作,但已被传递并导致奇怪的错误。

    自有 ID: OTP-18700 辅助 ID: GH-7507

  • 当拒绝客户端发起的重新协商并且客户端套接字处于活动模式时,未发送给控制进程的预期错误消息。

    自有 ID: OTP-18712 辅助 ID: GH-7431

改进和新功能

  • 在 ssl 应用程序用户指南中为签名算法配置添加一些指导。

    自有 ID: OTP-18631

SSL 11.0.2

修复的错误和故障

改进和新功能

  • 为 DTLS 添加 RFC-6083 注意事项,以启用基于 gen_sctp 的传输回调。

    自有 ID: OTP-18618 辅助 ID: ERIERL-932

SSL 11.0.1

修复的错误和故障

  • 确保客户端证书的选择正确处理 TLS-1.3 和 TLS-1.2 名称。可能会导致未选择有效的客户端证书,并向服务器发送一个空的客户端证书消息。

    自有 ID: OTP-18588 辅助 ID: GH-7264, PR-7277

  • 改进了 ssl:format_error/1 以处理更多错误元组。

    自有 ID: OTP-18596 辅助 ID: GH-7247

  • 修复了 ssl 应用程序未启动时 ssl:connect 的挂起。

    自有 ID: OTP-18603 辅助 ID: GH-7297

  • 正确处理重传计时器,当前行为可能会导致不必要的延迟。

    自有 ID: OTP-18632 辅助 ID: PR-7300, GH-7301

SSL 11.0

改进和新特性

  • 在 TLS-1.3 之前的版本中,从默认支持的 ECC 中移除小于 256 位的 ECC。

    * 潜在的不兼容性 *

    内部 ID:OTP-14771

  • 改进了 SSL 选项的错误检查和处理。

    内部 ID:OTP-15903

  • 通过此更改,启用了 anti_replay 选项的服务器生成的无状态票证,可以在整个票证生命周期内用于创建 ClientHello。 在此更改之前,可用性仅限于为 anti_replay 选项配置的 WindowSize 秒数。

    * 潜在的不兼容性 *

    内部 ID:OTP-18168 辅助 ID:PR-6019,GH-6014

  • SSL 应用程序增加了对内核 TLS(kTLS)的支持,用于 TLS 分发(-proto_dist inet_tls),SSL 选项为 {ktls, true}。将其用于常规 SSL 套接字是不方便的,未记录的,不推荐的,因为它需要非常依赖平台的原始选项。

    目前,这仅适用于一些不太旧的 Linux 发行版。 大致上,需要一个支持用户空间协议的 5.2.0 或更高版本的内核以及内核模块 tls

    内部 ID:OTP-18235 辅助 ID:PR-6104,PR-5840

  • 通过此更改,可以将 TLS 1.3 服务器配置为在会话票证中包含客户端证书。

    内部 ID:OTP-18253

  • 通过此更改,可以配置用于 TLS1.3 无状态票证的加密种子。 这使得可以在不同的服务器实例上使用票证。

    内部 ID:OTP-18254 辅助 ID:PR-5982

  • 调试增强。

    内部 ID:OTP-18312

  • 通过此更改,maybe 关键字原子不再在 ssl 代码中用作函数名。

    内部 ID:OTP-18335

  • 将 size/1 替换为 tuple_size/1 或 byte_size/1

    size/1 BIF 不会被 JIT 优化,其使用会导致 Dialyzer 的类型更差。

    当知道被测试的值必须是元组时,应始终首选 tuple_size/1

    当知道被测试的值必须是二进制时,应首选 byte_size/1。但是,byte_size/1 也接受位串(将大小向上舍入为整数个字节),因此必须确保在调用 byte_size/ 之前调用 is_binary/1 以确保拒绝位串。请注意,编译器会删除对 is_binary/1 的冗余调用,因此如果不确定之前的代码是否已确保参数是二进制的,则在调用 byte_size/1 之前添加 is_binary/1 测试是无害的。

    内部 ID:OTP-18405 辅助 ID:GH-6672,PR-6702,PR-6768,PR-6700,PR-6769,PR-6812,PR-6814

  • 出于安全原因,从默认值中删除对 SHA1 和 DSA 算法的支持。

    * 潜在的不兼容性 *

    内部 ID:OTP-18438 辅助 ID:GH-6679

  • 通过降低最大握手大小来缓解大型证书链的内存使用。 这不应影响常见情况,如果需要,可以将其配置为更高的值。

    内部 ID:OTP-18453

  • 将客户端默认验证选项更改为 verify_peer。请注意,这使得必须同时提供受信任的 CA 证书或显式将验证设置为 verify_none。这在使用 TLS 1.3 之前的 TLS 版本中定义的所谓匿名测试密码套件时也适用。

    * 潜在的不兼容性 *

    内部 ID:OTP-18455 辅助 ID:GH-5899

  • Kernel 和 SSL 中的 Erlang 分发代码进行了一些重构,以方便调试和重用,这不应在行为或性能上产生任何明显的影响。

    内部 ID:OTP-18456

  • 添加 use_srtp hello 扩展的编码和解码,以方便 DTLS 用户实现 SRTP 功能。

    内部 ID:OTP-18459

  • 重构 (ssl) 应用程序,以使用宏来表示 TLS 和 DTLS 版本,而不是硬编码的元组编号。 此更改提高了 ssl 的可维护性

    内部 ID:OTP-18465 辅助 ID:GH-7065

  • 如果在运行 TLS-1.3 的连接上调用函数 ssl:renegotiate/1,则返回错误,而不是挂起或超时。

    内部 ID:OTP-18507

  • 如果在握手期间收到级别为 warning 的用户取消警报,则使其处理方式相同,而与 TLS 版本无关。 如果在 TLS-1.3 中的连接中收到该警报,则将其视为错误,因为它是不适当的。

    在 TLS-1.3 中,所有错误警报都被认为是 FATAL,而与旧版警报类型无关。 但是,请确保在日志中打印旧版类型,以免混淆期望与对等方发送的旧版类型相同的用户。

    * 潜在的不兼容性 *

    内部 ID:OTP-18531

  • 如果服务器上设置了 verify_peer,则使 fail_if_no_peer_cert 默认为 true,否则,如果设置了 verify_peer 并且用户忘记设置 fail_if_no_peer_cert 并且客户端未发送证书,则服务器将接受连接。

    内部 ID:OTP-18567

  • 为了更容易地使用从默认值中移出的算法配置签名算法,添加了 API 函数 signature_algs/2,该函数列出了可能的值。 另外,使 sha224 成为非默认值。

    内部 ID:OTP-18572

SSL 10.9.1.7

已修复的错误和故障

  • 避免为应该由 supervisor 正常关闭的情况生成内部警报。

    自有 ID: OTP-19311 辅助 ID: PR-8980

  • 如果存在,则应始终对对等证书执行扩展的密钥用法 TLS (SSL) 角色检查(pk-clientAuthpk-serverAuth)。如果存在 AnyExtendedKeyUsage 目的,则中间 CA 证书可能会放宽此要求。

    在 OTP-25.3.2.8、OTP-26.2 和 OTP-27.0 中,这些要求变得过于宽松。存在两个问题,首先,仅当对等证书扩展被标记为关键时才会对其进行检查,其次,CA 证书检查没有断言放宽的 AnyExtendedKeyUsage 目的。

    这可能导致证书被滥用于证书颁发机构未计划的目的。

    感谢 Bryan Paxton 报告此问题。

    自有 ID: OTP-19352 辅助 ID: PR-9130, CVE-2024-53846, OTP-19240

SSL 10.9.1.6

已修复的错误和故障

  • 从 TLS-1.3 开始,一些服务器握手警报可能会在 ssl:connection/2,3,4 返回后到达。如果套接字处于活动模式,控制进程将收到警报消息,但被动套接字在下次调用 ssl:recv/2,3 或 ssl/setopts/2 时只会收到 {error, closed}。被动套接字调用现在将返回 {error, error_alert()}。

    自有 ID: OTP-19236 辅助 ID: PR-8261

  • 配置为仅支持版本(pre TLS-1.2)的服务器应忽略 hello 版本扩展,因为它对它们来说是未知的扩展,这将导致不支持旧服务器版本的新客户端从服务器收到安全不足警报,而不是协议版本警报,这与旧服务器无法支持更高协议版本的方式一致。

    自有 ID: OTP-19257 辅助 ID: ERIERL-1131

  • 更正为自己的警报运行的终止代码的超时处理,以便使用预期的超时,而不是回退到某些平台上不合理地长的 OS TCP 堆栈超时。

    自有 ID: OTP-19274 辅助 ID: PR-8901

SSL 10.9.1.5

已修复的错误和故障

  • TLS-1.3 协商现在正确使用基于 SNI 的选项,而不是忽略它们。

    自有 ID: OTP-19140

SSL 10.9.1.4

已修复的错误和故障

  • 修复证书颁发机构检查,使最接近对端的 CA 不会丢失。这可能会表现为连接失败,因为客户端未能意识到它有一个有效的证书链要发送到服务器。

    自有 ID: OTP-19065 辅助 ID: GH-8356, PR-8367

SSL 10.9.1.3

已修复的错误和故障

  • ssl 应用程序将仅在终端实体证书中验证 id-kp-serverAuth 和 id-kp-clientAuth 扩展密钥用法。 public_key 应用程序将禁止 CA 证书使用 "anyExtendedKeyUsage",其中包含扩展密钥用法扩展并将其标记为关键。

    自有 ID: OTP-18739

  • 为 connection_info() API 类型添加缺失的导出。

    自有 ID: OTP-18886

SSL 10.9.1.2

已修复的错误和故障

  • API 函数 `ssl:recv/3` 已被收紧以禁止负长度,该长度从未记录过可以工作,但已被传递并导致奇怪的错误。

    自有 ID: OTP-18700 辅助 ID: GH-7507

  • 当拒绝客户端发起的重新协商并且客户端套接字处于活动模式时,未发送给控制进程的预期错误消息。

    自有 ID: OTP-18712 辅助 ID: GH-7431

SSL 10.9.1.1

已修复的错误和故障

改进和新特性

  • 为 DTLS 添加 RFC-6083 注意事项,以启用基于 gen_sctp 的传输回调。

    自有 ID: OTP-18618 辅助 ID: ERIERL-932

SSL 10.9.1

已修复的错误和故障

  • 通过此更改,ssl:connection_information/2 在 TLS1.3 密钥更新后返回正确的密钥日志数据。

    内部 ID:OTP-18489

  • 客户端签名算法列表输入顺序现在再次被遵循,它被之前的修复意外地颠倒了。

    内部 ID:OTP-18550

SSL 10.9

已修复的错误和故障

  • 修复了来自同一客户端 IP 端口组合的新 dtls 连接可以工作的问题。 如果有进程正在等待接受,则新连接将连接到该进程,否则它将尝试重新连接到旧的服务器连接。

    内部 ID:OTP-18371 辅助 ID:GH-6160

  • 在关闭使用 SSL 分发(-proto_dist inet_tls)的节点时,会打印一条关于意外进程退出的令人困惑的错误消息。 不再生成此特定消息。

    内部 ID:OTP-18443 辅助 ID:PR-6810

改进和新特性

  • 修复了 ssl:format_error/1 的类型规范

    内部 ID:OTP-18366 辅助 ID:PR-6565,GH-6506

  • 将 size/1 替换为 tuple_size/1 或 byte_size/1

    size/1 BIF 不会被 JIT 优化,其使用会导致 Dialyzer 的类型更差。

    当知道被测试的值必须是元组时,应始终首选 tuple_size/1

    当知道被测试的值必须是二进制时,应首选 byte_size/1。但是,byte_size/1 也接受位串(将大小向上舍入为整数个字节),因此必须确保在调用 byte_size/ 之前调用 is_binary/1 以确保拒绝位串。请注意,编译器会删除对 is_binary/1 的冗余调用,因此如果不确定之前的代码是否已确保参数是二进制的,则在调用 byte_size/1 之前添加 is_binary/1 测试是无害的。

    内部 ID:OTP-18432 辅助 ID:GH-6672,PR-6793,PR-6784,PR-6787,PR-6785,PR-6682,PR-6800,PR-6797,PR-6798,PR-6799,PR-6796,PR-6813,PR-6671,PR-6673,PR-6684,PR-6694,GH-6677,PR-6696,PR-6670,PR-6674

SSL 10.8.7

改进和新特性

  • 通过忽略握手期间的 change_cipher_spec 来最大化兼容性,即使未协商 middle_box_mode(由客户端强制要求)

    内部 ID:OTP-18433 辅助 ID:GH-6772

  • 将 hello_retry_request 后的 middlebox 消息断言移动,以最大程度地提高互操作性。 不会更改协议的语义,只会允许服务器发送意外的消息延迟。

    内部 ID:OTP-18467 辅助 ID:GH-6807

SSL 10.8.6

已修复的错误和故障

  • 通过此更改,tls_sender 进程在足够的非活动状态后会休眠。

    内部 ID:OTP-18314 辅助 ID:GH-6373

  • 正确处理旧版方案,以便使用 sha1 的 ECDSA 证书可用于某些 TLS-1.3 配置。

    内部 ID:OTP-18332 辅助 ID:GH-6435,PR-6435,ERL-6435

  • 通过此更改,tls_sender 不会在密钥更新时导致记录器崩溃。

    内部 ID:OTP-18349

改进和新特性

  • 增强警告消息

    内部 ID:OTP-18257 辅助 ID:GH-6307

  • 提供服务器选项,使 TLS-1.3 服务器证书请求中的 certificate_authorities 扩展成为可选的。 这将允许客户端发送可能可重建的不完整链,服务器可以对其进行验证,但这不符合 certificate_authorities 扩展。

    内部 ID:OTP-18267 辅助 ID:PR-6228,GH-6106

  • 如果 verify_fun 处理四个参数,则 DER 证书将作为其中一个参数提供。

    内部 ID:OTP-18302 辅助 ID:ERIERL-867

SSL 10.8.5

已修复的错误和故障

  • 修复了 cacertfile 选项中符号链接的处理。

    内部 ID:OTP-18266 辅助 ID:GH-6328

SSL 10.8.4

已修复的错误和故障

  • 在所有 TLS 版本的相关位置拒绝意外的应用程序数据。 此外,更加谨慎地处理 TLS-1.3 middlebox 兼容性。 这将使恶意连接提早失败,并进一步缓解可能由握手超时捕获的 DoS 攻击。

    感谢来自 Télécom SudParis 的 Aina Toky Rasoamanana 和 Olivier Levillain 提醒我们实现中的问题。

    内部 ID:OTP-18044

  • 通过此更改,将在从文件加载证书之前调整 cacertfile 选项的值。 调整包括将相对路径转换为绝对路径,并将符号链接转换为实际文件路径。

    感谢 Marcus Johansson

    内部 ID:OTP-18099 辅助 ID:PR-6287

  • 在 TLS-1.3 中,如果缺少链证书(因此无法确定服务器身份验证域的遵守情况),则发送对等证书并希望服务器能够在其身份验证域中重建链。

    内部 ID:OTP-18191 辅助 ID:GH-6105

  • 确保 CA 证书文件的定期刷新可以正确地重新填充缓存。

    内部 ID:OTP-18195

  • 修正内部 CRL 缓存函数,使其一致地使用内部格式。

    自身 ID:OTP-18203 辅助 ID:PR-5996

  • 对 TLS-1.3 的客户端中间盒协商处理不当可能导致 TLS-1.3 服务器未使用中间盒模式,即使客户端期望如此,从而导致协商失败并出现意外消息。

    自身 ID:OTP-18219 辅助 ID:GH-6241, PR-6249

  • 如果启动 TLS 连接的“用户”进程在生成动态连接树的过程中被终止,请确保不会留下任何进程。

    自身 ID:OTP-18233 辅助 ID:GH-6244, PR-6270

改进和新功能

  • 已发现并纠正了一个漏洞。它注册为 CVE-2022-37026 “客户端身份验证绕过”。已在支持的跟踪版本中发布了补丁 23.3.4.15、24.3.4.2 和 25.0.2。该漏洞可能也存在于较旧的 OTP 版本中。我们建议受影响的用户升级到这些版本之一或后续版本。OTP 25.1 将是更好的选择。受影响的是那些直接或间接通过其他应用程序(例如通过 inets (httpd)、cowboy 等)运行使用 ssl 应用程序的 ssl/tls/dtls 服务器的用户。请注意,该漏洞仅影响请求客户端证书的服务器,即设置选项 {verify, verify_peer}。

    自身 ID:OTP-18241

SSL 10.8.3

修复的错误和故障

  • 指向 crypto:engine_load 的链接引用了具有错误参数数量的函数。

    自身 ID:OTP-18173

SSL 10.8.2

修复的错误和故障

  • 改进了握手期间对意外消息的处理,对意外消息采取正确的措施。

    自身 ID:OTP-18145

SSL 10.8.1

修复的错误和故障

  • 当启用 TLS-1.3 的客户端尝试与通过一个 TLS 记录合并 TLS-1.2 握手消息的 TLS-1.2 服务器通信时,由于某些消息在错误的状态下处理,连接可能会失败,此问题已得到修复。

    自身 ID:OTP-18087 辅助 ID:GH-5961

  • 通过提供给 ssl:handshake/[2,3] 的 sni_fun 以及 TCP 套接字(所谓的升级),正确处理支持的协议版本从默认值更改为其他值的情况。

    自身 ID:OTP-18100 辅助 ID:GH-5985

  • 此外,如果尝试使用支持但未配置的先前版本,TLS-1.3 应使用协议版本警报进行响应。

    自身 ID:OTP-18129 辅助 ID:GH-5950

SSL 10.8

修复的错误和故障

  • 当启用 TLS-1.3 的客户端尝试与通过一个 TLS 记录合并 TLS-1.2 握手消息的 TLS-1.2 服务器通信时,由于某些消息在错误的状态下处理,连接可能会失败,此问题已得到修复。

    自身 ID:OTP-18087 辅助 ID:GH-5961

  • 修复了 tls-1.3 会话票证的生命周期,该生命周期之前被过快地丢弃了。

    自身 ID:OTP-18092 辅助 ID:PR-5959

改进和新功能

  • 通过此更改,可以提供多个证书。将根据协商的属性选择最合适的证书。

    自身 ID:OTP-15993 辅助 ID:GH-4143

  • 添加选项供用户为 TLS 进程(发送方和接收方)设置 spawn_opts,这可能有助于调整 CPU 和内存使用之间的权衡。

    自身 ID:OTP-17855 辅助 ID:PR-5328

  • 允许将密钥文件密码作为单个二进制文件输入,即将数据类型更改为更适合此目的的逻辑数据类型 iodata() 而不是 string()。

    自身 ID:OTP-17890

  • 日志记录增强功能,将位置信息添加到警告日志消息中。

    自身 ID:OTP-18000 辅助 ID:PR-5790

  • 现在也接受 TLS-1.2 配置中的 signature_algs_cert 选项。

    自身 ID:OTP-18014

  • 正确处理服务器回退和证书颁发机构考虑的证书选择。

    自身 ID:OTP-18045 辅助 ID:ERIERL-792, OTP-15993

  • 增强对握手解码错误的错误处理,特别是对于证书颁发机构扩展,以确保正常终止。

    自身 ID:OTP-18085

SSL 10.7.3.9

修复的错误和故障

  • 当拒绝客户端发起的重新协商并且客户端套接字处于活动模式时,未发送给控制进程的预期错误消息。

    自有 ID: OTP-18712 辅助 ID: GH-7431

SSL 10.7.3.8

修复的错误和故障

改进和新功能

  • 为 DTLS 添加 RFC-6083 注意事项,以启用基于 gen_sctp 的传输回调。

    自有 ID: OTP-18618 辅助 ID: ERIERL-932

SSL 10.7.3.7

修复的错误和故障

  • 客户端签名算法列表输入顺序现在再次被遵循,它被之前的修复意外地颠倒了。

    内部 ID:OTP-18550

SSL 10.7.3.6

改进和新功能

  • 通过忽略握手期间的 change_cipher_spec 来最大化兼容性,即使未协商 middle_box_mode(由客户端强制要求)

    内部 ID:OTP-18433 辅助 ID:GH-6772

  • 将 hello_retry_request 后的 middlebox 消息断言移动,以最大程度地提高互操作性。 不会更改协议的语义,只会允许服务器发送意外的消息延迟。

    内部 ID:OTP-18467 辅助 ID:GH-6807

SSL 10.7.3.5

修复的错误和故障

  • 修复了 cacertfile 选项中符号链接的处理。

    内部 ID:OTP-18266 辅助 ID:GH-6328

SSL 10.7.3.4

修复的错误和故障

  • 通过此更改,将在从文件加载证书之前调整 cacertfile 选项的值。 调整包括将相对路径转换为绝对路径,并将符号链接转换为实际文件路径。

    感谢 Marcus Johansson

    内部 ID:OTP-18099 辅助 ID:PR-6287

  • 对 TLS-1.3 的客户端中间盒协商处理不当可能导致 TLS-1.3 服务器未使用中间盒模式,即使客户端期望如此,从而导致协商失败并出现意外消息。

    自身 ID:OTP-18219 辅助 ID:GH-6241, PR-6249

  • 如果启动 TLS 连接的“用户”进程在生成动态连接树的过程中被终止,请确保不会留下任何进程。

    自身 ID:OTP-18233 辅助 ID:GH-6244, PR-6270

SSL 10.7.3.3

修复的错误和故障

  • 在所有 TLS 版本的相关位置拒绝意外的应用程序数据。 此外,更加谨慎地处理 TLS-1.3 middlebox 兼容性。 这将使恶意连接提早失败,并进一步缓解可能由握手超时捕获的 DoS 攻击。

    感谢来自 Télécom SudParis 的 Aina Toky Rasoamanana 和 Olivier Levillain 提醒我们实现中的问题。

    内部 ID:OTP-18044

  • 指向 crypto:engine_load 的链接引用了具有错误参数数量的函数。

    自身 ID:OTP-18173

  • 确保 CA 证书文件的定期刷新可以正确地重新填充缓存。

    内部 ID:OTP-18195

SSL 10.7.3.2

修复的错误和故障

  • 改进了握手期间对意外消息的处理,对意外消息采取正确的措施。

    自身 ID:OTP-18145

SSL 10.7.3.1

修复的错误和故障

  • 当启用 TLS-1.3 的客户端尝试与通过一个 TLS 记录合并 TLS-1.2 握手消息的 TLS-1.2 服务器通信时,由于某些消息在错误的状态下处理,连接可能会失败,此问题已得到修复。

    自身 ID:OTP-18087 辅助 ID:GH-5961

  • 修复了 tls-1.3 会话票证的生命周期,该生命周期之前被过快地丢弃了。

    自身 ID:OTP-18092 辅助 ID:PR-5959

  • 通过提供给 ssl:handshake/[2,3] 的 sni_fun 以及 TCP 套接字(所谓的升级),正确处理支持的协议版本从默认值更改为其他值的情况。

    自身 ID:OTP-18100 辅助 ID:GH-5985

  • 此外,如果尝试使用支持但未配置的先前版本,TLS-1.3 应使用协议版本警报进行响应。

    自身 ID:OTP-18129 辅助 ID:GH-5950

改进和新功能

  • 增强对握手解码错误的错误处理,特别是对于证书颁发机构扩展,以确保正常终止。

    自身 ID:OTP-18085

SSL 10.7.3

修复的错误和故障

  • 如果启用 TLS-1.3 的客户端与服务器协商 TLS-1.2 连接,则客户端证书验证可能会失败,这是因为在解码来自服务器的证书请求消息时使用了错误的版本。

    自身 ID:OTP-18028 辅助 ID:GH-5835

  • ssl:setops/2 和 ssl:getotps/2 中未处理套接字选项 packet_size。

    自身 ID:OTP-18062 辅助 ID:GH-5898

  • 删除旧代码以修复与新套接字 inet_backend 的互操作性。

    自身 ID:OTP-18071 辅助 ID:GH-5930

SSL 10.7.2

修复的错误和故障

  • 通过此更改,避免了 pre TLS1.3 客户端接收 OSCP 装订消息时可能发生的挂起。

    自身 ID:OTP-17994

SSL 10.7.1

修复的错误和故障

  • 对于未在其证书请求消息中包含 certificate_authorities 扩展的 TLS-1.3 服务器,客户端证书验证可能会失败。

    自身 ID:OTP-17971 辅助 ID:GH-5783

SSL 10.7

修复的错误和故障

  • 改进了错误处理。

    自身 ID:OTP-17759 辅助 ID:GH-5367

  • 在此更改之前,如果存在连接问题,与 TLS 分布一起使用的 net_kernel 可能会泄漏进程。

    自身 ID:OTP-17815 辅助 ID:GH-5332

  • 修复 makefile 依赖性错误。

    自身 ID:OTP-17847 辅助 ID:PR-5574 GH-5548

  • 确保 TLS 发送方进程正确处理对 erlang:disconnect_node 的显式调用,避免 net_kernel 中潜在的挂起问题。

    自身 ID:OTP-17929 辅助 ID:GH-5708

改进和新功能

  • 添加对 TLS-1.3 certificate_authorities 扩展的支持。并处理 pre-TLS-1.3 证书请求中的 certificate_authorities 字段。

    自身 ID:OTP-15719

  • 支持 ssl:connect 函数中受保护的密钥文件的密码函数。

    自身 ID:OTP-17816 辅助 ID:PR-5607

  • 在某些情况下,通过恶意客户端发送意外 TLS 消息而不是客户端 hello 来提前检测可能的 DoS 攻击。请注意,通过为 TLS 握手提供超时时间,已缓解此类攻击。

    自身 ID:OTP-17903

SSL 10.6.1

修复的错误和故障

  • 改进 SNI(服务器名称指示)处理,以便可以根据 SNI 选择协议版本。此外,请确保 ssl:connection_information/1 返回正确的 SNI 值。

    自身 ID:OTP-17794 辅助 ID:GH-5341, GH-4450

  • 修复了密码套件列表函数,以便所有密码套件的列表将是完整的。OTP-24.1 中密码套件处理的另一个修复程序意外地从所有密码套件的列表中排除了一些密码套件。

    自身 ID:OTP-17829 辅助 ID:ERIERL-708

  • 重新启用 TLS-1.2 中显式配置的旧密码套件 TLS_RSA_WITH_3DES_EDE_CBC_SHA,默认情况下不支持。

    自身 ID:OTP-17879 辅助 ID:GH-5624

改进和新功能

  • 通过更好地调整 tls_sender 进程以适应 OTP-24.2 中的新 supervisor 结构,避免不必要的日志。

    自有 ID: OTP-17831

SSL 10.6

修复的错误和故障

  • 允许在 DTLS 套接字上重新连接

    当计算机重启并从相同的客户端端口连接而服务器没有注意到时,根据 RFC 应该允许这样做。

    自有 ID: OTP-17411 辅助 ID: ERL-1203, GH-4393

  • 修复 tls 和非 tls 分布,使其使用 erl_epmd:address_please 来确定在连接到远程节点时应该使用 IPv4 还是 IPv6 地址。

    在此修复之前,远程节点主机名的 DNS 查找确定了要使用的 IP 版本,这意味着主机名必须解析为有效的 IP 地址。

    自有 ID: OTP-17809 辅助 ID: PR-5337 GH-5334

改进和新功能

  • 使用 supervisor 的重要子进程来管理 tls 连接进程和 tls 发送进程的依赖关系。

    自有 ID: OTP-17417

  • TLS1.3 的随机生成调整

    自有 ID: OTP-17699

  • 允许客户端 hello 中使用任何 {03,XX} TLS 记录版本,以实现最大程度的互操作性

    自有 ID: OTP-17761 辅助 ID: GH-5380

SSL 10.5.3

修复的错误和故障

  • 更正签名算法处理中 ECC 曲线名称的拼写错误。这将使签名算法 ecdsa_secp521r1_sha512 成功。

    自有 ID: OTP-17756 辅助 ID: GH-5383, PR-5397

  • 当显式提供选项 verify_none 时,抑制真实性警告。

    自有 ID: OTP-17757 辅助 ID: GH-5352, PR-5395

SSL 10.5.2

修复的错误和故障

  • 修复 TLS-1.2 RSA-PSS 协商,并修复 TLS-1.3 之前服务器的损坏的证书请求消息。

    自有 ID: OTP-17688 辅助 ID: GH-5255

  • 修复 CRL 颁发者验证,该验证在某些情况下可能会因 function_clause 错误而失败。

    自有 ID: OTP-17723 辅助 ID: GH-5300

SSL 10.5.1

修复的错误和故障

  • 在此更改之前,当用于降级套接字的数据与 CLOSE_NOTIFY 警报一起传递到 ssl 应用程序时,TLS 降级偶尔会失败。

    自有 ID: OTP-17393

  • 避免重新编码已解码的证书。这可能会导致意外故障,因为在解码时可以容忍一些细微的编码错误,但如果重新编码解码的值,则会创建另一个字节序列。

    自有 ID: OTP-17657

  • 修复在执行 ssl:transport_accept 的进程在启动 TLS 握手之前死亡时可能发生的进程泄漏。

    自有 ID: OTP-17666 辅助 ID: GH-5239

  • 修复 dtls 内存泄漏,重放窗口代码已损坏。

    自有 ID: OTP-17670 辅助 ID: GH-5224

SSL 10.5

修复的错误和故障

  • 修复 Makefile 依赖项生成,使其无论 ERL_TOP 文件夹的名称如何都有效。

    自有 ID: OTP-17423 辅助 ID: GH-4823 PR-4829

  • 如果尝试将 TLS-1.3 连接降级为纯 TCP 连接,则在等待关闭通知警报时,将忽略 “降级” 状态中可能的 TLS-1.3 会话票证消息。

    自有 ID: OTP-17517 辅助 ID: GH-5009

  • 更正了错误处理,以便在 TLS-1.3 中没有可以协商的合适组时正确生成安全不足警报,而不是崩溃并导致内部错误警报。

    自有 ID: OTP-17521

  • 正确处理默认会话数据存储。

    当客户端尝试重用过期的会话时,默认服务器存储处理会崩溃,从而丢失其他会话数据。这会导致错误报告并可能丢失缩写的握手。

    自有 ID: OTP-17635 辅助 ID: GH-5192

改进和新功能

  • 在 TLS-1.2 中添加对 RSA-PSS-PSS 签名和 signature_algorithms_cert 的支持。这是 TLS-1.3 RFC 要求反向移植此功能。

    自有 ID: OTP-16590 辅助 ID: ERL-625, GH-5029

  • 使用 inet:monitor/1 来监控侦听套接字,以便我们与 gen_tcp 的新套接字后端兼容。

    自有 ID: OTP-17392 辅助 ID: PR-5050

  • 增强 ssl:prf/4 处理和测试

    自有 ID: OTP-17464

  • 增强的密码套件过滤功能,确保即使包含 TLS-1.2 匿名密码,也可以正确地一起支持 TLS-1.3 和 TLS-1.2 密码套件。

    自有 ID: OTP-17501 辅助 ID: GH-4978

  • 增强优雅性,尤其是在 TLS-1.3 中

    自有 ID: OTP-17530

SSL 10.4.2

修复的错误和故障

  • 处理旧根过期时交叉签名的根证书,如 GH-4877 中报告的那样。

    自有 ID: OTP-17475 辅助 ID: GH-4877

  • 签名选择算法已更改为还验证客户端是否支持使用服务器公钥/私钥对的椭圆曲线的签名。此更改修复了 #4958。

    自有 ID: OTP-17529 辅助 ID: PR-4979, GH-4958

改进和新功能

  • 稍微优化了证书解码。

    自有 ID: OTP-17150 辅助 ID: GH-4877

SSL 10.4.1

修复的错误和故障

  • 修复由 cacertfile 选项提供的 CA 证书的缓存失效问题。

    自有 ID: OTP-17435 辅助 ID: ERIERL-653

SSL 10.4

修复的错误和故障

  • 此应用程序已添加缺失的运行时依赖项。

    自有 ID: OTP-17243 辅助 ID: PR-4557

  • 如果请求了 OCSP 装订但缺少,则 TLS 握手应失败。请注意,OCSP 支持仍然被认为是实验性的,并且仅部分实现。

    自有 ID: OTP-17343

改进和新功能

  • 删除了 ssl:ssl_accept/1,2,3 和 ssl:cipher:suites/0,1,请改用 ssl:handshake/1,2,3 和 ssl:cipher_suites/2,3。

    * 潜在的不兼容性 *

    自有 ID: OTP-16974

  • 使 Erlang 分布中的 TLS 握手并发。

    自有 ID: OTP-17044 辅助 ID: PR-2654

  • 在 TLS 上运行 Erlang 分布时,随机化内部 {active,n} 优化,以分散启动大型集群时可能发生的 RAM/CPU 峰值。

    自有 ID: OTP-17117 辅助 ID: PR-2933

  • TLS 连接现在支持 EdDSA 证书。

    自有 ID: OTP-17142 辅助 ID: PR-4756, GH-4637, GH-4650

  • 增强证书处理的文档和日志记录。

    自有 ID: OTP-17384 辅助 ID: GH-4800

SSL 10.3.1.5

修复的错误和故障

  • 更正 TLS-1.3 之前版本的意外消息处理的极端情况,可能会导致“后期失败”,并使服务器依赖其握手超时来防止可能的 DoS 攻击。

    自有 ID: OTP-18224

SSL 10.3.1.4

修复的错误和故障

  • 指向 crypto:engine_load 的链接引用了具有错误参数数量的函数。

    自身 ID:OTP-18173

SSL 10.3.1.3

修复的错误和故障

  • 改进了握手期间对意外消息的处理,对意外消息采取正确的措施。

    自身 ID:OTP-18145

SSL 10.3.1.2

修复的错误和故障

  • 处理旧根过期时交叉签名的根证书,如 GH-4877 中报告的那样。

    自有 ID: OTP-17475 辅助 ID: GH-4877

  • 签名选择算法已更改为还验证客户端是否支持使用服务器公钥/私钥对的椭圆曲线的签名。此更改修复了 #4958。

    自有 ID: OTP-17529 辅助 ID: PR-4979, GH-4958

改进和新功能

  • 稍微优化了证书解码。

    自有 ID: OTP-17150 辅助 ID: GH-4877

SSL 10.3.1.1

修复的错误和故障

  • 修复由 cacertfile 选项提供的 CA 证书的缓存失效问题。

    自有 ID: OTP-17435 辅助 ID: ERIERL-653

SSL 10.3.1

修复的错误和故障

  • 在处理不可验证的不完整链时,保留 verify_fun 的向后兼容行为。

    自有 ID: OTP-17296 辅助 ID: GH-4682

  • 避免服务器会话处理程序崩溃,这将增加会话重用的机会。

    自有 ID: OTP-17348 辅助 ID: ERIERL-641

SSL 10.3

修复的错误和故障

  • 修复 CRL 处理,该处理先前可能在某些情况下未能找到颁发者证书。

    自有 ID: OTP-17261 辅助 ID: GH-4589

  • TLS-1.3 客户端在某些情况下可能会选择错误的算法来签署证书验证消息,从而导致服务器发出 TLS 解密警报。

    自有 ID: OTP-17281 辅助 ID: GH-4620

  • 更正对模拟套接字选项的默认值的处理,并保留 ssl 选项列表的顺序,以确保如果选项应多次设置,则具有向后兼容的行为。

    自有 ID: OTP-17282

改进和新功能

  • 增强 TLS-1.3 之前的会话处理,以便客户端和服务器端的处理完全分离,并且客户端在达到会话表的最大限制时忽略最旧的会话。

    自有 ID: OTP-16876

  • 此更改为 TLS 1.3 客户端实现了早期数据功能。

    TLS 1.3 允许客户端使用预共享密钥在第一个过程中发送数据,以验证服务器并加密早期数据。

    自有 ID: OTP-16985

  • 此更改为 TLS 1.3 服务器实现了早期数据功能。

    自有 ID: OTP-17042

SSL 10.2.4.4

修复的错误和故障

  • 改进了握手期间对意外消息的处理,对意外消息采取正确的措施。

    自身 ID:OTP-18145

SSL 10.2.4.3

已修复的 Bug 和故障

  • 修复由 cacertfile 选项提供的 CA 证书的缓存失效问题。

    自有 ID: OTP-17435 辅助 ID: ERIERL-653

SSL 10.2.4.2

已修复的 Bug 和故障

  • 修复了模拟套接字选项的处理,之前的补丁不完整。

    自有 ID:OTP-17305

SSL 10.2.4.1

已修复的 Bug 和故障

  • OTP-17282 的向后移植

    更正对模拟套接字选项的默认值的处理,并保留 ssl 选项列表的顺序,以确保如果选项应多次设置,则具有向后兼容的行为。

    自有 ID:OTP-17289 辅助 ID:GH-4585

SSL 10.2.4

已修复的 Bug 和故障

  • 增强了日志选项 log_level,以支持 none 和 all,并恢复了 log_alert 选项的向后兼容性。

    自有 ID:OTP-17228 辅助 ID:ERIERL-614

SSL 10.2.3

已修复的 Bug 和故障

  • 避免当最初两个升级服务器握手(即使用 gen_tcp 套接字作为 ssl:handshake/2,3 输入的服务器)彼此非常接近地启动时出现竞争。可能会导致其中一个握手失败。

    自有 ID:OTP-17190 辅助 ID:ERIERL-606

SSL 10.2.2

已修复的 Bug 和故障

  • 避免升级(从 TCP 到 TLS)服务器为同一服务器启动多个会话缓存处理程序。这适用于通过 TLS 服务器的 Erlang 分布。

    自有 ID:OTP-17139 辅助 ID:ERL-1458, OTP-16239

  • TLS-1.2 之前定义的(但仍然支持的)传统密码套件应该可以在 TLS-1.2 中使用。在 OTP-23.2.2 中,它们被意外地从 TLS-1.2 的可用密码套件中排除。

    自有 ID:OTP-17174 辅助 ID:ERIERL-597

改进和新功能

  • 使通过 TLS 的 Erlang 分布能够运行 TLS-1.3,尽管 TLS-1.2 仍将是默认设置。

    自有 ID:OTP-16239 辅助 ID:ERL-1458, OTP-17139

SSL 10.2.1

已修复的 Bug 和故障

  • 修复 CVE-2020-35733,这仅影响 ssl-10.2 (OTP-23.2)。此漏洞可能导致使用伪造的链到已知的受信任 ROOT 的中间人攻击。还限制了对可能存在的无关证书的替代链处理,以改进内存管理。

    自有 ID:OTP-17098

改进和新功能

  • 添加对 RFC 7251 中定义的基于 AES CCM 的密码套件的支持

    还修正了密码套件名称到 OpenSSL 名称的转换。一些名称在 OTP-16267 中被提前修正。出于向后兼容的原因,我们支持使用 OpenSSL 名称作为密码套件。大多数匿名套件名称不正确,但也有一些传统套件。

    自有 ID:OTP-17100

SSL 10.2

已修复的 Bug 和故障

  • SSL 的 Erlang 分布协议模块 inet_tls_dist 和 inet6_tls_dist 缺少回调函数,因此启动标志 "-dist_listen false" 不起作用,现在已修复。

    自有 ID:OTP-15126 辅助 ID:ERL-1375

  • 修正了在名称中使用 DHE 的较新密码套件的 OpenSSL 名称,在修复其他使用 EDH 的旧名称时,这些名称意外地获得了错误的值。

    自有 ID:OTP-16267 辅助 ID:ERIERL-571, ERIERL-477

  • 此更改改进了 DTLS 监听套接字的处理,使其可以在同一端口上使用不同的 IP 地址打开多个监听器。

    自有 ID:OTP-16849 辅助 ID:ERL-1339

  • 修复了导致交叉构建失败的错误。

    此更改将 ssl.d 依赖文件从源 tarball 中排除。

    自有 ID:OTP-16921

  • 此更改修复了在 DTLS 客户端套接字上调用 ssl:peername/1 的问题。

    自有 ID:OTP-16923 辅助 ID:ERL-1341, PR-2786

  • 保留对已关闭套接字上的 active once 的模拟,使其行为与 23.1 之前相同。

    自有 ID:OTP-17018 辅助 ID:ERL-1409

  • 更正了 TLS-1.3 之前的服务器会话缓存条目删除。可能会增加会话重用。

    自有 ID:OTP-17019 辅助 ID:ERL-1412

改进和新功能

  • 处理证书链中无关的证书以及不完整但可以重建或无序的链。 cert 和 certfile 选项现在将接受证书列表,以便用户可以显式指定链。

    此外,depth 选项的默认值已增加,以默认允许更长的链。

    自有 ID:OTP-16277

  • 此更改在 ssl:connection_information/2 中实现了可选的 NSS 样式密钥日志,用于调试目的。

    密钥日志包含各种 TLS 机密,可以加载到 Wireshark 中以解密 TLS 数据包。

    自有 ID:OTP-16445 辅助 ID:PR-2823

  • 使用更改回调模式的新 gen_statem 功能来提高代码可维护性。

    自有 ID:OTP-16529

  • 服务名称指示的处理已与 RFC8446 对齐。

    自有 ID:OTP-16762

  • 为 TLS 客户端添加显式会话重用选项,用于 TLS-1.3 之前的会话。此外,还为用户指南添加了此类会话的文档。

    自有 ID:OTP-16893

SSL 10.1

已修复的 Bug 和故障

  • 如果创建了一个被动套接字,则永远不会调用 ssl:recv/2,3,然后对端关闭该套接字,控制进程将不再接收主动关闭消息。

    自有 ID:OTP-16697 辅助 ID:ERIERL-496

  • 当使用数据包模式时,ssl:recv/2,3 的数据传递可能会失败。这已通过更正使用数据包模式时被动套接字的流控制处理来修复。

    自有 ID:OTP-16764

  • 此更改修复了当 ssl 客户端配置为自动处理会话票证 ({session_tickets, auto}) 时,可能存在的中间人漏洞。

    自有 ID:OTP-16765

  • 修复了选项“verify”和“verify_fun”的内部处理。

    此更改修复了当在持续握手中将 ssl 选项“verify”设置为 verify_peer 时,不会生效,从而导致接受过期的对等证书的漏洞。

    自有 ID:OTP-16767 辅助 ID:ERIERL-512

  • 此更改修复了启用反重放时无状态会话票证的处理。

    自有 ID:OTP-16776 辅助 ID:ERL-1316

  • 修复了由于服务器期望无状态会话票证而错误地处理服务器接收的有状态会话票证导致的崩溃。

    此更改还改进了错误/无效票证的处理。

    自有 ID:OTP-16777 辅助 ID:ERL-1317

  • 更正了 OTP-16764 中的流控制检查,使其按预期工作。可能不会有明显的影响,但在某些情况下会使连接更加规范。

    自有 ID:OTP-16837 辅助 ID:ERL-1319, OTP-16764

  • 当存在持续的分布消息流时,通过 TLS 的分布可能会表现出类似活锁的行为。现在每 16 Mb 将分布数据分块,以避免这种情况。

    自有 ID:OTP-16851 辅助 ID:PR-2703

改进和新功能

  • 为 TLS 1.3 实现 cookie 扩展。

    自有 ID:OTP-15855

  • 实验性的 OCSP 客户端支持。

    自有 ID:OTP-16448

  • TLS 1.0 - TLS-1.2 会话表现在具有一个绝对最大值,而不是在达到限制时使用收缩机制。为了避免在高负载情况下出现内存不足的问题。请注意,此更改意味着 ssl_session_cache_api 的实现需要实现大小函数(在 OTP 19 中引入),以便最佳地利用会话重用。

    自有 ID:OTP-16802 辅助 ID:ERIERL-516

SSL 10.0

已修复的 Bug 和故障

  • 修复了导致交叉构建失败的错误。

    此更改将 ssl.d 依赖文件从源 tarball 中排除。

    自有 ID:OTP-16562 辅助 ID:ERL-1168

  • 修正了两个传统密码套件的 OpenSSL 传统名称的转换

    自有 ID:OTP-16573 辅助 ID:ERIERL-477

  • 更正了 PSK 标识和 SRP 用户名的文档。

    自有 ID:OTP-16585

  • 确保当客户端使用自己的 verify_fun 时运行客户端主机名检查

    自有 ID:OTP-16626 辅助 ID:ERL-1232

  • 改进了 TLS 1.3 中的签名选择机制,以提高互操作性。

    自有 ID:OTP-16638 辅助 ID:ERL-1206

改进和新功能

  • 放弃对 SSL-3.0 的支持。自 OTP 19 以来,默认情况下未启用对此传统 TLS 版本的支持。现在已删除所有支持它的代码,即无法使用 SSL-3.0 协议版本,并且被视为无效。

    * 潜在的不兼容性 *

    自有 ID:OTP-14790

  • 添加了对 RSA-PSS 签名方案的支持

    自有 ID:OTP-15247

  • 通过实现中间盒兼容模式来提高互操作性。

    中间盒兼容模式使 TLS 1.3 握手看起来更像 TLS 1.2 握手,并增加了通过传统中间盒成功建立 TLS 1.3 连接的机会。

    自有 ID:OTP-15589

  • 利用 erlang:dist_ctrl_get_data() 的新属性来提高通过 TLS 的 Erlang 分布的性能。

    自有 ID:OTP-16127 辅助 ID:OTP-15618

  • 旧 Crypto API 中已弃用函数的调用替换为对其替代函数的调用。

    自有 ID:OTP-16346

  • 实现密码套件 TLS_AES_128_CCM_8_SHA256。

    自有 ID:OTP-16391

  • 此更改将 TLS-1.3 添加到默认支持的版本列表中。即,当未显式设置 ssl 选项“versions”时,将配置 TLS-1.3 和 TLS-1.2。

    * 潜在的不兼容性 *

    自有 ID:OTP-16400

  • 重构了已弃用和已删除函数的内部处理。

    自有 ID:OTP-16469

  • 扩展了 ssl:versions,使其列出支持、可用和已实现的 TLS/DTLS 版本。

    自有 ID:OTP-16519

  • 为 ssl:cipher_suites/2,3 添加了新选项 exclusive。

    自有 ID:OTP-16532

  • 通过使会话票证 ID 不可预测,避免针对有状态的 session_tickets 的 DoS 攻击。

    自身 ID:OTP-16533

  • 添加对 max_fragment_length 扩展(RFC 6066)的支持。

    自身 ID:OTP-16547 辅助 ID:PR-2547

  • 在 ssl:connection_info 中添加 srp_username,并更新此函数的文档类型。

    自身 ID:OTP-16584

SSL 9.6.2.3

修复的 Bug 和故障

  • 更正了 OTP-16764 中的流控制检查,使其按预期工作。可能不会有明显的影响,但在某些情况下会使连接更加规范。

    自有 ID:OTP-16837 辅助 ID:ERL-1319, OTP-16764

  • 修复了导致交叉构建失败的错误。

    此更改将 ssl.d 依赖文件从源 tarball 中排除。

    自有 ID:OTP-16921

SSL 9.6.2.2

修复的 Bug 和故障

  • 当使用数据包模式时,ssl:recv/2,3 的数据传递可能会失败。这已通过更正使用数据包模式时被动套接字的流控制处理来修复。

    自有 ID:OTP-16764

  • 修复了选项“verify”和“verify_fun”的内部处理。

    此更改修复了当在持续握手中将 ssl 选项“verify”设置为 verify_peer 时,不会生效,从而导致接受过期的对等证书的漏洞。

    自有 ID:OTP-16767 辅助 ID:ERIERL-512

SSL 9.6.2.1

改进和新功能

  • 如果创建了一个被动套接字,则永远不会调用 ssl:recv/2,3,然后对端关闭该套接字,控制进程将不再接收主动关闭消息。

    自有 ID:OTP-16697 辅助 ID:ERIERL-496

SSL 9.6.2

修复的 Bug 和故障

  • 修复在 ssl:recv/3 调用超时后可能导致 ssl 套接字无响应的定时错误

    自身 ID:OTP-16619 辅助 ID:ERL-1213

SSL 9.6.1

修复的 Bug 和故障

  • 当 partial_chain 函数声称证书是链中不属于该链的可信证书时,更正错误处理。此错误会隐藏适当的警报,反而生成 "INTERNAL_ERROR" 警报。

    自身 ID:OTP-16567 辅助 ID:ERIERL-481

SSL 9.6

修复的 Bug 和故障

  • 更正 TLS-1.3 中 TLS 记录限制的处理。最大值与以前的版本不同。此外,有效负载数据的最大记录检查也已损坏,也就是说,如果用户发送大量数据,可能会发生记录溢出问题。

    自身 ID:OTP-16258

  • 更正 DTLS 的关闭处理

    自身 ID:OTP-16348 辅助 ID:ERL-1110

  • 修复 ssl:getstat/1-2 以使其也适用于 DTLS 套接字

    自身 ID:OTP-16352 辅助 ID:ERL-1099

  • 更正套接字活动模式的内部处理,以避免恢复针对降级的 TLS 套接字的 TCP 数据。

    自身 ID:OTP-16425

  • 当使用主机名作为 SNI(服务器名称指示)的后备时,请去除主机名中允许但在 SNI 中不允许的可能尾随点。此外,如果服务器收到带有尾随点的 SNI,则发送一个 UNRECOGNIZED_NAME 警报。

    自身 ID:OTP-16437 辅助 ID:ERL-1135

  • 如果在传输层突然关闭握手,则立即删除会话条目。

    自身 ID:OTP-16479

改进和新功能

  • 实现密钥和初始化向量更新功能,并加强 TLS 1.3 的安全性。

    在给定密钥集下,可以安全加密的明文数量存在加密限制。

    此更改通过在 TLS 1.3 连接上触发自动密钥更新来强制执行这些限制。

    自身 ID:OTP-15856

  • 添加对 TLS 1.3 会话票证(有状态和无状态)的支持。这允许使用来自先前成功握手的密钥材料来恢复会话。

    自身 ID:OTP-16253

  • 添加对使用 Edward 曲线进行密钥交换以及在签名验证中使用 PSS-RSA 填充的支持。

    自身 ID:OTP-16528

SSL 9.5.3

修复的 Bug 和故障

  • 增强错误处理,所有 ALERT 都应正常处理,并且不会导致崩溃。

    自身 ID:OTP-16413 辅助 ID:ERL-1136

  • 增强警报日志记录,在某些地方,警报来源的角色指示缺失。因此,日志会显示未定义,而不是客户端或服务器。

    自身 ID:OTP-16424

  • 两个不同的优化不能协同工作,导致使用流密码(即 RC4)的连接可能中断。重新设计了实现以避免这种情况。

    自身 ID:OTP-16426 辅助 ID:ERL-1136

SSL 9.5.2

修复的 Bug 和故障

  • 修复 Web 浏览器在建立 TLS 1.3 连接时发送的 GREASE 值的处理。此更改改进了对 TLS 1.3 ClientHello 中发送的各种协议元素中的 GREASE 值的处理。

    自身 ID:OTP-16388 辅助 ID:ERL-1130

  • 更正 DTLS 侦听仿真,可能会导致为先前由现在已关闭的 DTLS 侦听套接字使用的端口打开新的 DTLS 侦听套接字时出现问题。

    自身 ID:OTP-16396 辅助 ID:ERL-1118

SSL 9.5.1

修复的 Bug 和故障

  • 为 TLS 记录处理添加缺失的警报处理子句。有时会导致 TLS 连接出现令人困惑的错误行为。

    自身 ID:OTP-16357 辅助 ID:ERL-1166

  • 修复在重新协商期间发生的 ssl:recv 的处理。在重新协商期间使用被动接收函数 ssl:recv/[2,3] 将会导致连接失败,并出现意外的消息。

    自身 ID:OTP-16361

SSL 9.5

修复的 Bug 和故障

  • 更正了可能导致 CRL 验证失败的 CRL 处理。当 CRL 分发点明确指定 CRL 颁发者(即不使用后备)时,可能会发生这种情况。

    自身 ID:OTP-16156 辅助 ID:ERL-1030

  • 更正无序链的处理,使其按预期工作

    自身 ID:OTP-16293

  • 修复当握手暂停且 ClientHello 包含用于会话恢复的扩展(psk_key_exchange_modes,pre_shared_key)时导致 ssl 应用程序崩溃的错误。

    自身 ID:OTP-16295 辅助 ID:ERL-1095

  • 修复当客户端配置为支持包括 TLS 1.3 在内的一系列协议版本时,与旧版服务器的连接问题。

    自身 ID:OTP-16303

改进和新功能

  • 改进 TLS-1.3 兼容模式的会话处理和更清晰的内部处理,以便可以更有效地删除旧会话数据,从而希望缓解在高负载期间出现大型会话表的问题。

    自身 ID:OTP-15524 辅助 ID:OTP-15352

  • 更正 DTLS 侦听套接字仿真的处理。可能会导致在拥有先前侦听套接字的进程死后无法创建新的侦听套接字。

    自身 ID:OTP-15809 辅助 ID:ERL-917

  • 当客户端未发送请求的证书时,在 ALERT 描述中添加详细信息。

    自身 ID:OTP-16266

SSL 9.4

修复的 Bug 和故障

  • TLS 中零大小片段的处理可能会导致无限循环。现在已经纠正了这一点。

    自身 ID:OTP-15328 辅助 ID:ERIERL-379

  • DTLS 记录检查需要考虑重新发送的 hello 消息的版本可能与协商的版本不同。

    自身 ID:OTP-15807 辅助 ID:ERL-920

改进和新功能

  • 基本支持 TLS 1.3 客户端用于实验。有关更多信息,请参阅《用户指南》的“标准合规性”章节。

    自身 ID:OTP-15431

  • 保留 tcp 流控制 OTP-15802 (ERL-934) 的正确解决方案,以避免破坏 (ERL-938) 中报告的 ssl:recv

    自身 ID:OTP-15823 辅助 ID:ERL-934,ERL-938

  • 增强 dialyzer 规范以更好地反映实现,并避免想要将 TLS 与 unix 域套接字一起使用的用户的 dialyzer 警告。

    自身 ID:OTP-15851 辅助 ID:PR-2235

  • 添加对 TLS 1.3 中 ECDSA 签名算法的支持。

    自身 ID:OTP-15854

  • 更正 TLS 降级的错误处理,从 ssl:close/2 降级时可能的返回值是 {ok, Port} 或 {error, Reason},可能会发生这种情况,即当由于对等方关闭 TCP 连接导致降级失败时,只返回 ok 而不是 {error, closed}。

    自身 ID:OTP-16027

SSL 9.3.5

改进和新功能

  • 增强对来自对等方的错误警报的错误处理。

    自身 ID:OTP-15943

SSL 9.3.4

修复的 Bug 和故障

  • 修复 TLS 1.3 中证书解码问题的处理,与 TLS 1.2 中的处理类似。

    自身 ID:OTP-15900

  • 休眠现在在所有情况下都按预期工作,因优化工作而意外中断。

    自身 ID:OTP-15910

  • 修复当 TLS 1.3 服务器配置了选项 signature_algs_cert 时与 openssl 的互操作性问题。

    自身 ID:OTP-15913

SSL 9.3.3

修复的 Bug 和故障

  • 更正握手处理,可能会导致诸如 ASN.1 证书解码问题等奇怪的症状。

    自身 ID:OTP-15879 辅助 ID:ERL-968

  • 修复 ClientHello 握手消息中 signature_algorithms_cert 扩展的处理。

    自身 ID:OTP-15887 辅助 ID:ERL-973

  • 当 {handshake, hello} ssl 选项暂停握手时,处理新的 ClientHello 扩展。

    自身 ID:OTP-15888 辅助 ID:ERL-975

SSL 9.3.2

修复的 Bug 和故障

  • 返回的“警报错误字符串”现在与记录的警报字符串相同

    自身 ID:OTP-15844

  • 修复返回的扩展映射字段以遵循文档。

    自身 ID:OTP-15862 辅助 ID:ERL-951

  • 避免由于 DTLS 数据包解复用进程中缺少 gen_server 返回值而导致的 DTLS 崩溃。

    自身 ID:OTP-15864 辅助 ID:ERL-962

SSL 9.3.1

修复的 Bug 和故障

  • 缺少对 user_data_buffer 大小的检查使内部套接字的行为类似于活动套接字,而不是活动 N。这可能会导致内存问题。

    自身 ID:OTP-15825 辅助 ID:ERL-934,OTP-15823

SSL 9.3

修复的错误和故障

  • 与 TLS 分布 (inet_tls_dist) 的分布握手现在使用套接字选项 {nodelay, true},这显著减少了分布设置时间。

    自身 ID: OTP-14792

  • 更正关闭原因以避免不正确的崩溃报告

    自身 ID: OTP-15710 辅助 ID: ERL-893

  • 增强文档和类型规范。

    自身 ID: OTP-15746 辅助 ID: ERIERL-333

改进和新功能

  • TLS-1.0、TLS-1.1 和 DTLS-1.0 现在被认为是旧版,默认情况下不受支持

    * 潜在的不兼容性 *

    自身 ID: OTP-14865

  • 在 ssl 中使用新的 logger API。为 SSL 引入日志级别和详细调试日志。

    自身 ID: OTP-15055

  • 添加新的 API 函数 str_to_suite/1、cipher_suites/3(将密码套件列为 rfc 或 OpenSSL 名称字符串)和 suite_to_openssl_str/1

    自身 ID: OTP-15483 辅助 ID: ERL-924

  • 基本支持 TLS 1.3 服务器以供实验使用。客户端尚未功能齐全,有关更多信息,请参阅用户指南的“标准合规性”章节。

    自身 ID: OTP-15591

  • 添加对 RFC 6655 中的 PSK CCM 密码的支持

    自身 ID: OTP-15626

SSL 9.2.3.7

修复的错误和故障

  • 当使用数据包模式时,ssl:recv/2,3 的数据传递可能会失败。这已通过更正使用数据包模式时被动套接字的流控制处理来修复。

    自有 ID:OTP-16764

SSL 9.2.3.6

修复的错误和故障

  • 修复在 ssl:recv/3 调用超时后可能导致 ssl 套接字无响应的定时错误

    自身 ID:OTP-16619 辅助 ID:ERL-1213

SSL 9.2.3.5

修复的错误和故障

  • TLS 中零大小片段的处理可能会导致无限循环。现在已经纠正了这一点。

    自身 ID:OTP-15328 辅助 ID:ERIERL-379

SSL 9.2.3.4

修复的错误和故障

  • 休眠现在在所有情况下都按预期工作,因优化工作而意外中断。

    自身 ID:OTP-15910

SSL 9.2.3.3

修复的错误和故障

  • 更正握手处理,可能会导致诸如 ASN.1 证书解码问题等奇怪的症状。

    自身 ID:OTP-15879 辅助 ID:ERL-968

SSL 9.2.3.2

修复的错误和故障

  • 返回的“警报错误字符串”现在与记录的警报字符串相同

    自身 ID:OTP-15844

SSL 9.2.3.1

修复的错误和故障

  • 保留 tcp 流控制 OTP-15802 (ERL-934) 的正确解决方案,以避免破坏 (ERL-938) 中报告的 ssl:recv

    自身 ID:OTP-15823 辅助 ID:ERL-934,ERL-938

SSL 9.2.3

修复的错误和故障

  • 缺少对 user_data_buffer 大小的检查使内部套接字的行为类似于活动套接字,而不是活动 N。这可能会导致内存问题。

    自身 ID: OTP-15802 辅助 ID: ERL-934

改进和新功能

  • 从 OTP-22 回溯错误修复 ERL-893,并记录增强功能,这些增强功能将解决 ssl 应用程序用户的 dialyzer 警告。

    此更改还会影响 public_key、eldap(和 inet 文档)。

    自身 ID: OTP-15785 辅助 ID: ERL-929, ERL-893, PR-2215

SSL 9.2.2

修复的错误和故障

  • 对于 TLS 1.0 的默认 BEAST 缓解策略,在单字节片段之后可能会发送一个空的 TLS 片段。这个小故障已修复。

    自身 ID: OTP-15054 辅助 ID: ERIERL-346

SSL 9.2.1

修复的错误和故障

  • 被动接收的超时有时不会取消,后来导致服务器崩溃。此错误现已更正。

    自身 ID: OTP-14701 辅助 ID: ERL-883, ERL-884

  • 在 cb_info 中添加被动消息(活动 N)的标记,以保留传输透明性。

    自身 ID: OTP-15679 辅助 ID: ERL-861

SSL 9.2

修复的错误和故障

  • 修复当警报是处理重新协商信息扩展的结果时,可能为 gen_statem 创建不正确的返回值的问题

    自身 ID: OTP-15502

  • 更正对 3des_ede_cbc 的检查,可能会导致 ssl 声称支持 3des_ede_cbc,而 cryptolib 不支持。

    自身 ID: OTP-15539

  • 改进的 DTLS 错误处理,避免在极少数情况下发生意外的连接失败。

    自身 ID: OTP-15561

  • 更正了可能导致不发送 ssl_closed 消息的活动一次模拟错误。由 OTP-15449 引入的错误

    自身 ID: OTP-15666 辅助 ID: ERIERL-316,

改进和新功能

  • 添加客户端选项 {reuse_session, SessionID::binary()},可以与新选项值 {reuse_sessions, save} 一起使用。这样可以重用来自特定连接建立的会话。

    自身 ID: OTP-15369

  • 函数 connect 和 handshake 的错误返回的 Reason 部分具有更好且已记录的格式。这有时会与之前返回的原因不同,但是那些仅记录为 term(),因此不应依赖。

    * 潜在的不兼容性 *

    自身 ID: OTP-15423

  • 重构状态处理以提高 TLS 应用程序数据吞吐量并减少 CPU 开销

    自身 ID: OTP-15445

  • 对 SSL 代码进行了许多小的优化,以减少加密/解密的 CPU 负载,尤其是对于通过 TLS 的 Erlang 分布协议。

    自身 ID: OTP-15529

  • 添加对活动 N 的支持

    自身 ID: OTP-15665 辅助 ID: ERL-811, PR-2072

SSL 9.1.2

修复的错误和故障

  • 修复 ssl 中 SRP 扩展长度字段的编码。旧的 SRP 扩展长度编码可能会在使用 SRP 时导致与第三方 SSL 实现的互操作性问题。

    自身 ID: OTP-15477 辅助 ID: ERL-790

  • 保证活动一次数据传递,正确处理 TCP 流。

    自身 ID: OTP-15504 辅助 ID: ERL-371

  • 更正某些错误情况下的 gen_statem 返回

    自身 ID: OTP-15505

SSL 9.1.1

修复的错误和故障

  • 修复了重新协商错误。由于 ERL-622 提交 d87ac1c55188f5ba5cdf72384125d94d42118c18,在重写为两个连接进程后,客户端未正确处理服务器发起的重新协商。这可能会表现为“bad_record_mac”警报。

    还包括一些优化

    自身 ID: OTP-15489 辅助 ID: ERL-308

SSL 9.1

修复的错误和故障

  • 由于时区混淆,PEM 缓存未逐出过期的条目。

    自身 ID: OTP-15368

  • 确保在 ssl:handshake* 或 ssl:controlling_process 之外的其他调用中使用“transport_accept socket”时返回错误

    自身 ID: OTP-15384 辅助 ID: ERL-756

  • 修复 PEM 缓存中的时间戳处理可能会导致条目未在正确的时间失效。

    自身 ID: OTP-15402

  • 扩展关闭时对未传递数据的检查,在某些情况下可能会无法传递所有实际接收到的数据。

    自身 ID: OTP-15412 辅助 ID: ERL-731

  • 更正 TLS-1.2 的签名检查,允许对对等证书和对等证书密钥的签名使用不同的算法。并非所有允许的组合都被接受。

    自身 ID: OTP-15415 辅助 ID: ERL-763

  • 更正 gen_statem 返回值,可能会导致重新协商失败。

    自身 ID: OTP-15418 辅助 ID: ERL-770

改进和新功能

  • 添加对 RSA 密钥交换的引擎支持

    自身 ID: OTP-15420 辅助 ID: ERIERL-268

  • ssl 现在在内部使用活动 n 来提高性能。可以通过设置应用程序变量来恢复旧的活动一次行为,请参阅 ssl 应用程序的手册页 (man 6)。

    * 潜在的不兼容性 *

    自身 ID: OTP-15449

SSL 9.0.3

修复的错误和故障

  • 使用来自 ssl-9.0.2 的新 TLS 发送进程更正警报处理。在某些情况下,CLOSE ALERTS 可能会使用不正确的密码状态进行编码。这将导致对等方将其视为未知消息。

    自身 ID: OTP-15337 辅助 ID: ERL-738

  • 使用来自 ssl-9.0.2 的新 TLS 发送进程更正套接字数据包选项的处理。当使用 ssl:setopts/2 更改套接字选项 {packet, 1|2|3|4} 时,该选项必须在内部传播到发送进程以及读取进程,因为此特定选项也会影响要发送的数据。

    自身 ID: OTP-15348 辅助 ID: ERL-747

SSL 9.0.2

修复的错误和故障

  • 为 TLS 连接使用单独的进程来发送和接收应用程序数据,以避免在使用 TLS 进行 Erlang 分布时最有可能发生的潜在死锁。注意:不更改 API。

    自身 ID: OTP-15122

  • 正确处理空的服务器 SNI 扩展

    自身 ID: OTP-15168

  • 正确的 PSK 密码套件处理,并将 selected_cipher_suite 添加到连接信息中

    自身 ID: OTP-15172

  • 适应 TLS-1.2 中密码套件签名限制被放宽的事实

    自身 ID: OTP-15173

  • 增强对不存在的 PEM 文件的错误处理

    自身 ID: OTP-15174

  • 正确关闭处于错误状态的传输接受套接字

    自身 ID: OTP-15216

  • 正确地使用 PEM 缓存,当 PEM 文件不存在时,不添加对空条目的引用。

    自身 ID: OTP-15224

  • 正确处理所有 PSK 密码套件

    之前只有一些 PSK 套件可以正确协商,大多数 PSK 密码套件会导致连接失败。

    自身 ID: OTP-15285

改进和新特性

  • TLS 现在会尝试对证书链进行排序,如果它们看起来是无序的。也就是说,在 TLS 1.3 之前,“certificate_list” 排序必须是严格的,但是一些实现已经允许一定的灵活性。为了最大程度的兼容性,所有实现都应该准备好处理来自任何 TLS 版本的潜在的无关证书和任意排序。

    自身 ID: OTP-12983

  • TLS 现在会尝试从本地 CA 数据库重建不完整的证书链,并将该数据用于证书路径验证。这对于部分链尤其有意义,因为对等方可能不会发送中间 CA,因为它在这种情况下被认为是受信任的根。

    自身 ID: OTP-15060

  • 选项 keyfile 默认为 certfile,应该被 key 覆盖。这对于引擎密钥失败。

    自身 ID: OTP-15193

  • 当自身证书存在解码问题时,改进错误消息,另请参阅问题 ERL-668。

    自身 ID: OTP-15234

  • 更正 key 选项的 dialyzer 规范

    自身 ID: OTP-15281

SSL 9.0.1

修复的错误和故障

  • 更正 ECDHE_* 的密码套件处理,不正确的处理可能导致选择错误的套件,并且很可能导致握手失败。

    自身 ID: OTP-15203

SSL 9.0

修复的错误和故障

  • 正确处理 ECDH 套件。

    自身 ID: OTP-14974

  • 正确处理选择向证书请求发送空答案的客户端

    自身 ID: OTP-15050

改进和新特性

  • 为了提高性能,通过 SSL (inet_tls) 的分发已重写为不使用中间进程和端口。

    自身 ID: OTP-14465

  • 添加对 ECDHE_PSK 密码套件的支持

    自身 ID: OTP-14547

  • 出于安全原因,默认不再支持 3-DES 密码套件

    * 可能的 不兼容 *

    自身 ID: OTP-14768

  • 出于安全原因,默认不再支持 RSA 密钥交换密码套件

    * 可能的 不兼容 *

    自身 ID: OTP-14769

  • 现在必须显式启用回退到不安全重新协商的互操作性选项。

    * 可能的 不兼容 *

    自身 ID: OTP-14789

  • 删除对启用 SSLv2 的客户端的支持。SSLv2 已经被破解了几十年,并且从未被 Erlang SSL/TLS 实现支持。此选项默认情况下是禁用的,启用它有时会破坏不使用启用 SSLv2 的客户端的连接。

    * 潜在的不兼容性 *

    自身 ID: OTP-14824

  • 暂时从默认值中删除 CHACHA20_POLY1305 密码。我们发现了互操作性问题 (ERL-538),我们认为需要在 crypto 中解决。

    * 可能的 不兼容 *

    自身 ID: OTP-14882

  • 通用化 DTLS 数据包多路复用,以便更容易添加未来的 DTLS 特性和用途。

    自身 ID: OTP-14888

  • 使用 uri_string 模块而不是 http_uri。

    自身 ID: OTP-14902

  • SSL 分发协议 -proto inet_tls 已停止设置 SSL 选项 server_name_indication。在 inet_tls_dist 中添加了用于客户端和服务器的新的验证函数,尚未记录,该函数检查对等证书中是否存在节点名称。其用法也尚未记录。

    自身 ID: OTP-14969 辅助 ID: OTP-14465, ERL-598

  • 弃用 ssl:ssl_accept/[1,2,3],改用 ssl:handshake/[1,2,3]

    自身 ID: OTP-15056

  • 自定义对等证书的主机名验证,因为使用 TLS 的不同协议(如 HTTP 或 LDAP)可能需要以不同的方式进行验证

    自身 ID: OTP-15102 辅助 ID: ERL-542, OTP-14962

  • 添加实用程序函数,用于将 erlang 密码套件转换为字符串表示形式 (ERL-600)。

    自身 ID: OTP-15106

  • 第一个支持 DTLS 的版本

    自身 ID: OTP-15142

SSL 8.2.6.4

修复的错误和故障

  • 添加对 RSA 密钥交换的引擎支持

    自身 ID: OTP-15420

SSL 8.2.6.3

修复的错误和故障

  • 扩展对关闭时未传递数据的检查,在某些情况下可能无法传递实际收到的所有数据。

    自身 ID: OTP-15412

SSL 8.2.6.2

修复的错误和故障

  • 正确处理空的服务器 SNI 扩展

    自身 ID: OTP-15168

  • 更正 ECDHE_* 的密码套件处理,不正确的处理可能导致选择错误的套件,并且很可能导致握手失败。

    自身 ID: OTP-15203

SSL 8.2.6.1

修复的错误和故障

  • 改进密码套件处理,更正 ECC 和 TLS-1.2 要求。ERL-641 解决方案的向后移植

    自身 ID: OTP-15178

改进和新特性

  • 选项 keyfile 默认为 certfile,应该被 key 覆盖。这对于引擎密钥失败。

    自身 ID: OTP-15193

SSL 8.2.6

修复的错误和故障

  • 正确处理选择向证书请求发送空答案的客户端

    自身 ID: OTP-15050

SSL 8.2.5

修复的错误和故障

  • 修复过滤器函数,使其不会错误地排除 AEAD 密码套件

    自身 ID: OTP-14981

SSL 8.2.4

修复的错误和故障

  • 优化导致重复解码的错误合并冲突解决方案

    自身 ID: OTP-14843

  • 将错误传播恢复到 OTP-19.3 的行为,在 OTP-20.2 中,对 gen_statem 的实现调整需要进行一些进一步的调整,以避免竞争条件。这可能导致 TLS 服务器并非总是正确报告文件路径错误。

    自身 ID: OTP-14852

  • 更正 RC4 套件列表函数,使其考虑 TLS 版本

    自身 ID: OTP-14871

  • 修复警报处理,以便正确记录和警报意外消息

    自身 ID: OTP-14919

  • 正确处理匿名密码套件

    自身 ID: OTP-14952

改进和新特性

  • 添加新的 API 函数以方便密码套件处理

    自身 ID: OTP-14760

  • 更正 TLS_FALLBACK_SCSV 处理,以便根据规范始终将此特殊标志套件放在密码套件列表的最后。还要确保此功能在 DTLS 中使用。

    自身 ID: OTP-14828

  • 添加 TLS 记录版本健全性检查,以尽早进行错误检测和生成 ALERT 代码的一致性

    自身 ID: OTP-14892

SSL 8.2.3

修复的错误和故障

  • 不可靠的传输不支持数据包选项,也就是说,不支持通过 udp 进行 DTLS 的数据包选项。

    自身 ID: OTP-14664

  • 尽可能确保关闭之前的数据传递。此修复与 PR-1479 中的修复相关。

    自身 ID: OTP-14794

改进和新特性

  • crypto API 扩展为使用存储在 Engine 中的私钥/公钥进行签名/验证或加密/解密操作。

    ssl 应用程序提供了一个 API,可以在 TLS 中使用这个新的引擎概念。

    自身 ID: OTP-14448

  • 为 DTLS 实现了重新协商

    自身 ID: OTP-14563

  • 添加了一个新的命令行选项 -ssl_dist_optfile,以方便指定使用 SSL 作为分发协议时所需的许多选项。

    自身 ID: OTP-14657

SSL 8.2.2

修复的错误和故障

  • 必须使用 SNI 注册 TLS 会话(如果提供),这样当服务器名称验证成功时,客户端主机名验证失败的会话不能连接重用会话。

    自身 ID: OTP-14632

  • 使用 rsa 密钥交换配置密码套件的 erlang TLS 服务器可能容易受到针对 RSA 的自适应选择密文攻击 (AKA Bleichenbacher 攻击),当被利用时,可能会导致加密消息的明文恢复和/或中间人 (MiTM) 攻击,尽管攻击者没有获得对服务器私钥本身的访问权限。 CVE-2017-1000385

    在大多数实际情况下,利用此漏洞执行加密消息的明文恢复将允许攻击者仅在会话完成后读取明文。只有使用 RSA 密钥交换建立的 TLS 会话容易受到此攻击。

    利用此漏洞进行中间人攻击需要攻击者在目标会话的握手阶段,在配置的握手超时时间内完成初始攻击,这可能需要数千个服务器请求。此攻击可以针对任何使用 RSA 签名的 TLS 会话进行,但前提是服务器上也启用了使用 RSA 密钥交换的密码套件。机会窗口的限制、带宽限制和延迟使得此攻击的执行难度大大增加。

    尽管如果服务器顺序被遵守,RSA 密钥交换默认启用但优先级最低。要选择这样的密码套件,它还必须受客户端支持,并且可能是唯一共享的密码套件。

    由于此漏洞,使用临时密码套件(DHE 或 ECDHE)加密的捕获的 TLS 会话不存在后续解密的风险。

    如果使用了默认的密码套件配置,作为一种解决方法,你可以配置服务器不使用带有 ciphers 选项的易受攻击的套件,如下所示

    {ciphers, [Suite || Suite <- ssl:cipher_suites(), element(1,Suite) =/= rsa]}

    你的代码看起来像这样

    ssl:listen(Port, [{ciphers, [Suite || Suite <- ssl:cipher_suites(), element(1,S) =/= rsa]} | Options]).

    感谢 Hanno Böck、Juraj Somorovsky 和 Craig Young 报告此漏洞。

    自有 ID:OTP-14748

改进和新功能

  • 如果没有 SNI 可用,并且主机名是 IP 地址,则还会检查 IP 地址是否匹配。此检查不如 DNS 主机名检查好,并且不建议使用 IP 地址的证书。

    自有 ID:OTP-14655

SSL 8.2.1

修复的 Bug 和故障

  • 最大会话表再次正常工作

    自有 ID:OTP-14556

改进和新功能

  • 自定义针对 UDP 上的 DTLS 的警报处理,以减轻 DoS 攻击

    自有 ID:OTP-14078

  • 改进了错误传播和报告

    自有 ID:OTP-14236

SSL 8.2

修复的 Bug 和故障

  • 支持 ECDH-ECDSA 密钥交换,在早期版本中被意外忽略。

    自有 ID:OTP-14421

  • 正确的活动一次连接的关闭语义。这是一个时间相关的 bug,导致关闭消息并不总是到达 ssl 用户进程。

    自有 ID:OTP-14443

改进和新功能

  • TLS-1.2 客户端现在将始终以其自己的格式发送 hello 消息,而不是早期版本会在最低支持的版本上发送 hello 消息,这是最新 RFC 支持的更改。

    这将使与一些较新服务器的互操作性更加顺畅。潜在地,但不太可能,如果较旧的服务器不遵守 RFC 并忽略未知扩展,这可能会导致问题。

    * 潜在的不兼容性 *

    自有 ID:OTP-13820

  • 允许 Erlang/OTP 在 FIPS-140 模式下使用 OpenSSL,以满足特定的安全要求(主要是美国联邦政府的不同部门)。

    请参阅新的加密用户指南“FIPS 模式”章节,了解有关构建和使用默认禁用的 FIPS 支持的信息。

    (感谢 dszoboszlay 和 legoscia)

    自有 ID:OTP-13921 辅助 ID:PR-1180

  • 实现了 DTLS cookie 生成,这是规范要求的,而不是使用硬编码的值。

    自有 ID:OTP-14076

  • 实现 DTLS 记录的滑动窗口重放保护。

    自有 ID:OTP-14077

  • 默认情况下,TLS 客户端进程将调用 public_key:pkix_verify_hostname/2 来验证连接的主机名,以及在证书路径验证期间服务器证书中指定的主机名。用户可以显式禁用它。此外,如果无法从连接的第一个参数推导出主机名,或者服务器名称指示选项未提供主机名,则不会执行检查。

    自有 ID:OTP-14197

  • 扩展 connection_information/[1,2]。session_id、master_secret、client_random 和 server_random 的值可以通过 connection_information/2 访问。请注意,只有 session_id 会被添加到 connection_information/1 中。理由是关于连接安全的值应该必须被显式请求。

    自有 ID:OTP-14291

  • Chacha 密码套件目前尚未经过充分测试,不能作为首选套件

    自有 ID:OTP-14382

  • 与 OpenSSL 一起测试的 DTLS 的基本支持。

    通过为 ssl API 函数 connect 和 listen 提供选项 {protocol, dtls} 进行测试。

    自有 ID:OTP-14388

SSL 8.1.3.1.1

修复的 Bug 和故障

  • 修复警报处理,以便正确记录和警报意外消息

    自有 ID:OTP-14929

SSL 8.1.3.1

修复的 Bug 和故障

  • 使用 rsa 密钥交换配置密码套件的 erlang TLS 服务器可能容易受到针对 RSA 的自适应选择密文攻击 (AKA Bleichenbacher 攻击),当被利用时,可能会导致加密消息的明文恢复和/或中间人 (MiTM) 攻击,尽管攻击者没有获得对服务器私钥本身的访问权限。 CVE-2017-1000385

    在大多数实际情况下,利用此漏洞执行加密消息的明文恢复将允许攻击者仅在会话完成后读取明文。只有使用 RSA 密钥交换建立的 TLS 会话容易受到此攻击。

    利用此漏洞进行中间人攻击需要攻击者在目标会话的握手阶段,在配置的握手超时时间内完成初始攻击,这可能需要数千个服务器请求。此攻击可以针对任何使用 RSA 签名的 TLS 会话进行,但前提是服务器上也启用了使用 RSA 密钥交换的密码套件。机会窗口的限制、带宽限制和延迟使得此攻击的执行难度大大增加。

    尽管如果服务器顺序被遵守,RSA 密钥交换默认启用但优先级最低。要选择这样的密码套件,它还必须受客户端支持,并且可能是唯一共享的密码套件。

    由于此漏洞,使用临时密码套件(DHE 或 ECDHE)加密的捕获的 TLS 会话不存在后续解密的风险。

    如果使用了默认的密码套件配置,作为一种解决方法,你可以配置服务器不使用带有 ciphers 选项的易受攻击的套件,如下所示

    {ciphers, [Suite || Suite <- ssl:cipher_suites(), element(1,Suite) =/= rsa]}

    你的代码看起来像这样

    ssl:listen(Port, [{ciphers, [Suite || Suite <- ssl:cipher_suites(), element(1,S) =/= rsa]} | Options]).

    感谢 Hanno Böck、Juraj Somorovsky 和 Craig Young 报告此漏洞。

    自有 ID:OTP-14748

SSL 8.1.3

修复的 Bug 和故障

  • 删除调试输出

    自有 ID:OTP-14396

SSL 8.1.2

修复的 Bug 和故障

  • 正确的活动一次模拟,用于 TLS。现在,即使在 gen_tcp 套接字被对等方关闭后活动一次到达时,连接进程接收到的所有数据都将通过活动一次传递。

    自有 ID:OTP-14300

SSL 8.1.1

修复的 Bug 和故障

  • 纠正了终止行为,这导致了 PEM 缓存 bug,有时会导致连接失败。

    自有 ID:OTP-14100

  • 修复了在未能要求更多数据以处理非常大的握手数据包时,可能导致 ssl 连接进程挂起的 bug。添加选项 max_handshake_size 以减轻 DoS 攻击。

    自有 ID:OTP-14138

  • 改进了 CRL 处理的支持,当证书中存在 id-ce-extKeyUsage 时,可能会导致无法按预期工作。还需要改进 distributionpoint 处理,以便实际找到所有吊销,而不是被认为无法确定。

    自有 ID:OTP-14141

  • TLS 握手可能会意外匹配旧的 sslv2 格式,并且 ssl 应用程序会错误地以 ssl_v2_client_hello_no_supported 中止 TLS 握手。解析已更改以避免此问题。

    自有 ID:OTP-14222

  • 更正默认密码列表以优先选择 AES 128 而不是 3DES

    自有 ID:OTP-14235

改进和新功能

  • 将 PEM 缓存移动到专用进程,以避免使 SSL 管理器进程成为瓶颈。这提高了 TLS 连接的可伸缩性。

    自有 ID:OTP-13874

SSL 8.1

修复的 Bug 和故障

  • 某些 TLS 版本的可能匿名套件列表不正确,默认情况下从不支持。

    自有 ID:OTP-13926

改进和新功能

  • DTLS 的实验版本。它是可运行的,但不完整,不能被认为是用于生产的可靠版本。

    自有 ID:OTP-12982

  • 添加 API 选项以处理 ECC 曲线选择。

    自有 ID:OTP-13959

SSL 8.0.3

修复的 Bug 和故障

  • 事件处理中与时间相关的 bug 可能会导致 erlang TLS 服务器和某些 TLS 客户端之间的互操作性问题,尤其是在 Firefox 作为 TLS 客户端时注意到。

    自有 ID:OTP-13917

  • 更正 ECC 曲线选择,该错误可能导致始终选择默认值。

    自有 ID:OTP-13918

SSL 8.0.2

修复的 Bug 和故障

  • 现在,接收到的顺序错误的正确形成的握手消息将正确地以意外消息使连接失败。

    自有 ID:OTP-13853

  • 正确处理签名算法选择

    自有 ID:OTP-13711

改进和新功能

  • ssl 应用程序现在也可以在来自对等方的部分不正确输入时正常运行。

    自有 ID:OTP-13834

  • 添加应用程序环境配置 bypass_pem_cache。这可以用作当前 PEM 缓存实现的解决方法,该缓存已被证明是一个瓶颈。

    自有 ID:OTP-13883

SSL 8.0.1

修复的 Bug 和故障

  • 已更正 SSL 服务器的 TLS/SSL 协议版本选择,以遵循 RFC 5246 附录 E.1,尤其是在支持的版本列表存在间隙的情况下。现在,服务器会选择它支持的最高协议版本,且该版本不高于客户端支持的版本。

    自有 ID:OTP-13753 辅助 ID:seq13150

SSL 8.0

修复的 Bug 和故障

  • 服务器现在会拒绝未请求的客户端证书,将其视为不正确的握手消息,并结束连接。

    自有 ID:OTP-13651

改进和新功能

  • 移除对 DES 密码套件的默认支持

    * 潜在的不兼容性 *

    自有 ID:OTP-13195

  • 弃用函数 crypto:rand_bytes,并确保在所有具有密码学意义的地方都使用 crypto:strong_rand_bytes

    自有 ID:OTP-13214

  • 在 TLS 升级期间,更好地处理用户错误。通过对 ssl 应用程序进行 gen_statem 重写,解决了 ERL-69 问题。

    自有 ID:OTP-13255

  • 当 crypto 拒绝密钥时,提供用户友好的错误消息

    自有 ID:OTP-13256

  • 添加 ssl:getstat/1 和 ssl:getstat/2

    自有 ID:OTP-13415

  • TLS 分布式连接现在允许指定选项 verify_funcrl_checkcrl_cache。请参阅文档。GitHub pull req #956 由 Magnus Henoch 贡献。

    自有 ID:OTP-13429 辅助 ID:Pull#956

  • 移除关闭通过 TLS 运行的分布式 Erlang 节点时令人困惑的错误消息

    自有 ID:OTP-13431

  • 移除在 TLS 1.2 签名算法中使用 md5 的默认支持

    自有 ID:OTP-13463

  • ssl 现在使用 gen_statem 而不是 gen_fsm 来实现 ssl 连接过程,这不仅解决了一些时间问题,而且还使代码更直观,因为可以干净地使用该行为,而不是针对该行为的缺点进行大量变通。

    自有 ID:OTP-13464

  • 逐步淘汰与提供 SSLv2 的客户端的互操作性。默认情况下,不再支持它们,但提供了提供互操作性的选项。

    * 潜在的不兼容性 *

    自有 ID:OTP-13465

  • OpenSSL 具有生成证书和 CRL 颁发者短哈希值(八位十六进制数字)的函数。 “c_rehash”脚本使用这些哈希值来填充 CA 证书和 CRL 的目录,例如在 Apache Web 服务器中。添加功能以允许 Erlang 程序在此类目录中找到给定证书的正确 CRL。

    自有 ID:OTP-13530

  • 一些旧的 TLS 1.0 软件不能容忍 1/n-1 内容分割 BEAST 缓解技术。添加一个 beast_mitigation SSL 选项(默认为 one_n_minus_one)来选择或禁用 BEAST 缓解技术。

    自有 ID:OTP-13629

  • 增强错误日志消息,以方便用户理解错误

    自有 ID:OTP-13632

  • 将默认 DH 参数增加到 2048 位

    自有 ID:OTP-13636

  • 传播 CRL 未知 CA 错误,以便 public_key 验证过程继续正确进行并确定应该发生什么。

    自有 ID:OTP-13656

  • 为握手包引入飞行概念。这是启用 DTLS 的准备工作,但是它也可能对慢速和不可靠网络上的 TLS 产生积极影响。

    自有 ID:OTP-13678

SSL 7.3.3.2

修复的 Bug 和故障

  • 使用 rsa 密钥交换配置密码套件的 erlang TLS 服务器可能容易受到针对 RSA 的自适应选择密文攻击 (AKA Bleichenbacher 攻击),当被利用时,可能会导致加密消息的明文恢复和/或中间人 (MiTM) 攻击,尽管攻击者没有获得对服务器私钥本身的访问权限。 CVE-2017-1000385

    在大多数实际情况下,利用此漏洞执行加密消息的明文恢复将允许攻击者仅在会话完成后读取明文。只有使用 RSA 密钥交换建立的 TLS 会话容易受到此攻击。

    利用此漏洞进行中间人攻击需要攻击者在目标会话的握手阶段,在配置的握手超时时间内完成初始攻击,这可能需要数千个服务器请求。此攻击可以针对任何使用 RSA 签名的 TLS 会话进行,但前提是服务器上也启用了使用 RSA 密钥交换的密码套件。机会窗口的限制、带宽限制和延迟使得此攻击的执行难度大大增加。

    尽管如果服务器顺序被遵守,RSA 密钥交换默认启用但优先级最低。要选择这样的密码套件,它还必须受客户端支持,并且可能是唯一共享的密码套件。

    由于此漏洞,使用临时密码套件(DHE 或 ECDHE)加密的捕获的 TLS 会话不存在后续解密的风险。

    如果使用了默认的密码套件配置,作为一种解决方法,你可以配置服务器不使用带有 ciphers 选项的易受攻击的套件,如下所示

    {ciphers, [Suite || Suite <- ssl:cipher_suites(), element(1,Suite) =/= rsa]}

    你的代码看起来像这样

    ssl:listen(Port, [{ciphers, [Suite || Suite <- ssl:cipher_suites(), element(1,S) =/= rsa]} | Options]).

    感谢 Hanno Böck、Juraj Somorovsky 和 Craig Young 报告此漏洞。

    自有 ID:OTP-14748

SSL 7.3.3

修复的 Bug 和故障

  • 更正 ssl:prf/5 以在 ssl:prf/5 中使用协商的密码套件的 prf 函数,而不是默认的 prf。

    自有 ID:OTP-13546

  • 超时值可能为 0,已更正 guard 以允许此值

    自有 ID:OTP-13635

  • 更改哈希签名对的内部处理方式,因为使用的哈希签名对强制执行了过多的限制,导致某些有效的组合不可用。

    自有 ID:OTP-13670

SSL 7.3.3.0.1

修复的 Bug 和故障

  • 使用 rsa 密钥交换配置密码套件的 erlang TLS 服务器可能容易受到针对 RSA 的自适应选择密文攻击 (AKA Bleichenbacher 攻击),当被利用时,可能会导致加密消息的明文恢复和/或中间人 (MiTM) 攻击,尽管攻击者没有获得对服务器私钥本身的访问权限。 CVE-2017-1000385

    在大多数实际情况下,利用此漏洞执行加密消息的明文恢复将允许攻击者仅在会话完成后读取明文。只有使用 RSA 密钥交换建立的 TLS 会话容易受到此攻击。

    利用此漏洞进行中间人攻击需要攻击者在目标会话的握手阶段,在配置的握手超时时间内完成初始攻击,这可能需要数千个服务器请求。此攻击可以针对任何使用 RSA 签名的 TLS 会话进行,但前提是服务器上也启用了使用 RSA 密钥交换的密码套件。机会窗口的限制、带宽限制和延迟使得此攻击的执行难度大大增加。

    尽管如果服务器顺序被遵守,RSA 密钥交换默认启用但优先级最低。要选择这样的密码套件,它还必须受客户端支持,并且可能是唯一共享的密码套件。

    由于此漏洞,使用临时密码套件(DHE 或 ECDHE)加密的捕获的 TLS 会话不存在后续解密的风险。

    如果使用了默认的密码套件配置,作为一种解决方法,你可以配置服务器不使用带有 ciphers 选项的易受攻击的套件,如下所示

    {ciphers, [Suite || Suite <- ssl:cipher_suites(), element(1,Suite) =/= rsa]}

    你的代码看起来像这样

    ssl:listen(Port, [{ciphers, [Suite || Suite <- ssl:cipher_suites(), element(1,S) =/= rsa]} | Options]).

    感谢 Hanno Böck、Juraj Somorovsky 和 Craig Young 报告此漏洞。

    自有 ID:OTP-14748

改进和新功能

  • 在发送会话失效消息时创建少量随机性,以减轻整个表失效时的负载。

    自有 ID:OTP-13490

SSL 7.3.2

修复的 Bug 和故障

  • 更正密码套件转换和 guard 表达式。导致了 GCM 密码套件和客户端设置 signature_algorithms 扩展值选项的问题。

    自有 ID:OTP-13525

SSL 7.3.1

修复的 Bug 和故障

  • 更正了除了 commit 89d7e21cf4ae988c57c8ef047bfe85127875c70c 之外,使用 3 元组和 4 元组格式的密码套件处理。

    自有 ID:OTP-13511

改进和新功能

  • 使 TLS-1.2 signature_algorithms 扩展的值可配置

    自有 ID:OTP-13261

SSL 7.3

修复的 Bug 和故障

  • 确保一次只有一个轮询器验证程序用于验证会话缓存。

    自有 ID:OTP-13185

  • 与时间相关的问题可能导致 ssl 挂起,尤其是在较新版本的 OpenSSL 与 ECC 密码结合使用时发生这种情况。

    自有 ID:OTP-13253

  • 解决 TLS 分布式启动中的竞争条件。

    自有 ID:OTP-13268

  • 现在,大型握手消息在 TLS 记录层中被正确地分段。

    自有 ID:OTP-13306

  • 提高 Crypto 和 SSL 中 ECC 测试对于“异构”OpenSSL 版本的可移植性。

    自有 ID:OTP-13311

  • 当使用 verify_none 时,标记为关键的证书扩展会被忽略

    自有 ID:OTP-13377

  • 如果证书不包含 CRL 分发点扩展,并且相关的 CRL 不在缓存中,并且 crl_check 选项未设置为 best_effort,则吊销检查应失败。

    自有 ID:OTP-13378

  • 启用通过 IPv6 的 TLS 分布

    自有 ID:OTP-13391

改进和新功能

  • 改进 TLS 分布的错误报告

    自有 ID:OTP-13219

  • 将 connect、listen 和 accept 中的选项包含在 connection_information/1,2

    自有 ID:OTP-13232

  • 允许为传出的 TLS 分布式连接添加额外的选项,就像支持普通 TCP 连接一样。

    自有 ID:OTP-13285

  • 在 TLS 分布模块中使用 loopback 作为服务器选项

    自有 ID:OTP-13300

  • 根据原始证书二进制文件验证证书签名。

    这避免了由于重新编码解码证书时的编码错误而导致的错误。由于存在多个解码步骤并使用不同的 ASN.1 规范,因此这是一个值得避免的风险。

    自有 ID:OTP-13334

  • 使用 application:ensure_all_started/2 而不是硬编码依赖项

    自有 ID:OTP-13363

SSL 7.2

修复的 Bug 和故障

  • 遵循分布式端口范围选项

    自有 ID:OTP-12838

  • 更正 TLS 分布中的 supervisor 规范。

    自有 ID:OTP-13134

  • 更正缓存超时

    自有 ID:OTP-13141

  • 避免在密钥文件不存在时 ssl 进程崩溃和重启。

    自有 ID:OTP-13144

  • 允许将 {raw,,,_} 格式的原始套接字选项传递到底层套接字。

    自有 ID:OTP-13166

  • 使用小超时或零超时的休眠现在将按预期工作

    自有 ID:OTP-13189

改进和新功能

  • 为会话缓存添加上限,可在 ssl 应用程序级别配置。

    如果达到上限,则使当前缓存条目失效,即会话生命周期是会话将保留的最大时间,但如果达到表的最大限制,则可能会更早地失效。这将使 ssl 管理器进程表现良好,不会耗尽内存。使条目失效将逐步清空缓存,以便为新的会话条目腾出空间。

    自有 ID:OTP-12392

  • 使用新的时间函数来测量经过的时间。

    自有 ID:OTP-12457

  • 改进 TLS 分布中的错误处理

    自有 ID:OTP-13142

  • 通过 TLS 进行的分布式现在遵循 nodelay 分布标志

    自有 ID:OTP-13143

SSL 7.1

修复的 Bug 和故障

  • 添加 DER 编码的 ECPrivateKey 作为密钥选项的有效输入格式。

    自有 ID:OTP-12974

  • 更正默认会话回调模块的返回值

    此错误的症状是,客户端检查唯一会话总是会失败,可能会使客户端会话表增长很多并导致较长的设置时间。

    自有 ID:OTP-12980

改进和新功能

  • 添加将 SSL/TLS 连接降级到 tcp 连接并将套接字控制权交还给用户进程的可能性。

    这也增加了为 ssl:close 函数指定超时的可能性。

    自有 ID:OTP-11397

  • 添加应用程序设置以更改致命警报关闭超时,并缩短默认超时。致命警报超时是发送致命警报和关闭连接之间的毫秒数。等待片刻可以提高对等方正确接收警报的机会,以便它可以正常关闭。

    自有 ID:OTP-12832

SSL 7.0

修复的 Bug 和故障

  • 忽略发送到 TLS 1.0 或 TLS 1.1 服务器的 signature_algorithm(TLS 1.2 扩展)

    自有 ID:OTP-12670

  • 改进 TLS 分布模块中的错误处理,以避免残留套接字。

    自有 ID:OTP-12799 辅助 ID:Tom Briden

  • 将 {client_renegotiation, boolean()} 选项添加到 SSL 应用程序的服务器端。

    自有 ID:OTP-12815

改进和新功能

  • 添加新的 API 函数来处理 CRL 验证

    内部 ID:OTP-10362 辅助 ID:kunagi-215 [126]

  • 由于协议规范中存在 Poodle 漏洞,移除对 SSL-3.0 的默认支持。

    为 TLS-1.0 添加填充检查,以消除 TLS 1.0 中的 Poodle 漏洞,并添加选项 padding_check。此选项仅影响 TLS-1.0 连接,如果设置为 false,则禁用块密码填充检查,以便与旧版软件互操作。

    移除对 RC4 密码套件的默认支持,因为它们被认为太弱。

    * 潜在的不兼容性 *

    内部 ID:OTP-12390

  • 添加对 TLS ALPN (应用层协议协商) 扩展的支持。

    内部 ID:OTP-12580

  • 为服务器端添加 SNI (服务器名称指示) 支持。

    内部 ID:OTP-12736

SSL 6.0.1.1

修复的 Bug 和故障

  • 优雅地忽略专有的 hash_sign 算法

    内部 ID:OTP-12829

SSL 6.0.1

修复的 Bug 和故障

  • 当接收到预主密钥计算的错误输入时,正常终止

    内部 ID:OTP-12783

SSL 6.0

修复的 Bug 和故障

  • 根据 RFC 3280,从证书预期认证路径中排除自签名信任锚证书。

    这将避免一些不必要的证书处理。

    内部 ID:OTP-12449

改进和新特性

  • 在内部分离客户端和服务器会话缓存。

    避免当客户端以在会话重用之前启动许多连接的方式启动多个连接时,会话表增长。仅当没有已存储的等效会话时,才在客户端中保存新会话。

    内部 ID:OTP-11365

  • PEM 缓存现在由后台进程验证,而不是在足够小时始终保留它,否则清除它。该策略要求如果磁盘上的文件发生更改,则通过 API 函数清除小型缓存。

    但是导出 API 函数以清除缓存,因为它可能仍然有用。

    内部 ID:OTP-12391

  • 为 TLS-1.0 添加填充检查,以消除 TLS 1.0 中的 Poodle 漏洞,并添加选项 padding_check。此选项仅影响 TLS-1.0 连接,如果设置为 false,则禁用块密码填充检查,以便与旧版软件互操作。

    * 潜在的不兼容性 *

    内部 ID:OTP-12420

  • 添加对 TLS_FALLBACK_SCSV 的支持,用于防止不希望的 TLS 版本降级。如果易受 POODLE 攻击的客户端使用该功能,并且服务器也支持 TLS_FALLBACK_SCSV,则可以防止攻击。

    内部 ID:OTP-12458

SSL 5.3.8

修复的 Bug 和故障

  • 确保 ssh、ssl、eunit 和 otp_mibs 的清理规则实际删除生成的文件。

    内部 ID:OTP-12200

改进和新特性

  • 更改代码以反映状态数据可能是机密的,以避免破坏 dialyzer 契约。

    内部 ID:OTP-12341

SSL 5.3.7

修复的 Bug 和故障

  • 处理服务器可能向客户端发送空的 SNI 扩展的事实。

    内部 ID:OTP-12198

SSL 5.3.6

修复的 Bug 和故障

  • 更正了 ECC 证书的处理,ssl 和 public_key 应用程序中对此类证书的处理存在几个小问题。现在 ECC 签名的 ECC 证书应该可以工作,而不仅仅是 RSA 签名的 ECC 证书。

    内部 ID:OTP-12026

  • 检查证书链是否以受信任的 ROOT CA 结尾,即自签名证书,但提供选项 partial_chain 以允许应用程序将中间 CA 定义为受信任的。

    内部 ID:OTP-12149

改进和新特性

  • 添加 SNI (服务器名称指示) 的解码函数

    内部 ID:OTP-12048

SSL 5.3.5

修复的 Bug 和故障

  • 如果应用于非被动套接字,ssl:recv 现在返回 {error, einval},与 gen_tcp:recv 相同。

    感谢 Danil Zagoskin 报告此问题

    内部 ID:OTP-11878

  • 更正了 TLS-1.2 中 signature_algorithms 扩展的默认值的处理以及以前不支持此扩展的版本中使用的相应值。

    感谢 Danil Zagoskin

    内部 ID:OTP-11886

  • 在使用接受套接字池时处理套接字选项继承

    内部 ID:OTP-11897

  • 确保版本选项中可能提供的版本列表不依赖于顺序。

    感谢 Ransom Richardson 报告此问题

    内部 ID:OTP-11912

  • 如果 next_protocol 消息发送两次,则拒绝连接。

    内部 ID:OTP-11926

  • 更正了在调用 ssl:listen/2 后使用新的 ssl 选项调用 ssl:ssl_accept/3 时的选项处理

    内部 ID:OTP-11950

改进和新特性

  • 优雅地处理未知警报

    感谢 Atul Atri 报告此问题

    内部 ID:OTP-11874

  • 优雅地忽略客户端发送的客户端已协商的 SSL/TLS 版本不支持的密码套件。

    感谢 Danil Zagoskin 报告此问题

    内部 ID:OTP-11875

  • 优雅地处理结构化垃圾,即客户端在 ssl 记录中发送一些垃圾而不是有效的片段。

    感谢 Danil Zagoskin

    内部 ID:OTP-11880

  • 优雅地处理无效警报

    内部 ID:OTP-11890

  • 通用化默认密码的处理

    感谢 Andreas Schultz

    内部 ID:OTP-11966

  • 确保正确处理更改密码规范

    内部 ID:OTP-11975

SSL 5.3.4

修复的 Bug 和故障

  • 修复了不正确的 dialyzer 规范和类型,并增强了文档。

    感谢 Ayaz Tuncer。

    内部 ID:OTP-11627

  • 修复了 SSL/TLS 版本与默认密码之间可能的不匹配。当您在 listen 或 accept 的 optionlist 中指定 SSL/TLS 版本时,可能会发生这种情况。

    内部 ID:OTP-11712

  • 以下应用程序的应用程序升级 (appup) 文件已更正

    asn1、common_test、compiler、crypto、debugger、dialyzer、edoc、eldap、erl_docgen、et、eunit、gs、hipe、inets、observer、odbc、os_mon、otp_mibs、parsetools、percept、public_key、reltool、runtime_tools、ssh、syntax_tools、test_server、tools、typer、webtool、wx、xmerl

    向 test_server 添加了一个用于测试 appup 文件的新测试实用程序。现在 OTP 中的大多数应用程序都使用它。

    (感谢 Tobias Schlager)

    内部 ID:OTP-11744

改进和新特性

  • 将椭圆曲线定义从 crypto NIF/OpenSSL 移动到 Erlang 代码中,添加了 RFC-5639 brainpool 曲线并使 TLS 使用它们 (RFC-7027)。

    感谢 Andreas Schultz

    内部 ID:OTP-11578

  • Unicode 改编

    内部 ID:OTP-11620

  • 添加了选项 honor_cipher_order。这指示服务器优先选择自己的密码顺序而不是客户端的密码顺序,并且可以帮助防止诸如 BEAST 之类的问题,同时保持与仅支持旧密码的客户端的兼容性。

    感谢 Andrew Thompson 的实现,以及 Andreas Schultz 的测试用例。

    内部 ID:OTP-11621

  • 在 validate_option 中用 is_boolean 保护替换布尔检查。

    感谢 Andreas Schultz。

    内部 ID:OTP-11634

  • 更正或移动了一些函数规范,并更正了一些 edoc 注释,以允许使用 edoc。(感谢 Pierre Fenoll)

    内部 ID:OTP-11702

  • 更正了以纯 DER 格式输入证书时证书数据库的清理。不正确的代码可能导致以 DER 格式输入证书时出现内存泄漏。感谢 Bernard Duggan 报告此问题。

    内部 ID:OTP-11733

  • 改进了 cacertfile 选项的文档

    内部 ID:OTP-11759 辅助 ID:seq12535

  • 避免由于不正确的选项格式而导致下一个协议协商失败。

    内部 ID:OTP-11760

  • 处理没有扩展的 v1 CRL,并修复了 CRL 验证期间的 IDP (颁发分发点) 比较问题。

    感谢 Andrew Thompson

    内部 ID:OTP-11761

  • 服务器现在忽略它不支持的客户端 ECC 曲线,而不是崩溃。

    感谢 Danil Zagoskin 报告此问题并提出解决方案。

    内部 ID:OTP-11780

  • 处理 SNI (服务器名称指示) 警报 unrecognized_name 并优雅地处理意外警报。

    感谢 Masatake Daimon 报告此问题。

    内部 ID:OTP-11815

  • 添加在调用 ssl:ssl_accept 时指定 ssl 选项的可能性

    内部 ID:OTP-11837

SSL 5.3.3

修复的 Bug 和故障

  • 添加对 server_name_indication 选项的缺失验证,并测试其显式使用。由于缺少选项验证,无法设置或禁用默认的 server_name_indication。

    内部 ID:OTP-11567

  • 服务器模式下的椭圆曲线选择现在正确选择客户端建议的曲线(如果可能),并且回退替代方案更改为更广泛支持的曲线。

    内部 ID:OTP-11575

  • TLS hello 扩展处理中的错误导致服务器的行为就像它不理解安全重协商。

    内部 ID:OTP-11595

SSL 5.3.2

修复的 Bug 和故障

  • 遵守客户端声明的对椭圆曲线的支持,并且不再在服务器 hello 中发送不正确的椭圆曲线扩展。

    内部 ID:OTP-11370

  • 修复了之前贡献的代码中 DTLS 片段重组器的初始化,以用于未来对 DTLS 的支持。感谢 Andreas Schultz。

    内部 ID:OTP-11376

  • 更正了 client_preferred_next_protocols 文档中的类型错误。感谢 Julien Barbot。

    内部 ID:OTP-11457

改进和新特性

  • TLS 代码已重构,为未来 DTLS 支持做准备。一些 DTLS 代码也已到位,但尚未运行,其中一部分由 Andreas Schultz 贡献,一部分由 OTP 团队编写。感谢 Andreas 的参与。

    内部 ID:OTP-11292

  • 移除关闭函数中遗留的无关调试代码。感谢 Ken Key。

    内部 ID: OTP-11447

  • 添加 SSL 服务器名称指示 (SNI) 客户端支持。感谢 Julien Barbot。

    内部 ID: OTP-11460

SSL 5.3.1

已修复的错误和故障

  • 在重新协商期间设置选项导致重新协商失败。

    如果在重新协商期间调用 setopts,则在处理 setopts 消息期间 FSM 状态可能会发生变化,现在已正确处理这种情况。

    内部 ID: OTP-11228

  • 现在正确处理 digitally_signed 中的 signature_algorithm 字段,并使用正确的默认值。在此更改之前,某些椭圆曲线密码套件可能会失败,并报告错误“bad certificate”。

    内部 ID: OTP-11229

  • 代码模拟 inet 头部选项的方式被更改,认为这使其与 inet 兼容。然而,测试有点棘手,因为 inet 选项实际上是损坏的,现在测试已更正,头部选项应以与 inet 相同的方式再次损坏地工作,最好使用位语法代替。

    内部 ID: OTP-11230

改进和新功能

  • 使通过 SSL/TLS 进行 Erlang 分布的 ssl 管理器名称相对于 ssl_manager 的模块名称。

    当制作在工具中重命名模块以进行内部处理的工具时,这可能是有益的。

    内部 ID: OTP-11255

  • 添加关于 log_alert 选项的文档。

    内部 ID: OTP-11271

SSL 5.3

已修复的错误和故障

  • 遵守 ssl:connect 和 ssl:listen 的 versions 选项。

    内部 ID: OTP-10905

  • 现在,使用重用会话的下一协议协商将成功。

    内部 ID: OTP-10909

改进和新功能

  • 添加对 PSK(预共享密钥)和 SRP(安全远程密码)密码套件的支持,感谢 Andreas Schultz。

    内部 ID: OTP-10450 辅助 ID: kunagi-269 [180]

  • 修复 SSL 下一协议协商文档。感谢 Julien Barbot。

    内部 ID: OTP-10955

  • 修复 ssl_connection 以支持读取代理/链证书。感谢 Valentin Kuznetsov。

    内部 ID: OTP-10980

  • 整合来自 Andreas Schultz 的椭圆曲线贡献。

    为了能够在 SSL/TLS 中支持椭圆曲线密码套件,已在 public_key 和 crypto 中添加了处理椭圆曲线基础结构的附加功能。

    这也导致了 crypto API 的重写,以获得一致性并消除不必要的开销。所有使用 crypto 的 OTP 应用程序都已更新为使用新的 API。

    影响:椭圆曲线密码学 (ECC) 提供了与比其他公钥算法更小的密钥大小相当的安全性。较小的密钥大小可以节省功耗、内存、带宽和计算成本,这使得 ECC 对受限环境特别有吸引力。

    内部 ID: OTP-11009

SSL 5.2.1

改进和新功能

  • 传输回调处理已更改,以便将 gen_tcp 视为特殊情况,其中将直接为 setopts 等函数调用 inet,因为 gen_tcp 没有自己的 setopts。这将使用户能够使用传输回调进行其他自定义,例如 WebSocket。

    内部 ID: OTP-10847

  • 跟进在 ssl-5.2 R16A 中解决的 OTP-10451。确保 format_error 返回正确的字符串。将令人困惑的旧原子替换为更具描述性的原子。

    内部 ID: OTP-10864

SSL 5.1.2.1

改进和新功能

  • 使 log_alert 可配置为 ssl 中的选项,SSLLogLevel 作为选项添加到 inets conf 文件中。

    内部 ID: OTP-11259

SSL 5.2

已修复的错误和故障

  • SSL:TLS 1.2,宣传 sha224 支持,感谢 Andreas Schultz。

    内部 ID: OTP-10586

  • 如果使用新选项重新启动 ssl 服务器,并且客户端尝试重用会话,则服务器必须确保在同意重用之前符合新选项。

    内部 ID: OTP-10595

  • 现在正确处理 CA 证书数据库的清理,因此不会发生内存泄漏,该错误是在 ssl-5.1 中更改实现以增加并行执行时引入的。

    影响:改进了内存使用率,尤其是在您有许多不同的证书并将 tcp 连接升级到 TLS 连接的情况下。

    内部 ID: OTP-10710

改进和新功能

  • 支持 TLS 中的下一协议协商,感谢 Ben Murphy 的贡献。

    影响:如果使用它可以节省往返行程,从而带来性能优势。

    内部 ID: OTP-10361 辅助 ID: kunagi-214 [125]

  • 如果提供了足够的加密支持,TLS 1.2 现在将成为默认的 TLS 版本,否则 TLS 1.1 将成为默认版本。

    影响:默认的 TLS 连接将具有更高的安全性,因此可能感觉比以前慢。

    内部 ID: OTP-10425 辅助 ID: kunagi-275 [186]

  • 现在可以在侦听套接字上调用 controlling_process,与 gen_tcp 中相同。

    内部 ID: OTP-10447

  • 移除使错误消息向后兼容旧 ssl 但隐藏了实际发生情况信息的过滤器机制。

    这不会破坏文档化的 API,但是可能会返回其他原因术语,因此匹配 {error, Reason} 原因部分的 代码可能会失败。

    * 潜在的不兼容性 *

    内部 ID: OTP-10451 辅助 ID: kunagi-270 [181]

  • 向 Makefile 添加了缺失的依赖项。

    内部 ID: OTP-10594

  • 删除了已弃用的函数 ssl:pid/0,自从 R14 以来它就毫无意义,但为了向后兼容性而保留。

    * 潜在的不兼容性 *

    内部 ID: OTP-10613 辅助 ID: kunagi-331 [242]

  • 重构以简化密钥交换方法的添加,感谢 Andreas Schultz。

    内部 ID: OTP-10709

SSL 5.1.2

已修复的错误和故障

  • ssl:ssl_accept/2 超时不再被忽略。

    内部 ID: OTP-10600

SSL 5.1.1

已修复的错误和故障

  • 当超时发生时,ssl:recv/3 可能会“丢失”数据。如果 ssl:connect 或 ssl:ssl_accept 中的超时过期,则 ssl 连接进程没有像应该的那样终止,这是因为 gen_fsm:send_all_state_event 超时是客户端超时。现在这些超时由 gen_fsm-process 处理。

    内部 ID: OTP-10569

改进和新功能

  • 更好的终止处理,避免挂起。

    内部 ID: OTP-10574

SSL 5.1

已修复的错误和故障

  • 有时,客户端进程可能会在 ssl:recv 返回 {error, closed} 后收到额外的 {error, closed} 消息。

    内部 ID: OTP-10118

  • 现在可以识别 ssl v3 警报号 41 (no_certificate_RESERVED)

    内部 ID: OTP-10196

改进和新功能

  • 现在提供对 TLS 1.1 的实验性支持,将从 OTP-R16 开始正式支持。感谢 Andreas Schultz 实现的第一个版本。

    内部 ID: OTP-8871

  • 现在提供对 TLS 1.2 的实验性支持,将从 OTP-R16 开始正式支持。感谢 Andreas Schultz 实现的第一个版本。

    内部 ID: OTP-8872

  • 移除了一些瓶颈,从而提高了应用程序的并行性,特别是对于客户端而言。

    内部 ID: OTP-10113

  • 解决方法是处理错误地将 X509countryname 编码为 utf-8 的证书,而实际值是长度为 2 的有效 ASCCI 值。许多浏览器(例如 Chrome 和 Fierfox)接受此类证书,因此出于互操作性原因,我们也会接受。

    内部 ID: OTP-10222

SSL 5.0.1

已修复的错误和故障

  • 通过 SSL 进行分配的稳健性和改进。

    修复 ssl_tls_dist_proxy 在调用方超时时崩溃的错误。修复 SSL 层超时会无限期阻止分配的错误。仅在环回接口上运行代理。(感谢 Paul Guyot)

    内部 ID: OTP-9915

  • 修复 SSL TLS 分配代理的设置循环。

    修复在套接字设置阶段无限期等待来自关闭套接字的数据的进程的潜在泄漏。(感谢 Paul Guyot)

    内部 ID: OTP-9916

  • 更正了注册的拼写(感谢 Richard Carlsson)

    内部 ID: OTP-9925

  • 向 SSL API 添加了 TLS PRF 函数,用于从 TLS 会话生成额外的密钥材料。(感谢 Andreas Schultz)

    内部 ID: OTP-10024

SSL 5.0

修复的错误和故障

  • 会话的失效处理可能会导致会话记录中的 time_stamp 字段设置为未定义,从而导致会话清理过程崩溃。这不会影响连接,但会导致会话表增长。

    自有 ID:OTP-9696 辅助 ID:seq11947

  • 更改代码以使用 ets:foldl 和 throw 而不是 ets:next 遍历,从而避免了显式调用 ets:safe_fixtable 的需要。在特殊情况下可能会出现 badarg 崩溃。

    自有 ID:OTP-9703 辅助 ID:seq11947

  • 当发生 tcp 错误时,向活动 ssl 用户发送 ssl_closed 通知。

    自有 ID:OTP-9734 辅助 ID:seq11946

  • 如果在重新协商期间正在进行被动接收,则评估 ssl:recv 的进程可能会永远挂起。

    自有 ID:OTP-9744

改进和新功能

  • 已删除对旧 ssl 实现的支持,并移除了代码。

    自有 ID:OTP-7048

  • 现在可以使用新的 ssl 实现运行 Erlang 分布式系统。目前并非所有选项都可以设置,但足以替换旧的 ssl 实现。

    自有 ID:OTP-7053

  • public_key、ssl 和 crypto 现在支持 PKCS-8

    自有 ID:OTP-9312

  • 实现了 CBC 定时攻击的对策。感谢 Andreas Schultz 提供补丁。

    自有 ID:OTP-9683

  • 通过禁止客户端在短时间内连续多次重新协商来缓解 SSL/TLS 计算 DoS 攻击,感谢 Tuncer Ayaz 提醒我们注意这一点。

    自有 ID:OTP-9739

  • 实现了针对 Rizzo Duong BEAST 攻击的 1/n-1 分割对策,影响 SSL 3.0 和 TLS 1.0。感谢 Tuncer Ayaz 提醒我们注意这一点。

    自有 ID:OTP-9750

SSL 4.1.6

修复的错误和故障

  • 将 "a ssl" 替换为 "an ssl",重新缩进 pkix_path_validation/3。简单的文档修复(感谢 Christian von Roques)

    自有 ID:OTP-9464

改进和新功能

  • 添加函数子句以避免拒绝服务攻击。感谢 Vinod 报告此漏洞。

    自有 ID:OTP-9364

  • 错误处理代码现在可以处理 inet:getopts/2 和 inets:setopts/2 崩溃。感谢 Richard Jones 报告此问题。

    自有 ID:OTP-9382

  • 支持显式使用数据包选项 httph 和 httph_bin

    自有 ID:OTP-9461

  • 由于二进制匹配模式中的错误,hello 扩展的解码可能无法得出正确的结论。感谢 Ben Murphy。

    自有 ID:OTP-9589

SSL 4.1.5

改进和新功能

  • 使用选项 {ip, {127,0,0,1}} 调用 gen_tcp:connect 会导致以 badarg 为原因退出。SSL 或 INETS 均未捕获到此问题,导致出现原因不明的崩溃。

    自有 ID:OTP-9289 辅助 ID:seq11845

SSL 4.1.3

修复的错误和故障

  • 修复了 ssl-4.1.2 中缓存处理的错误

    自有 ID:OTP-9018 辅助 ID:seq11739

  • 更正了对关键 extended_key_usage 扩展的验证

    自有 ID:OTP-9029 辅助 ID:seq11541

SSL 4.1.2

修复的错误和故障

  • ssl 应用程序会缓存证书文件,如果磁盘文件已更改,它现在会使缓存条目失效。

    自有 ID:OTP-8965 辅助 ID:seq11739

  • 现在在 ssl:close/1 发出的调用返回之前运行 terminate 函数,因为之前 ssl:close/1 的调用者可能会遇到 reuseaddr 选项的问题。

    自有 ID:OTP-8992

SSL 4.1.1

修复的错误和故障

  • 正确处理客户端证书验证消息。在检查客户端证书验证消息时,服务器使用了错误的算法标识符来确定签名算法,当密钥交换算法和客户端证书的公钥算法恰好不同时,会导致 public_key 应用程序中出现函数子句错误。

    自有 ID:OTP-8897

改进和新功能

  • 出于测试目的,ssl 现在还在显式配置时支持一些匿名密码套件。

    自有 ID:OTP-8870

  • 如果所选密码套件的加密函数失败,则发送错误警报,而不是崩溃。

    自有 ID:OTP-8930 辅助 ID:seq11720

SSL 4.1

改进和新功能

  • 更新 ssl 以忽略违反证书 asn1 规范的 CA 证书,并更新公钥 asn1 规范以处理继承的 DSS 参数。

    自有 ID:OTP-7884

  • 更改了 ssl 实现以保留旧选项 {verify, 0} 的向后兼容性,该选项应等效于 {verify, verify_none},还分离了未知 ca 和自签名对等证书的情况,并恢复了已弃用的函数 public_key:pem_to_der/1 的返回值。

    自有 ID:OTP-8858

  • 更改了验证函数,以便通过使用 valid_peer 或 valid 作为验证函数的第二个参数来区分对等证书和 CA 证书。否则,可能并不总是容易甚至不可能知道何时到达对等证书。

    * 潜在的不兼容性 *

    自有 ID:OTP-8873

SSL 4.0.1

修复的错误和故障

  • 服务器现在可以正确验证客户端证书验证消息,而不是导致 case-clause。

    自有 ID:OTP-8721

  • 客户端 hello 消息现在始终包含所有可用的密码套件(或由 ciphers 选项指定的密码套件)。之前的实现会根据客户端证书密钥用法扩展对其进行过滤(这种过滤仅对服务器证书有意义)。

    自有 ID:OTP-8772

  • 修复了选项 {mode, list} 的处理,该选项对于某些数据包类型(例如 line)已损坏。

    自有 ID:OTP-8785

  • 空数据包未传递给客户端。

    自有 ID:OTP-8790

  • 在没有预构建的平台无关构建结果的源代码树中进行构建时,跨构建时 SSL 示例会失败,

    • 跨构建已通过不在跨构建期间构建 SSL 示例来解决。
    • 在 Windows 上构建。

    自有 ID:OTP-8791

  • 修复了在某些 ssl 实现上发生的握手错误。

    自有 ID:OTP-8793

改进和新功能

  • 修订 public_key API - 清理并记录了 public_key API,使其可用于通用用途,还更改了 ssl 以使用新的 API。

    自有 ID:OTP-8722

  • 添加了以 DER 格式直接输入证书和密钥的支持,如果指定了这些选项,它们将覆盖 pem 文件选项。

    自有 ID:OTP-8723

  • 为了获得互操作性,ssl 在使用 TLS 1.0 时将不检查填充错误。仅在 TLS 1.1 中才要求检查填充。

    自有 ID:OTP-8740

  • 更改了 ssl 应用程序中 verify_fun 选项的语义,使其能够处理路径验证错误和应用程序特定扩展的验证。这意味着现在服务器应用程序在 verify_peer 模式下可以处理路径验证错误。此更改将之前 ssl 中的某些功能移动到了 public_key 应用程序中。

    自有 ID:OTP-8770

  • 添加了功能,以便在路径验证认为证书有效时调用验证函数,以允许用户应用程序访问路径中的每个证书。此外,尝试验证 subject-AltName,如果无法验证,则让应用程序验证它。

    自有 ID:OTP-8825

SSL 4.0

改进和新功能

  • 新的 ssl 现在支持由 dsa 密钥签名的客户端/服务器证书。

    自有 ID:OTP-8587

  • Ssl 现在已切换默认实现并删除了已弃用的证书处理。所有证书处理均由 public_key 应用程序完成。

    自有 ID:OTP-8695