5 标准合规性
5.1 目的
本节介绍 ssl 应用程序当前的标准合规性状态。
5.2 通用(pre TLS 1.3)
- 出于安全原因,RSA 密钥交换密码套件默认不再受支持,但可以配置。(OTP 21)
- 出于安全原因,DES 密码套件默认不再受支持,但可以配置。(OTP 20)
- 出于安全原因,3DES 密码套件默认不再受支持,但可以配置。(OTP 21)
- 重协商指示扩展 RFC 5746 受支持
- 支持短暂 Diffie-Hellman 密码套件,但不支持 Diffie Hellman 证书密码套件。
- 如果 Crypto 应用程序支持并使用命名曲线,则支持椭圆曲线密码套件。
- 由于美国在 2000 年初取消了出口限制,因此不支持出口密码套件。
- 由于 IDEA 密码套件已在 TLS 1.2 规范中被弃用,因此没有必要实施它们。
- 不支持压缩。
5.3 通用
- 支持 CRL 验证。
- 不支持策略证书扩展。
- “服务器名称指示”扩展 (RFC 6066) 受支持。
- 支持应用程序层协议协商 (ALPN) 及其后续协议下一代协议协商 (NPN)。
- 可以使用预共享密钥 (PSK) 和安全远程密码 (SRP) 密码套件,但默认情况下它们未启用。
5.4 SSL 2.0
出于安全原因,不支持 SSL-2.0。与启用 SSL-2.0 的客户端的互操作性已取消。(OTP 21)
5.5 SSL 3.0
出于安全原因,SSL-3.0 现在完全不受支持。(OTP 23)
出于安全原因,SSL-3.0 默认不再受支持,但可以配置。(OTP 19)
5.6 TLS 1.0
出于安全原因,TLS-1.0 默认不再受支持,但可以配置。(OTP 22)
5.7 TLS 1.1
出于安全原因,TLS-1.1 默认不再受支持,但可以配置。(OTP 22)
5.8 TLS 1.2
支持
5.9 DTLS 1.0
出于安全原因,DTLS-1.0(基于 TLS 1.1)默认不再受支持,但可以配置。(OTP 22)
5.10 DTLS 1.2
支持(基于 TLS 1.2)
5.11 DTLS 1.3
尚不支持
5.12 TLS 1.3
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 |