檢視原始碼 標準合規性
目的
本節描述 ssl 應用程式目前在標準合規性的狀態。
通用 (TLS 1.3 之前)
- 基於安全考量,預設不再支援 RSA 金鑰交換密碼套件,但可以進行配置。(OTP 21)
- 基於安全考量,預設不再支援 DES 密碼套件,但可以進行配置。(OTP 20)
- 基於安全考量,預設不再支援 3DES 密碼套件,但可以進行配置。(OTP 21)
- 支援重新協商指示擴展 RFC 5746
- 支援臨時 Diffie-Hellman 密碼套件,但不支援 Diffie Hellman 憑證密碼套件。
- 如果 Crypto 應用程式支援且使用具名曲線,則支援橢圓曲線密碼套件。
- 由於美國在 2000 年初解除了出口限制,因此不支援匯出密碼套件。
- 由於 IDEA 密碼套件已被 TLS 1.2 規範棄用,因此不支援它們,沒有動機去實作。
- 不支援壓縮。
- 可以使用預先共享金鑰 (PSK) 和安全遠端密碼 (SRP) 密碼套件,但預設未啟用,需要額外的配置。
通用
- 支援 CRL 驗證。
- 支援原則憑證擴展。(OTP 27)
- 支援「伺服器名稱指示」擴展 (RFC 6066)。
- 支援應用層協定協商 (ALPN) 及其後繼協定下一代協定協商 (NPN)。
SSL 2.0
基於安全考量,不支援 SSL-2.0。已放棄與啟用 SSL-2.0 的客戶端的互操作性。(OTP 21)
SSL 3.0
基於安全考量,完全不再支援 SSL-3.0。(OTP 23)
基於安全考量,預設不再支援 SSL-3.0,但可以進行配置。(OTP 19)
TLS 1.0
基於安全考量,預設不再支援 TLS-1.0,但可以進行配置。(OTP 22)
TLS 1.1
基於安全考量,預設不再支援 TLS-1.1,但可以進行配置。(OTP 22)
TLS 1.2
支援
DTLS 1.0
基於安全考量,預設不再支援 DTLS-1.0 (基於 TLS 1.1),但可以進行配置。(OTP 22)
DTLS 1.2
支援 (基於 TLS 1.2)
DTLS 1.3
尚未支援
TLS 1.3
OTP-22 引入了對 TLS 1.3 的支援。目前的實作支援一組選定的加密演算法
- 金鑰交換:預設支援 ECDHE 群組
- 群組:所有標準群組都支援 Diffie-Hellman 金鑰交換
- 群組:支援來自 RFC 8734 的 brainpool 群組
- 密碼:支援所有強制性密碼套件
- 簽章演算法:所有來自 RFC 8446 的演算法
- 憑證:RSA、ECDSA 和 EDDSA 金鑰
其他值得注意的功能
- 支援 PSK 和會話恢復 (具狀態和無狀態票證)
- 使用具有無狀態票證的 Bloom 篩選器進行防重播保護
- 支援早期資料和 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 | 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. 用戶端 Hello | 用戶端 | PC | 22.1 |
server_name (RFC6066) | C | 23.2 | |
max_fragment_length (RFC6066) | C | 23.0 | |
status_request (RFC6066) | C | 27.0 | |
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. 伺服器 Hello | 用戶端 | 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. Hello Retry Request | 伺服器 | 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) | C | 27.0 | |
signed_certificate_timestamp (RFC6962) | NC | ||
伺服器 | PC | 22 | |
status_request (RFC6066) | NC | ||
signed_certificate_timestamp (RFC6962) | NC | ||
4.4.2.1. OCSP 狀態和 SCT 擴展 | 用戶端 | PC | 27.0 |
伺服器 | 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. 每個記錄的 Nonce | 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. 用戶端 Hello 記錄 | 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 | |
ClientHello、ServerHello 和 HelloRetryRequest 需要「supported_versions」 | C | 22.1 | |
憑證驗證需要「signature_algorithms」 | C | 22 | |
使用 (EC)DHE 金鑰交換的 ClientHello 訊息需要「supported_groups」 | C | 22 | |
(EC)DHE 金鑰交換需要「key_share」 | C | 22 | |
PSK 金鑰協商需要「pre_shared_key」 | C | 22.2 | |
PSK 金鑰協商需要「psk_key_exchange_modes」 | 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 伺服器 | 不適用 | ||
轉發不理解的 ClientHello 參數的中間設備,不得處理該 ClientHello 之外的任何訊息。它必須以未修改的方式轉發所有後續流量。否則,它可能無法與較新的用戶端和伺服器互通。 | 不適用 | ||
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 |
表格:標準合規性