5  标准合规性

5  标准合规性

本节介绍 ssl 应用程序当前的标准合规性状态。

  • 出于安全原因,RSA 密钥交换密码套件默认不再受支持,但可以配置。(OTP 21)
  • 出于安全原因,DES 密码套件默认不再受支持,但可以配置。(OTP 20)
  • 出于安全原因,3DES 密码套件默认不再受支持,但可以配置。(OTP 21)
  • 重协商指示扩展 RFC 5746 受支持
  • 支持短暂 Diffie-Hellman 密码套件,但不支持 Diffie Hellman 证书密码套件。
  • 如果 Crypto 应用程序支持并使用命名曲线,则支持椭圆曲线密码套件。
  • 由于美国在 2000 年初取消了出口限制,因此不支持出口密码套件。
  • 由于 IDEA 密码套件已在 TLS 1.2 规范中被弃用,因此没有必要实施它们。
  • 不支持压缩。
  • 支持 CRL 验证。
  • 不支持策略证书扩展。
  • “服务器名称指示”扩展 (RFC 6066) 受支持。
  • 支持应用程序层协议协商 (ALPN) 及其后续协议下一代协议协商 (NPN)。
  • 可以使用预共享密钥 (PSK) 和安全远程密码 (SRP) 密码套件,但默认情况下它们未启用。

出于安全原因,不支持 SSL-2.0。与启用 SSL-2.0 的客户端的互操作性已取消。(OTP 21)

出于安全原因,SSL-3.0 现在完全不受支持。(OTP 23)

出于安全原因,SSL-3.0 默认不再受支持,但可以配置。(OTP 19)

出于安全原因,TLS-1.0 默认不再受支持,但可以配置。(OTP 22)

出于安全原因,TLS-1.1 默认不再受支持,但可以配置。(OTP 22)

支持

出于安全原因,DTLS-1.0(基于 TLS 1.1)默认不再受支持,但可以配置。(OTP 22)

支持(基于 TLS 1.2)

尚不支持

OTP-22 引入了对 TLS 1.3 的支持。当前的实现支持一组选定的加密算法

  • 密钥交换:ECDHE
  • 组:支持 Diffie-Hellman 密钥交换的所有标准组
  • 密码:支持所有密码套件
  • 签名算法:RFC 8446 中的所有算法
  • 证书:RSA、ECDSA 和 EDDSA 密钥

其他值得注意的功能

  • 支持 PSK 和会话恢复(有状态和无状态票据)
  • 使用无状态票据的布隆过滤器进行反重放保护
  • 支持早期数据和 0-RTT
  • 支持密钥和初始化向量更新

有关详细信息,请参阅以下 标准合规性

下表描述了 TLS 1.3 当前的标准合规性状态。

(C = 合规,NC = 不合规,PC = 部分合规,NA = 不适用)

