檢視原始碼 標準合規性

目的

本節描述 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 的更新C24.1
版本降級保護機制C22
RSASSA-PSS 簽章方案C24.1
supported_versions (ClientHello) 擴展C22
signature_algorithms_cert 擴展C24.1
2. 協定概述PC22
(EC)DHEC22
僅限 PSKNC
PSK 搭配 (EC)DHEC22.2
2.1. 不正確的 DHE 分享HelloRetryRequestC22
2.2. 恢復和預先共享金鑰 (PSK)C22.2
2.3. 0-RTT 資料PC23.3
4.1.1. 加密協商C22.2
supported_groups 擴展C22
signature_algorithms 擴展C22
pre_shared_key 擴展C22.2
4.1.2. 用戶端 Hello用戶端PC22.1
server_name (RFC6066)C23.2
max_fragment_length (RFC6066)C23.0
status_request (RFC6066)C27.0
supported_groups (RFC7919)C22.1
signature_algorithms (RFC8446)C22.1
use_srtp (RFC5764)C26.0
heartbeat (RFC6520)NC
application_layer_protocol_negotiation (RFC7301)C22.1
signed_certificate_timestamp (RFC6962)NC
client_certificate_type (RFC7250)NC
server_certificate_type (RFC7250)NC
padding (RFC7685)NC
key_share (RFC8446)C22.1
pre_shared_key (RFC8446)C22.2
psk_key_exchange_modes (RFC8446)C22.2
early_data (RFC8446)C23.3
cookie (RFC8446)C23.1
supported_versions (RFC8446)C22.1
certificate_authorities (RFC8446)C24.3
oid_filters (RFC8446)NC
post_handshake_auth (RFC8446)NC
signature_algorithms_cert (RFC8446)C22.1
伺服器PC22
server_name (RFC6066)C23.2
max_fragment_length (RFC6066)C23.0
status_request (RFC6066)NC
supported_groups (RFC7919)C22
signature_algorithms (RFC8446)C22
use_srtp (RFC5764)C26.0
heartbeat (RFC6520)NC
application_layer_protocol_negotiation (RFC7301)C22.1
signed_certificate_timestamp (RFC6962)NC
client_certificate_type (RFC7250)NC
server_certificate_type (RFC7250)NC
padding (RFC7685)NC
key_share (RFC8446)C22
pre_shared_key (RFC8446)C22.2
psk_key_exchange_modes (RFC8446)C22.2
early_data (RFC8446)C23.3
cookie (RFC8446)C23.1
supported_versions (RFC8446)C22
oid_filters (RFC8446)NC
post_handshake_auth (RFC8446)NC
signature_algorithms_cert (RFC8446)C22
4.1.3. 伺服器 Hello用戶端C22.2
版本降級保護C22.1
key_share (RFC8446)C22.1
pre_shared_key (RFC8446)C22.2
supported_versions (RFC8446)C22.1
use_srtp (RFC5764)C26.0
伺服器C22.2
版本降級保護C22
key_share (RFC8446)C22
pre_shared_key (RFC8446)C22.2
supported_versions (RFC8446)C22
use_srtp (RFC5764)C26.0
4.1.4. Hello Retry Request伺服器C22
key_share (RFC8446)C22
cookie (RFC8446)C23.1
supported_versions (RFC8446)C22
4.2.1. 支援的版本用戶端C22.1
伺服器C22
4.2.2. Cookie用戶端C23.1
伺服器C23.1
4.2.3. 簽章演算法用戶端C24
rsa_pkcs1_sha256C22.1
rsa_pkcs1_sha384C22.1
rsa_pkcs1_sha512C22.1
ecdsa_secp256r1_sha256C22.1
ecdsa_secp384r1_sha384C22.1
ecdsa_secp521r1_sha512C22.1
rsa_pss_rsae_sha256C22.1
rsa_pss_rsae_sha384C22.1
rsa_pss_rsae_sha512C22.1
ed25519C24
ed448C24
rsa_pss_pss_sha256C23
rsa_pss_pss_sha384C23
rsa_pss_pss_sha512C23
rsa_pkcs1_sha1C22.1
ecdsa_sha1C22.1
伺服器C24
rsa_pkcs1_sha256C22
rsa_pkcs1_sha384C22
rsa_pkcs1_sha512C22
ecdsa_secp256r1_sha256C22.1
ecdsa_secp384r1_sha384C22.1
ecdsa_secp521r1_sha512C22.1
rsa_pss_rsae_sha256C22
rsa_pss_rsae_sha384C22
rsa_pss_rsae_sha512C22
ed25519C24
ed448C24
rsa_pss_pss_sha256C23
rsa_pss_pss_sha384C23
rsa_pss_pss_sha512C23
rsa_pkcs1_sha1C22
ecdsa_sha1C22
4.2.4. 憑證授權單位用戶端C24.3
伺服器C24.3
4.2.5. OID 篩選器用戶端NC
伺服器NC
4.2.6. 交握後用戶端驗證用戶端NC
伺服器NC
4.2.7. 支援的群組用戶端C22.1
secp256r1C22.1
secp384r1C22.1
secp521r1C22.1
x25519C22.1
x448C22.1
ffdhe2048C22.1
ffdhe3072C22.1
ffdhe4096C22.1
ffdhe6144C22.1
ffdhe8192C22.1
伺服器C22
secp256r1C22
secp384r1C22
secp521r1C22
x25519C22
x448C22
ffdhe2048C22
ffdhe3072C22
ffdhe4096C22
ffdhe6144C22
ffdhe8192C22
4.2.8. 金鑰共享用戶端C22.1
伺服器C22
4.2.9. 預先共享金鑰交換模式用戶端C22.2
伺服器C22.2
4.2.10. 早期資料指示用戶端C23.3
伺服器C23.3
4.2.11. 預先共享金鑰擴展用戶端C22.2
伺服器C22.2
4.2.11.1. 票證年齡用戶端C22.2
伺服器C22.2
4.2.11.2. PSK 繫結器用戶端C22.2
伺服器C22.2
4.2.11.3. 處理順序用戶端NC
伺服器NC
4.3.1. 加密擴展用戶端PC22.1
server_name (RFC6066)C23.2
max_fragment_length (RFC6066)C23.0
supported_groups (RFC7919)NC
use_srtp (RFC5764)NC
heartbeat (RFC6520)NC
application_layer_protocol_negotiation (RFC7301)C23.0
client_certificate_type (RFC7250)NC
server_certificate_type (RFC7250)NC
early_data (RFC8446)C23.3
伺服器PC22
server_name (RFC6066)C23.2
max_fragment_length (RFC6066)C23.0
supported_groups (RFC7919)NC
use_srtp (RFC5764)NC
heartbeat (RFC6520)NC
application_layer_protocol_negotiation (RFC7301)C23.0
client_certificate_type (RFC7250)NC
server_certificate_type (RFC7250)NC
early_data (RFC8446)C23.3
4.3.2. 憑證請求用戶端PC22.1
status_request (RFC6066)NC
signature_algorithms (RFC8446)C22.1
signed_certificate_timestamp (RFC6962)NC
certificate_authorities (RFC8446)C24.3
oid_filters (RFC8446)NC
signature_algorithms_cert (RFC8446)C22.1
伺服器PC22
status_request (RFC6066)NC
signature_algorithms (RFC8446)C22
signed_certificate_timestamp (RFC6962)NC
certificate_authorities (RFC8446)C24.3
oid_filters (RFC8446)NC
signature_algorithms_cert (RFC8446)C22
4.4.1. 轉錄雜湊C22
4.4.2. 憑證用戶端PC22.1
任意憑證鏈順序C22.2
鏈中的無關憑證C23.2
status_request (RFC6066)C27.0
signed_certificate_timestamp (RFC6962)NC
伺服器PC22
status_request (RFC6066)NC
signed_certificate_timestamp (RFC6962)NC
4.4.2.1. OCSP 狀態和 SCT 擴展用戶端PC27.0
伺服器NC
4.4.2.2. 伺服器憑證選取C24.3
憑證類型必須是 X.509v3,除非明確協商其他類型C22
伺服器的終端實體憑證的公鑰 (和相關限制) 必須與用戶端「signature_algorithms」擴展中選定的驗證演算法相容 (目前為 RSA、ECDSA 或 EdDSA)。C22
憑證必須允許金鑰用於使用用戶端「signature_algorithms」/「signature_algorithms_cert」擴展中指示的簽章方案進行簽署C22
「server_name」和「certificate_authorities」擴展用於引導憑證選取。由於伺服器可能要求存在「server_name」擴展,因此用戶端在適用時應傳送此擴展。C24.3
4.4.2.3. 用戶端憑證選取PC22.1
憑證類型必須是 X.509v3,除非明確協商其他類型C22.1
如果 CertificateRequest 訊息中存在「certificate_authorities」擴展,則憑證鏈中至少應有一個憑證是由列出的 CA 所簽發。C24.3
憑證必須使用可接受的簽章演算法簽署C22.1
如果 CertificateRequest 訊息包含非空的「oid_filters」擴展,則終端實體憑證必須符合用戶端可識別的擴展 OIDNC
4.4.2.4. 接收憑證訊息用戶端C22.1
伺服器C22
4.4.3. 憑證驗證用戶端C22.1
伺服器C22
4.4.4. 已完成用戶端C22.1
伺服器C22
4.5. 早期資料結束用戶端C23.3
伺服器C23.3
4.6.1. 新的會話票證訊息用戶端C23.3
early_data (RFC8446)C23.3
伺服器C23.3
early_data (RFC8446)C23.3
4.6.2. 交握後驗證用戶端NC
伺服器NC
4.6.3. 金鑰和初始化向量更新用戶端C22.3
伺服器C22.3
5.1. 記錄層C22
不得與其他記錄類型交錯C22
不得跨越金鑰變更C22
不得傳送零長度片段C22
警示訊息不得被片段化C22
5.2. 記錄酬載保護C22
5.3. 每個記錄的 NonceC22
5.4. 記錄填補PC22
可以選擇填補NC
不得傳送 TLSInnerPlaintext.content 長度為零的交握和警示記錄NC
傳送的填補會自動驗證C22
5.5. 金鑰使用限制C22.3
6.1. 關閉警示22
close_notifyC22
user_cancelledC22
6.2. 錯誤警示PC22
7.1. 金鑰排程C22
7.2. 更新流量機密C22
7.3. 流量金鑰計算C22
7.5. 匯出器PC26.3
8. 0-RTT 和防重播C22.2
8.1. 單次使用票證C22.2
8.2. 用戶端 Hello 記錄C22.2
8.3. 新鮮度檢查C22.2
9.1. 強制實作的密碼套件C22.1
必須實作 TLS_AES_128_GCM_SHA256C22
應實作 TLS_AES_256_GCM_SHA384C22
應實作 TLS_CHACHA20_POLY1305_SHA256C22
數位簽章C22.1
必須支援 rsa_pkcs1_sha256 (用於憑證)C22
必須支援 rsa_pss_rsae_sha256 (用於 CertificateVerify 和憑證)C22
必須支援 ecdsa_secp256r1_sha256C22.1
金鑰交換C22
必須支援使用 secp256r1 的金鑰交換C22
應支援使用 X25519 的金鑰交換C22
9.2. 強制實作的擴展C23.2
支援的版本C22
CookieC23.1
簽章演算法C22
簽章演算法憑證C22
協商的群組C22
金鑰共享C22
伺服器名稱指示C23.2
必須傳送和使用這些擴展C22.2
ClientHello、ServerHello 和 HelloRetryRequest 需要「supported_versions」C22.1
憑證驗證需要「signature_algorithms」C22
使用 (EC)DHE 金鑰交換的 ClientHello 訊息需要「supported_groups」C22
(EC)DHE 金鑰交換需要「key_share」C22
PSK 金鑰協商需要「pre_shared_key」C22.2
PSK 金鑰協商需要「psk_key_exchange_modes」C22.2
TLS 1.3 ClientHelloC22.1
如果未包含 "pre_shared_key" 擴展,則必須同時包含 "signature_algorithms" 擴展和 "supported_groups" 擴展。C22.1
如果包含 "supported_groups" 擴展,則也必須包含 "key_share" 擴展,反之亦然。允許使用空的 KeyShare.client_shares 向量。C22.1
TLS 1.3 ServerHelloC23.2
必須支援使用 "server_name" 擴展C23.2
9.3. 協定不變性C22.1
必須正確處理可擴展的欄位C22.1
傳送 ClientHello 的用戶端必須支援其中宣告的所有參數。否則,伺服器可能會因選擇其中一個參數而無法互通。C22.1
接收 ClientHello 的伺服器必須正確忽略所有無法辨識的密碼套件、擴展和其他參數。否則,它可能無法與較新的用戶端互通。在 TLS 1.3 中,接收 CertificateRequest 或 NewSessionTicket 的用戶端也必須忽略所有無法辨識的擴展。C22.1
終止 TLS 連線的中間設備必須表現得像一個符合規範的 TLS 伺服器不適用
轉發不理解的 ClientHello 參數的中間設備,不得處理該 ClientHello 之外的任何訊息。它必須以未修改的方式轉發所有後續流量。否則,它可能無法與較新的用戶端和伺服器互通。不適用
B.4. 密碼套件C23
TLS_AES_128_GCM_SHA256C22
TLS_AES_256_GCM_SHA384C22
TLS_CHACHA20_POLY1305_SHA256C22
TLS_AES_128_CCM_SHA256C22
TLS_AES_128_CCM_8_SHA256C23
C.1. 亂數產生和種子C22
C.2. 憑證與驗證C22
C.3. 實作陷阱PC22
C.4. 用戶端追蹤預防C22.2
C.5. 未驗證的操作C22
D.1. 與舊伺服器協商C22.2
D.2. 與舊用戶端協商C22
D.3. 0-RTT 向後相容性NC
D.4. 中間設備相容模式C23
D.5. 與向後相容性相關的安全限制C22

表格:標準合規性