功能 状态
1.3. 影响 TLS 1.2 的更新 C 24.1
版本降级保护机制 C 22
RSASSA-PSS 签名方案 C 24.1
supported_versions(ClientHello)扩展 C 22
signature_algorithms_cert 扩展 C 24.1
2. 协议概述 PC 22
(EC)DHE C 22
PSK-only NC
PSK 与 (EC)DHE C 22.2
2.1. 不正确的 DHE 共享 HelloRetryRequest C 22
2.2. 恢复和预共享密钥 (PSK) C 22.2
2.3. 0-RTT 数据 PC 23.3
4.1.1. 加密协商 C 22.2
supported_groups 扩展 C 22
signature_algorithms 扩展 C 22
pre_shared_key 扩展 C 22.2
4.1.2. 客户端问候 客户端 PC 22.1
server_name(RFC6066) C 23.2
max_fragment_length(RFC6066) C 23.0
status_request(RFC6066) NC
supported_groups(RFC7919) C 22.1
signature_algorithms(RFC8446) C 22.1
use_srtp(RFC5764) C 26.0
heartbeat(RFC6520) NC
application_layer_protocol_negotiation(RFC7301) C 22.1
signed_certificate_timestamp(RFC6962) NC
client_certificate_type(RFC7250) NC
server_certificate_type(RFC7250) NC
padding(RFC7685) NC
key_share(RFC8446) C 22.1
pre_shared_key(RFC8446) C 22.2
psk_key_exchange_modes(RFC8446) C 22.2
early_data(RFC8446) C 23.3
cookie(RFC8446) C 23.1
supported_versions(RFC8446) C 22.1
certificate_authorities(RFC8446) C 24.3
oid_filters(RFC8446) NC
post_handshake_auth(RFC8446) NC
signature_algorithms_cert(RFC8446) C 22.1
服务器 PC 22
server_name(RFC6066) C 23.2
max_fragment_length(RFC6066) C 23.0
status_request(RFC6066) NC
supported_groups(RFC7919) C 22
signature_algorithms(RFC8446) C 22
use_srtp(RFC5764) C 26.0
heartbeat(RFC6520) NC
application_layer_protocol_negotiation(RFC7301) C 22.1
signed_certificate_timestamp(RFC6962) NC
client_certificate_type(RFC7250) NC
server_certificate_type(RFC7250) NC
padding(RFC7685) NC
key_share(RFC8446) C 22
pre_shared_key(RFC8446) C 22.2
psk_key_exchange_modes(RFC8446) C 22.2
early_data(RFC8446) C 23.3
cookie(RFC8446) C 23.1
supported_versions(RFC8446) C 22
oid_filters(RFC8446) NC
post_handshake_auth(RFC8446) NC
signature_algorithms_cert(RFC8446) C 22
4.1.3. 服务器问候 客户端 C 22.2
版本降级保护 C 22.1
key_share(RFC8446) C 22.1
pre_shared_key(RFC8446) C 22.2
supported_versions(RFC8446) C 22.1
use_srtp(RFC5764) C 26.0
服务器 C 22.2
版本降级保护 C 22
key_share(RFC8446) C 22
pre_shared_key(RFC8446) C 22.2
supported_versions(RFC8446) C 22
use_srtp(RFC5764) C 26.0
4.1.4. HelloRetryRequest 服务器 C 22
key_share(RFC8446) C 22
cookie(RFC8446) C 23.1
supported_versions(RFC8446) C 22
4.2.1. 支持的版本 客户端 C 22.1
服务器 C 22
4.2.2. Cookie 客户端 C 23.1
服务器 C 23.1
4.2.3. 签名算法 客户端 C 24
rsa_pkcs1_sha256 C 22.1
rsa_pkcs1_sha384 C 22.1
rsa_pkcs1_sha512 C 22.1
ecdsa_secp256r1_sha256 C 22.1
ecdsa_secp384r1_sha384 C 22.1
ecdsa_secp521r1_sha512 C 22.1
rsa_pss_rsae_sha256 C 22.1
rsa_pss_rsae_sha384 C 22.1
rsa_pss_rsae_sha512 C 22.1
ed25519 C 24
ed448 C 24
rsa_pss_pss_sha256 C 23
rsa_pss_pss_sha384 C 23
rsa_pss_pss_sha512 C 23
rsa_pkcs1_sha1 C 22.1
ecdsa_sha1 C 22.1
服务器 C 24
rsa_pkcs1_sha256 C 22
rsa_pkcs1_sha384 C 22
rsa_pkcs1_sha512 C 22
ecdsa_secp256r1_sha256 C 22.1
ecdsa_secp384r1_sha384 C 22.1
ecdsa_secp521r1_sha512 C 22.1
rsa_pss_rsae_sha256 C 22
rsa_pss_rsae_sha384 C 22
rsa_pss_rsae_sha512 C 22
ed25519 C 24
ed448 C 24
rsa_pss_pss_sha256 C 23
rsa_pss_pss_sha384 C 23
rsa_pss_pss_sha512 C 23
rsa_pkcs1_sha1 C 22
ecdsa_sha1 C 22
4.2.4. 证书颁发机构 客户端 C 24.3
服务器 C 24.3
4.2.5. OID 过滤器 客户端 NC
服务器 NC
4.2.6. 后握手客户端身份验证 客户端 NC
服务器 NC
4.2.7. 支持的组 客户端 C 22.1
secp256r1 C 22.1
secp384r1 C 22.1
secp521r1 C 22.1
x25519 C 22.1
x448 C 22.1
ffdhe2048 C 22.1
ffdhe3072 C 22.1
ffdhe4096 C 22.1
ffdhe6144 C 22.1
ffdhe8192 C 22.1
服务器 C 22
secp256r1 C 22
secp384r1 C 22
secp521r1 C 22
x25519 C 22
x448 C 22
ffdhe2048 C 22
ffdhe3072 C 22
ffdhe4096 C 22
ffdhe6144 C 22
ffdhe8192 C 22
4.2.8. 密钥共享 客户端 C 22.1
服务器 C 22
4.2.9. 预共享密钥交换模式 客户端 C 22.2
服务器 C 22.2
4.2.10. 早期数据指示 客户端 C 23.3
服务器 C 23.3
4.2.11. 预共享密钥扩展 客户端 C 22.2
服务器 C 22.2
4.2.11.1. 票据年龄 客户端 C 22.2
服务器 C 22.2
4.2.11.2. PSK 绑定器 客户端 C 22.2
服务器 C 22.2
4.2.11.3. 处理顺序 客户端 NC
服务器 NC
4.3.1. 加密扩展 客户端 PC 22.1
server_name(RFC6066) C 23.2
max_fragment_length(RFC6066) C 23.0
supported_groups(RFC7919) NC
use_srtp(RFC5764) NC
heartbeat(RFC6520) NC
application_layer_protocol_negotiation(RFC7301) C 23.0
client_certificate_type(RFC7250) NC
server_certificate_type(RFC7250) NC
early_data(RFC8446) C 23.3
服务器 PC 22
server_name(RFC6066) C 23.2
max_fragment_length(RFC6066) C 23.0
supported_groups(RFC7919) NC
use_srtp(RFC5764) NC
heartbeat(RFC6520) NC
application_layer_protocol_negotiation(RFC7301) C 23.0
client_certificate_type(RFC7250) NC
server_certificate_type(RFC7250) NC
early_data(RFC8446) C 23.3
4.3.2. 证书请求 客户端 PC 22.1
status_request(RFC6066) NC
signature_algorithms(RFC8446) C 22.1
signed_certificate_timestamp(RFC6962) NC
certificate_authorities(RFC8446) C 24.3
oid_filters(RFC8446) NC
signature_algorithms_cert(RFC8446) C 22.1
服务器 PC 22
status_request(RFC6066) NC
signature_algorithms(RFC8446) C 22
signed_certificate_timestamp(RFC6962) NC
certificate_authorities(RFC8446) C 24.3
oid_filters(RFC8446) NC
signature_algorithms_cert(RFC8446) C 22
4.4.1. 协议转录散列 C 22
4.4.2. 证书 客户端 PC 22.1
任意证书链排序 C 22.2
链中的多余证书 C 23.2
status_request(RFC6066) NC
signed_certificate_timestamp(RFC6962) NC
服务器 PC 22
status_request(RFC6066) NC
signed_certificate_timestamp(RFC6962) NC
4.4.2.1. OCSP 状态和 SCT 扩展 客户端 NC
服务器 NC
4.4.2.2. 服务器证书选择 C 24.3
证书类型必须为 X.509v3,除非明确协商否则 C 22
服务器的终端实体证书的公钥(及其关联的限制)必须与客户端“signature_algorithms”扩展中选择的身份验证算法兼容(目前为 RSA、ECDSA 或 EdDSA)。 C 22
证书必须允许使用客户端“signature_algorithms”/“signature_algorithms_cert”扩展中指示的签名方案进行签名。 C 22
“server_name”和“certificate_authorities”扩展用于指导证书选择。由于服务器可能要求存在“server_name”扩展,因此客户端应在适用的情况下发送此扩展。 C 24.3
4.4.2.3. 客户端证书选择 PC 22.1
证书类型必须为 X.509v3,除非明确协商否则 C 22.1
如果 CertificateRequest 消息中存在“certificate_authorities”扩展,则证书链中的至少一个证书应由列出的 CA 之一颁发。 C 24.3
证书必须使用可接受的签名算法签名 C 22.1
如果 CertificateRequest 消息包含一个非空的“oid_filters”扩展,则终端实体证书必须与客户端识别的扩展 OID 匹配 NC
4.4.2.4. 接收证书消息 客户端 C 22.1
服务器 C 22
4.4.3. 证书验证 客户端 C 22.1
服务器 C 22
4.4.4. 完成 客户端 C 22.1
服务器 C 22
4.5. 早期数据结束 客户端 C 23.3
服务器 C 23.3
4.6.1. 新会话票据消息 客户端 C 23.3
early_data(RFC8446) C 23.3
服务器 C 23.3
early_data(RFC8446) C 23.3
4.6.2. 后握手身份验证 客户端 NC
服务器 NC
4.6.3. 密钥和初始化向量更新 客户端 C 22.3
服务器 C 22.3
5.1. 记录层 C 22
不能与其他记录类型交织 C 22
不能跨越密钥更改 C 22
不能发送零长度片段 C 22
警报消息不能被分割 C 22
5.2. 记录有效载荷保护 C 22
5.3. 每记录随机数 C 22
5.4. 记录填充 PC 22
可以选择填充 NC
不能发送 TLSInnerPlaintext.content 长度为零的握手和警报记录 NC
自动验证发送的填充 C 22
5.5. 密钥使用限制 C 22.3
6.1. 关闭警报 22
close_notify C 22
user_cancelled C 22
6.2. 错误警报 PC 22
7.1. 密钥计划 C 22
7.2. 更新流量密钥 C 22
7.3. 流量密钥计算 C 22
7.5. 导出器 PC 26.3
8. 0-RTT 和反重放 C 22.2
8.1. 单次使用票据 C 22.2
8.2. 客户端问候记录 C 22.2
8.3. 新鲜度检查 C 22.2
9.1. 必须实施的密码套件 C 22.1
必须实施 TLS_AES_128_GCM_SHA256 C 22
应实施 TLS_AES_256_GCM_SHA384 C 22
应实施 TLS_CHACHA20_POLY1305_SHA256 C 22
数字签名 C 22.1
必须支持 rsa_pkcs1_sha256(用于证书) C 22
必须支持 rsa_pss_rsae_sha256(用于 CertificateVerify 和证书) C 22
必须支持 ecdsa_secp256r1_sha256 C 22.1
密钥交换 C 22
必须支持使用 secp256r1 的密钥交换 C 22
应支持使用 X25519 的密钥交换 C 22
9.2. 必须实施的扩展 C 23.2
支持的版本 C 22
Cookie C 23.1
签名算法 C 22
签名算法证书 C 22
协商的组 C 22
密钥共享 C 22
服务器名称指示 C 23.2
必须发送和使用这些扩展 C 22.2
“supported_versions”对于 ClientHello、ServerHello 和 HelloRetryRequest 是必需的 C 22.1
“signature_algorithms”对于证书身份验证是必需的 C 22
“supported_groups”对于使用 (EC)DHE 密钥交换的 ClientHello 消息是必需的 C 22
“key_share”对于 (EC)DHE 密钥交换是必需的 C 22
“pre_shared_key”对于 PSK 密钥协商是必需的 C 22.2
“psk_key_exchange_modes”对于 PSK 密钥协商是必需的 C 22.2
TLS 1.3 ClientHello C 22.1
如果它不包含“pre_shared_key”扩展,则它必须包含“signature_algorithms”扩展和“supported_groups”扩展。 C 22.1
如果它包含“supported_groups”扩展,则它还必须包含“key_share”扩展,反之亦然。允许使用空的 KeyShare.client_shares 向量。 C 22.1
TLS 1.3 ServerHello C 23.2
必须支持使用“server_name”扩展 C 23.2
9.3. 协议不变式 C 22.1
必须正确处理可扩展字段 C 22.1
发送 ClientHello 的客户端必须支持其广告的所有参数。否则,服务器可能会通过选择其中一个参数而无法进行互操作。 C 22.1
接收 ClientHello 的服务器 **必须** 正确忽略所有无法识别的密码套件、扩展和其它参数。否则,它可能无法与较新的客户端进行互操作。在 TLS 1.3 中,接收 CertificateRequest 或 NewSessionTicket 的客户端 **也必须** 忽略所有无法识别的扩展。 C 22.1
终止 TLS 连接的中继设备 **必须** 行为像一个符合标准的 TLS 服务器。 NA
转发无法理解的 ClientHello 参数的中继设备 **不应** 处理任何超出该 ClientHello 的消息。它 **必须** 无修改地转发所有后续的流量。否则,它可能无法与较新的客户端和服务器进行互操作。 NA
B.4. 密码套件 C 23
TLS_AES_128_GCM_SHA256 C 22
TLS_AES_256_GCM_SHA384 C 22
TLS_CHACHA20_POLY1305_SHA256 C 22
TLS_AES_128_CCM_SHA256 C 22
TLS_AES_128_CCM_8_SHA256 C 23
C.1. 随机数生成和播种 C 22
C.2. 证书和身份验证 C 22
C.3. 实现陷阱 PC 22
C.4. 客户端跟踪预防 C 22.2
C.5. 未经身份验证的操作 C 22
D.1. 与旧服务器协商 C 22.2
D.2. 与旧客户端协商 C 22
D.3. 0-RTT 向后兼容性 NC
D.4. 中继设备兼容模式 C 23
D.5. 与向后兼容性相关的安全限制 C 22

表 5.1: 标准合规性