檢視原始碼 ssl (ssl v11.2.6)

用於 TLS (傳輸層安全性) 和 DTLS (資料包傳輸層安全性) 的介面函式。

注意

此應用程式的名稱仍然是 SSL,因為 TLS 協定的最初版本被命名為 SSL (安全通訊端層)。但是,此應用程式不支援舊版 SSL 協定的任何版本。

範例

1> ssl:start(), ssl:connect("google.com", 443, [{verify, verify_peer},
    {cacerts, public_key:cacerts_get()}]).
{ok,{sslsocket, [...]}}

有關詳細用法和更多此 API 的範例,請參閱範例

有關應用程式的特殊 Erlang 節點組態,請參閱SSL 應用程式

摘要

類型:Socket

以主動模式傳遞給 TLS/DTLS 通訊端擁有者的訊息類型。

因安全因素而預設不再支援的 DTLS 協定版本。

DTLS 協定版本。

如果 TLS 連線失敗,將會傳送/接收 TLS 協定 ALERT。

主機的名稱或位址。

用戶端 Hello 擴充功能。

TLS 或 DTLS 協定版本。

用於除錯目的的錯誤原因。

在 TLS-1.3 之前識別 TLS 工作階段。

可用於執行所謂的「START-TLS」的通訊端,這表示使用先前用於純 TCP 流量且升級為使用 TLS 的已連線通訊端。

傳輸通訊端的選項。

TLS/DTLS 連線的不透明參考。

TLS Alert 協定原因。

可以提供給 TLS 用戶端的選項。

因安全因素而預設不再支援的 TLS 協定版本。

與 TLS/DTLS 協定相關的選項。

可以提供給 TLS 伺服器的選項。

TLS 協定版本。

傳輸選項定義回呼模組和訊息標籤,以處理底層傳輸通訊端。

類型:演算法

可用於酬載加密的加密演算法。

允許您自訂密碼套件清單的篩選器。

應支援的密碼套件清單。

密碼套件格式。

Erlang 密碼套件表示法

TLS-1.3 金鑰交換組態。

與簽署和加密函式一起使用的雜湊演算法。

密碼套件金鑰交換演算法在 TLS-1.3 中將為 any,因為金鑰交換不再是 TLS-1.3 中密碼套件組態的一部分。

TLS-1.3 之前的金鑰交換組態。

在 TLS-1.3 和 TLS-1.2 中支援。

SHA2 雜湊演算法。

簽章演算法。

由 TLS-1.3 定義的簽章配置,取代了 TLS-1.2 中的簽章演算法。

以慣用順序列出憑證和交握訊息的可接受簽章演算法。

TLS-1.3 之前的 SRP 密碼套件組態。

類型:憑證

聲明鏈中的中繼 CA 為受信任的。

實體憑證及其對應金鑰的組態。

使用內建 CRL 快取支援的選項。

使用者的私密金鑰。

類型:舊版演算法

因安全因素而預設不再支援的加密演算法。

因安全因素而預設不再支援的雜湊演算法。

TLS-1.3 之前的金鑰交換組態。

因安全因素而預設不再支援的簽章演算法。

僅當協商 TLS-1.2 時,才用於憑證簽章,這表示對等方僅支援 TLS-1.2,但我們也支援 TLS-1.3。

僅用於回溯相容性;請勿使用。

類型:用戶端選項

以下選項專用於用戶端,或對用戶端和伺服器具有不同的語意

專用於用戶端,或對用戶端和伺服器具有不同語意的憑證相關選項。

舊版用戶端選項。

僅與 TLS-1.3 之前的 TLS 版本相關的選項。

僅與 TLS-1.3 相關的選項。

類型:伺服器選項

專用於伺服器端,或對用戶端和伺服器具有不同語意的選項。

伺服器的憑證相關選項。

舊版伺服器選項。

僅與 TLS-1.3 之前的 TLS 版本相關的選項。

僅與 TLS-1.3 相關的選項。

類型:用戶端和伺服器選項

用戶端和伺服器端通用的選項。

用戶端和伺服器通用的憑證相關選項。

僅適用於 DTLS 的用戶端和伺服器通用選項。

為了支援其他選項而遭到棄用、不安全使用或完全不再相關的舊版選項。

TLS-1.3 之前用戶端和伺服器端通用的選項。

適用於 TLS-1.3 的用戶端和伺服器通用選項。

類型:資訊

關於已建立連線的一些資訊的金鑰值清單。

可以擷取資訊的 TLS 連線金鑰。

TLS-1.3 之前相關的 TLS 連線資訊。

可用於 NSS 金鑰記錄的 TLS 連線資訊。

伺服器 API

執行 TLS/DTLS 伺服器端交握。

執行 TLS/DTLS 伺服器端交握。

建立 SSL 接聽通訊端。

接受接聽通訊端上的連入連線請求。

用戶端和伺服器 API

關閉 TLS/DTLS 連線。

關閉或降級 TLS 連線。

為 SSL 通訊端指派新的控制程序。

以嚴重錯誤 USER_CANCELED 警示取消交握。

繼續 TLS 交握,可能使用新的、額外的或變更的選項。

以被動模式從通訊端接收封包。

Data 寫入 SslSocket

根據 Options 為通訊端 SslSocket 設定選項。

立即單向或雙向關閉通訊端。

僅限 TLS-1.3 API

傳回 TLS 1.3 中所有支援的群組。

傳回 TLS 1.3 中預設支援的群組。

建立新的工作階段金鑰。

TLS-1.3 之前 API

傳回所有 TLS/DTLS 1.3 之前版本的所有支援橢圓曲線清單,包括舊版曲線。

傳回 Version 預設支援的橢圓曲線。

啟動新的交握。

公用程式函式

使 Deferred 套件成為最不慣用的套件。

列出對應於 Description 的所有可用密碼套件。

等同於 cipher_suites/2,但列出 RFC 或 OpenSSL 字串名稱,而不是 erl_cipher_suite()

清除 PEM 快取。

傳回關於連線的最相關資訊。

如果已定義,則傳回關於連線的請求資訊項目。

使用 TLS 連線的偽隨機函數 (TLS-1.3 之前的 PRF) 或金鑰衍生函數 (TLS-1.3 中的 HKDF) 來產生和匯出金鑰材料。

如果任何篩選函數針對密碼套件的任何部分返回 false,則移除該密碼套件。

將 SSL 函數返回的錯誤呈現為可列印的字串。

取得指定 socket 選項的值。

取得底層 socket 的統計資訊。

取得底層 socket 的一個或多個統計值。

返回透過 ALPN 或 NPN 擴展協商的協定。

對等憑證會以 DER 編碼的二進位形式返回。

返回對等的位址和埠號。

使 Preferred 套件成為最優先的套件。

列出對應於 Description 的所有可用簽章演算法。

返回 socket SslSocket 的本機位址和埠號。

等同於 start(temporary)

啟動 SSL 應用程式。

停止 SSL 應用程式。

將 RFC 或 OpenSSL 名稱字串轉換為 erl_cipher_suite/0

erl_cipher_suite() 值轉換為 OpenSSL 名稱字串。

erl_cipher_suite() 值轉換為 RFC 名稱字串。

列出用於偵錯和測試目的的執行階段資訊,主要是有關 TLS/DTLS 版本。

已棄用的 API

使用 TLS 工作階段的偽隨機函數 (PRF) 來產生額外的金鑰材料。

類型:Socket

-type active_msgs() ::
          {ssl, sslsocket(), Data :: binary() | list()} |
          {ssl_closed, sslsocket()} |
          {ssl_error, sslsocket(), Alert :: error_alert() | (Reason :: any())} |
          {ssl_passive, sslsocket()}.

以主動模式傳遞給 TLS/DTLS 通訊端擁有者的訊息類型。

如果連線建立後發生 TLS 協定警示,ssl_error 原因可能會傳達該警示。當 TLS-1.3 伺服器請求客戶端憑證,並且伺服器在傳送最後的握手訊息後驗證提供的憑證不被接受時,最常見的情況會發生在客戶端。

只有當 socket 處於 {active, N} 模式且計數器已降至 0 時,才會傳送 ssl_passive 訊息。它表示 socket 已轉換為被動模式 ({active, false})。

此類型的連結

dtls_legacy_version()

檢視來源 (未匯出)
-type dtls_legacy_version() :: dtlsv1.

因安全因素而預設不再支援的 DTLS 協定版本。

此類型的連結

dtls_version()

檢視來源 (未匯出)
-type dtls_version() :: 'dtlsv1.2' | dtls_legacy_version().

DTLS 協定版本。

-type error_alert() :: {tls_alert, {tls_alert(), Description :: string()}}.

如果 TLS 連線失敗,將會傳送/接收 TLS 協定 ALERT。

將返回一個反映根據 TLS 協定引發的警示的原子,以及一個帶有一些詳細資訊的描述字串。

-type host() :: inet:hostname() | inet:ip_address().

主機的名稱或位址。

此類型的連結

protocol_extensions()

檢視來源
-type protocol_extensions() ::
          #{renegotiation_info => binary(),
            signature_algs => signature_algs(),
            alpn => binary(),
            srp => binary(),
            next_protocol => binary(),
            max_frag_enum => 1..4,
            ec_point_formats => [0..2],
            elliptic_curves => [public_key:oid()],
            sni => inet:hostname()}.

用戶端 Hello 擴充功能。

-type protocol_version() :: tls_version() | dtls_version().

TLS 或 DTLS 協定版本。

-type reason() :: term().

用於除錯目的的錯誤原因。

不可比對。

-type session_id() :: binary().

在 TLS-1.3 之前識別 TLS 工作階段。

-type socket() :: gen_tcp:socket().

可用於執行所謂的「START-TLS」的通訊端,這表示使用先前用於純 TCP 流量且升級為使用 TLS 的已連線通訊端。

雙方都需要同意升級。

-type socket_option() :: gen_tcp:connect_option() | gen_tcp:listen_option() | gen_udp:option().

傳輸通訊端的選項。

預設 socket 選項為 [{mode, list}, {packet, 0}, {header, 0}, {active, true}]

如需有效的選項,請參閱 Kernel 中的 inetgen_tcpgen_udp。請注意,諸如 packet 之類的串流導向選項僅適用於 TLS,而不適用於 DTLS。

-type sslsocket() :: any().

TLS/DTLS 連線的不透明參考。

請注意,儘管 sslsocket() 實例是不透明的,但允許比對。

-type tls_alert() ::
          close_notify | unexpected_message | bad_record_mac | record_overflow | handshake_failure |
          bad_certificate | unsupported_certificate | certificate_revoked | certificate_expired |
          certificate_unknown | illegal_parameter | unknown_ca | access_denied | decode_error |
          decrypt_error | export_restriction | protocol_version | insufficient_security |
          internal_error | inappropriate_fallback | user_canceled | no_renegotiation |
          unsupported_extension | certificate_unobtainable | unrecognized_name |
          bad_certificate_status_response | bad_certificate_hash_value | unknown_psk_identity |
          no_application_protocol.

TLS Alert 協定原因。

-type tls_client_option() :: client_option() | common_option() | socket_option() | transport_option().

可以提供給 TLS 用戶端的選項。

此類型的連結

tls_legacy_version()

檢視來源 (未匯出)
-type tls_legacy_version() :: tlsv1 | 'tlsv1.1'.

因安全因素而預設不再支援的 TLS 協定版本。

-type tls_option() :: tls_client_option() | tls_server_option().

與 TLS/DTLS 協定相關的選項。

-type tls_server_option() :: server_option() | common_option() | socket_option() | transport_option().

可以提供給 TLS 伺服器的選項。

此類型的連結

tls_version()

檢視來源 (未匯出)
-type tls_version() :: 'tlsv1.2' | 'tlsv1.3' | tls_legacy_version().

TLS 協定版本。

此類型的連結

transport_option()

檢視來源 (未匯出)
-type transport_option() ::
          {cb_info,
           {CallbackModule :: atom(), DataTag :: atom(), ClosedTag :: atom(), ErrTag :: atom()}} |
          {cb_info,
           {CallbackModule :: atom(),
            DataTag :: atom(),
            ClosedTag :: atom(),
            ErrTag :: atom(),
            PassiveTag :: atom()}}.

傳輸選項定義回呼模組和訊息標籤,以處理底層傳輸通訊端。

可用於自訂傳輸層。標籤值應該是底層傳輸在其主動模式訊息中使用的值。

TLS 的預設值為 {gen_tcp, tcp, tcp_closed, tcp_error, tcp_passive}

注意

為了向後相容,大小為四的元組將轉換為大小為五的元組,其中 PassiveTag 是附加了 _passiveDataTag 元素。

對於 TLS,回呼模組必須實作可靠的傳輸協定,行為如 gen_tcp,並且具有對應於 inet:setopts/2inet:getopts/2inet:peername/1inet:sockname/1inet:port/1 的函數。回呼 gen_tcp 會被特殊處理,並直接呼叫 inet。對於 DTLS,此功能被視為實驗性功能。

類型:演算法

-type cipher() ::
          aes_256_gcm | aes_128_gcm | aes_256_ccm | aes_128_ccm | chacha20_poly1305 | aes_256_ccm_8 |
          aes_128_ccm_8 | aes_128_cbc | aes_256_cbc |
          legacy_cipher().

可用於酬載加密的加密演算法。

-type cipher_filters() ::
          [{key_exchange | cipher | mac | prf,
            fun((kex_algo() | cipher() | hash() | aead | default_prf) -> true | false)}].

允許您自訂密碼套件清單的篩選器。

此類型的連結

cipher_suites()

檢視來源 (未匯出)
-type cipher_suites() :: ciphers().

應支援的密碼套件清單。

函數 ssl:cipher_suites/2 可用於尋找預設支援的所有密碼套件,以及可以設定的所有密碼套件。

如果您撰寫自己的 cipher_suites/0,請確保使用 ssl:filter_cipher_suites/2 對其進行篩選,以符合加密程式庫的支援。

以下函數可協助建立自訂的密碼套件清單

注意

請注意,TLS-1.3 和 TLS-1.2 使用不同的密碼套件集。為了支援這兩個版本,需要包含兩組的密碼套件。如果提供的清單不符合設定的版本或加密程式庫,也就是說,導致清單為空,則該選項將回退到其設定版本的適當預設值。

為了向後相容和測試目的,支援非預設密碼套件,包括匿名密碼套件(在 TLS 1.3 之前)。可以將它們新增到您的密碼套件清單中來使用它們。請注意,它們也需要對等端支援和啟用才能實際使用,並且可能需要額外的設定;請參閱 srp_param_type()

-type ciphers() :: [erl_cipher_suite()] | string().

密碼套件格式。

為了向後相容,密碼套件可以設定為以冒號分隔的密碼套件 RFC 名稱字串(甚至是舊的 OpenSSL 名稱)。但是,如果需要自訂密碼套件選項,更彈性的方法是將實用函數與 cipher_filters() 一起使用。

-type erl_cipher_suite() ::
          #{key_exchange := kex_algo(),
            cipher := cipher(),
            mac := hash() | aead,
            prf := hash() | default_prf}.

Erlang 密碼套件表示法

警告

強烈建議不要啟用使用 RSA 作為金鑰交換演算法的密碼套件(僅在 TLS-1.3 之前可用)。對於某些設定,可能存在軟體防護,如果它們有效,可以使其可用,但依賴它們工作是危險的。存在更可靠的密碼套件可以改用。

-type group() ::
          x25519 | x448 | secp256r1 | secp384r1 | secp521r1 | ffdhe2048 | ffdhe3072 | ffdhe4096 |
          ffdhe6144 | ffdhe8192.

TLS-1.3 金鑰交換組態。

-type hash() :: sha2() | legacy_hash().

與簽署和加密函式一起使用的雜湊演算法。

-type kex_algo() ::
          ecdhe_ecdsa | ecdh_ecdsa | ecdh_rsa | rsa | dhe_rsa | dhe_dss | srp_rsa | srp_dss | dhe_psk |
          rsa_psk | psk | ecdh_anon | dh_anon | srp_anon | any.

密碼套件金鑰交換演算法在 TLS-1.3 中將為 any,因為金鑰交換不再是 TLS-1.3 中密碼套件組態的一部分。

-type named_curve() ::
          x25519 | x448 | secp521r1 | brainpoolP512r1 | brainpoolP384r1 | secp384r1 | brainpoolP256r1 |
          secp256r1 |
          legacy_named_curve().

TLS-1.3 之前的金鑰交換組態。

此類型的連結

rsassa_pss_scheme()

檢視來源 (未匯出)
-type rsassa_pss_scheme() ::
          rsa_pss_rsae_sha512 | rsa_pss_rsae_sha384 | rsa_pss_rsae_sha256 | rsa_pss_pss_sha512 |
          rsa_pss_pss_sha384 | rsa_pss_pss_sha256.

在 TLS-1.3 和 TLS-1.2 中支援。

此類型的連結

sha2()

檢視來源 (未匯出)
-type sha2() :: sha512 | sha384 | sha256.

SHA2 雜湊演算法。

-type sign_algo() :: eddsa | ecdsa | rsa | legacy_sign_algo().

簽章演算法。

-type sign_scheme() ::
          eddsa_ed25519 | eddsa_ed448 | ecdsa_secp521r1_sha512 | ecdsa_secp384r1_sha384 |
          ecdsa_secp256r1_sha256 | ecdsa_brainpoolP512r1tls13_sha512 |
          ecdsa_brainpoolP384r1tls13_sha384 | ecdsa_brainpoolP256r1tls13_sha256 |
          rsassa_pss_scheme() |
          legacy_sign_scheme().

由 TLS-1.3 定義的簽章配置,取代了 TLS-1.2 中的簽章演算法。

以偏好順序列出可接受的簽章方案。

覆寫 signature_algs 選項中為憑證提供的演算法。除了 TLS 1.2 中的 signature_algorithms 擴展之外,TLS 1.3 (RFC 5246 Section 4.2.3) 還新增了 signature_algorithms_cert 擴展,該擴展可以對憑證中使用的簽章具有與整個數位簽章要求不同的特殊要求。如果不需要,則不需要此擴展。

如果使用 TLS 版本 1.2(在 24.1 中向後移植到 TLS 1.2)或更高版本,並且明確指定了 signature_algs_cert 選項,則客戶端將傳送 signature_algorithms_cert 擴展(在客戶端 hello 訊息中)。預設情況下,只會傳送 signature_algs 擴展,但當未明確指定 signature_algs 選項時除外,在這種情況下,它會將 rsa_pkcs1_sha1 演算法附加到 signature_algs 的預設值,並將其用作 signature_algs_cert 的值,以允許憑證具有此簽章,但仍然不允許在 TLS 協定中使用 sha1,因為從 27.0.1 和 26.2.5.2 開始。

注意

請注意,TLS-1.2 支援的簽章方案為 legacy_sign_scheme()rsassa_pss_scheme()

-type signature_algs() :: [{hash(), sign_algo()} | sign_scheme()].

以慣用順序列出憑證和交握訊息的可接受簽章演算法。

客戶端將在 TLS-1.2 中引入的客戶端 hello signature_algorithm 擴展中傳送其清單;請參閱 RFC 5246 中的第 7.4.1.4.1 節。在 TLS-1.2 之前,這些演算法是隱式選擇的,並且部分從密碼套件衍生而來。

在 TLS-1.2 中,可以使用 {HashAlgo, SignAlgo} 元組的清單來進行稍微更明確的協商。

在 TLS-1.3 中,這些演算法配對被與密碼套件完全分離的簽章方案取代。

用於憑證的簽章演算法可以由 signature_algs_cert 選項提供的 簽章方案覆寫。

TLS-1.2 的預設值是與 rsa_pss_schemes 交錯的 Default_TLS_12_Alg_Pairs,因為從 ssl-11.0 (Erlang/OTP 25) 開始。pss_psspss_rsae 更優先,而 pss_rsae 又比 rsa 更優先。

Default_TLS_12_Alg_Pairs 的清單定義如下

[
{sha512, ecdsa},
{sha512, rsa},
{sha384, ecdsa},
{sha384, rsa},
{sha256, ecdsa},
{sha256, rsa}
]

變更

  • 從 ssl-8.0 (Erlang/OTP 22) 的 TLS-1.2 預設值中刪除了對 {md5, rsa} 的支援。
  • 從 ssl-11.0 (Erlang/OTP 26) 的 TLS-1.2 預設值中刪除了對 {sha, _} (SHA1) 和 {sha224, _} 的支援。

rsa_pss_schemes 的清單定義如下

[rsa_pss_pss_sha512,
rsa_pss_pss_sha384,
rsa_pss_pss_sha256,
rsa_pss_rsae_sha512,
rsa_pss_rsae_sha384,
rsa_pss_rsae_sha256]

TLS_13_Legacy_Schemes 的清單定義如下

[
%% Legacy algorithms only applicable to certificate signatures
rsa_pkcs1_sha512, %% Corresponds to {sha512, rsa}
rsa_pkcs1_sha384, %% Corresponds to {sha384, rsa}
rsa_pkcs1_sha256, %% Corresponds to {sha256, rsa}
]

Default_TLS_13_Schemes 的清單定義如下

[
%% EDDSA
eddsa_ed25519,
eddsa_ed448

%% ECDSA
ecdsa_secp521r1_sha512,
ecdsa_secp384r1_sha384,
ecdsa_secp256r1_sha256] ++

%% RSASSA-PSS
rsa_pss_schemes()

變更

在 ssl-10.8 (Erlang/OTP 25) 中,EDDSA 被設定為最高優先順序。

TLS-1.3 的預設值是 Default_TLS_13_Schemes

如果同時支援 TLS-1.3 和 TLS-1.2,則預設值為

Default_TLS_13_Schemes ++ TLS_13_Legacy_Schemes ++
Default_TLS_12_Alg_Pairs %% not represented in TLS_13_Legacy_Schemes

以確保可以為協商的版本選擇適當的演算法。

注意

TLS-1.3 不會協商 TLS-1.2 的演算法,但 TLS-1.3 RSASSA-PSS (rsassa_pss_scheme()) 簽章方案也可以從 Erlang/OTP 24.1 開始為 TLS-1.2 進行協商(從 Erlang/OTP 24.1.3 開始完全運作)。但是,如果同時支援 TLS 1.3 和 TLS 1.2 使用預設值,並且協商了 TLS 1.3,則 TLS 1.3 舊版簽章方案的對應 TLS 1.2 演算法將被視為舊版方案,並且僅應用於憑證簽章。

-type srp_param_type() :: srp_8192 | srp_6144 | srp_4096 | srp_3072 | srp_2048 | srp_1536 | srp_1024.

TLS-1.3 之前的 SRP 密碼套件組態。

類型:憑證

此類型的連結

anchor_fun()

檢視原始碼 (未匯出)
-type anchor_fun() :: fun().

聲明鏈中的中繼 CA 為受信任的。

fun(Chain::[public_key:der_encoded()]) ->
      {trusted_ca, DerCert::public_key:der_encoded()} | unknown_ca.

然後,TLS 使用 public_key:pkix_path_validation/3,並以選定的 CA 作為信任錨點,來驗證鏈中的其餘部分。

-type cert_key_conf() ::
          #{cert => public_key:der_encoded() | [public_key:der_encoded()],
            key => key(),
            certfile => file:filename(),
            keyfile => file:filename(),
            password => iodata() | fun(() -> iodata())}.

實體憑證及其對應金鑰的組態。

憑證(或可能包含憑證及其鏈憑證的清單,其中實體憑證必須是清單中的第一個元素或檔案中的第一個條目)及其關聯的密鑰。對於 PEM 檔案格式,還可能有一個與包含密鑰的檔案關聯的密碼。

為了獲得最大的互通性,鏈中的憑證應該按照正確的順序排列,因為鏈將原封不動地發送給對等方。如果未提供鏈憑證,則將使用配置的受信任 CA 憑證來構建鏈。有關更多資訊,請參閱 client_option_cert()server_option_cert()

此類型的連結

crl_cache_opts()

檢視原始碼 (未匯出)
-type crl_cache_opts() :: {Module :: atom(), {DbHandle :: internal | term(), Args :: list()}}.

使用內建 CRL 快取支援的選項。

指定如何執行憑證撤銷列表(CRL)的查找和快取。Module 預設為 ssl_crl_cacheDbHandleinternalArgs[]

有兩種可用的實作方式

  • ssl_crl_cache - 實作方式 1

    此模組維護 CRL 的快取。可以使用 ssl_crl_cache:insert/1 將 CRL 新增到快取中,並且如果指定了以下參數,則可以選擇通過 HTTP 自動提取

  • ssl_crl_hash_dir - 實作方式 2

    此模組使用一個目錄,其中 CRL 以發行者名稱的雜湊值命名的檔案儲存。

    檔案名稱由八個十六進位數字組成,後跟 .rN,其中 N 是一個整數,例如 1a2b3c4d.r0。對於 CRL 的第一個版本,N 從零開始,對於每個新版本,N 遞增一。OpenSSL 實用程式 c_rehash 根據此模式建立符號連結。

    對於給定的雜湊值,此模組會找到從零開始的所有連續 .r* 檔案,並且這些檔案合在一起構成撤銷列表。排除 nextUpdate 欄位在過去或由恰好具有相同名稱雜湊值的不同 CA 發行的 CRL 檔案。

    需要以下參數

    • {dir, string()}

    指定可以在其中找到 CRL 的目錄。

-type key() ::
          {'RSAPrivateKey' | 'DSAPrivateKey' | 'ECPrivateKey' | 'PrivateKeyInfo',
           public_key:der_encoded()} |
          #{algorithm := sign_algo(),
            engine := crypto:engine_ref(),
            key_id := crypto:key_id(),
            password => crypto:password()} |
          #{algorithm := sign_algo(),
            sign_fun := fun(),
            sign_opts => list(),
            encrypt_fun => fun(),
            encrypt_opts => list()}.

使用者的私密金鑰。

密鑰可以直接以 DER 編碼的實體提供,也可以間接使用加密引擎/提供者(帶有密鑰參考資訊)或作為 Erlang 函式(帶有可能的自訂選項)提供。後兩個選項可以用於使用硬體安全模組(HSM)或可信賴平台模組(TPM)進行自訂簽章。

類型:舊版演算法

此類型的連結

legacy_cipher()

檢視原始碼 (未匯出)
-type legacy_cipher() :: '3des_ede_cbc' | des_cbc | rc4_128.

因安全因素而預設不再支援的加密演算法。

此類型的連結

legacy_hash()

檢視原始碼 (未匯出)
-type legacy_hash() :: sha224 | sha | md5.

因安全因素而預設不再支援的雜湊演算法。

此類型的連結

legacy_named_curve()

檢視原始碼 (未匯出)
-type legacy_named_curve() ::
          sect571r1 | sect571k1 | sect409k1 | sect409r1 | sect283k1 | sect283r1 | secp256k1 |
          sect239k1 | sect233k1 | sect233r1 | secp224k1 | secp224r1 | sect193r1 | sect193r2 |
          secp192k1 | secp192r1 | sect163k1 | sect163r1 | sect163r2 | secp160k1 | secp160r1 | secp160r2.

TLS-1.3 之前的金鑰交換組態。

這些曲線已被 RFC 8422 棄用。

此類型的連結

legacy_sign_algo()

檢視原始碼 (未匯出)
-type legacy_sign_algo() :: dsa.

因安全因素而預設不再支援的簽章演算法。

此類型的連結

legacy_sign_scheme()

檢視原始碼 (未匯出)
-type legacy_sign_scheme() ::
          rsa_pkcs1_sha512 | rsa_pkcs1_sha384 | rsa_pkcs1_sha256 | ecdsa_sha1 | rsa_pkcs1_sha1.

僅當協商 TLS-1.2 時,才用於憑證簽章,這表示對等方僅支援 TLS-1.2,但我們也支援 TLS-1.3。

-type old_cipher_suite() ::
          {kex_algo(), cipher(), hash()} | {kex_algo(), cipher(), hash() | aead, hash()}.

僅用於回溯相容性;請勿使用。

類型:客戶端選項

此類型的連結

client_option()

檢視原始碼 (未匯出)
-type client_option() ::
          client_option_cert() |
          common_option_cert() |
          {alpn_advertised_protocols, AppProtocols :: [AppProto :: binary()]} |
          {max_fragment_length, MaxLen :: undefined | 512 | 1024 | 2048 | 4096} |
          client_option_tls13() |
          common_option_tls13() |
          client_option_pre_tls13() |
          common_option_pre_tls13() |
          common_option_dtls() |
          client_option_legacy() |
          common_option_legacy().

以下選項專用於用戶端,或對用戶端和伺服器具有不同的語意

  • {alpn_advertised_protocols, AppProtocols} - 應用層協議

    客戶端支援的協議列表,將發送給伺服器,以用於應用層協議協商(ALPN)。如果伺服器支援 ALPN,它將從此清單中選擇一個協議;否則,它將以 no_application_protocol 警報來終止連線。不支援 ALPN 的伺服器將忽略此值。協議列表不得包含空的二進位資料。

  • {max_fragment_length, MaxLen} - 最大片段長度擴展

    指定客戶端準備接受來自伺服器的最大片段長度。請參閱 RFC 6066

此類型的連結

client_option_cert()

檢視來源
-type client_option_cert() ::
          {verify, Verify :: verify_peer | verify_none} |
          {cacerts, CACerts :: [public_key:der_encoded()] | [public_key:combined_cert()]} |
          {cacertfile, CACertFile :: file:filename()} |
          {server_name_indication, SNI :: inet:hostname() | disable} |
          {customize_hostname_check, HostNameCheckOpts :: list()} |
          {certificate_authorities, boolean()} |
          {stapling, Stapling :: staple | no_staple | map()}.

專用於用戶端,或對用戶端和伺服器具有不同語意的憑證相關選項。

  • {verify, Verify} - 憑證驗證

    此選項指定是否要驗證憑證。

    如果 Verifyverify_peer,這是預設值,則還需要提供 cacertscacertfile 選項之一,以便憑證驗證成功。例如,HTTPS 客戶端可以使用選項 {cacerts, public_key:cacerts_get()} 來使用作業系統提供的受信任 CA 憑證。

    如果 Verifyverify_none,則所有 X.509 憑證路徑驗證錯誤都將被忽略。

    變更

    Verify 的預設值在 Erlang/OTP 26 中更改為 verify_peer

  • {cacerts, CACerts} - 受信任的憑證

    DER 編碼的受信任憑證。如果提供了此選項,它將覆蓋選項 cacertfile

    可以使用函式 public_key:cacerts_get/0 來檢索作業系統提供的受信任 CA 憑證。

  • {cacertfile, CertFile} - 終端實體憑證

    包含 PEM 編碼的 CA 憑證的檔案路徑。CA 憑證在伺服器驗證和建立客戶端憑證鏈時使用。

    注意

    啟用 PEM 快取後,將按照 ssl_pem_cache_clean 環境參數指定的固定時間間隔檢查使用此選項提供的檔案的更新。

  • {server_name_indication, SNI} - 伺服器名稱指示擴展

    指定要在 TLS 伺服器名稱指示擴展中使用的主機名稱。如果未指定,它將預設為 connect/3,4Host 引數,除非它的類型為 inet:ip_address()。主機名稱也將在對等憑證的主機名稱驗證中使用 public_key:pkix_verify_hostname/2。特殊值 disable 會阻止傳送伺服器名稱指示擴展,並停用主機名稱驗證檢查。

  • {customize_hostname_check, HostNameCheckOpts} - 自訂選項

    自訂對等憑證的主機名稱驗證,因為使用 TLS 的各種協議(例如 HTTP 或 LDAP)可能需要不同的方法。例如,以下是如何使用在 Public_Key 中實作的 HTTPS 的標準主機名稱檢查

    {customize_hostname_check, [{match_fun, public_key:pkix_verify_hostname_match_fun(https)}]}

    有關自訂選項的詳細說明,請參閱 public_key:pkix_verify_hostname/3

  • {client_certificate_authorities, UseCertAuth} - 互通性提示選項

    如果 UseCertAuth 設定為 true,則會在 TLS-1.3 客戶端 hello 中傳送憑證授權單位擴展。預設值為 false。請注意,如果存在許多受信任的 CA 憑證,則將 UseCertAuth 設定為 true 可能會導致大量開銷。(自 Erlang/OTP 24.3 起)。

  • {stapling, Stapling} - 憑證撤銷檢查選項

    如果 Stapling 是原子 staple 或映射,則將啟用 OCSP Stapling,這意味著類型為「status_request」的擴展將包含在客戶端 hello 中,以指示希望接收憑證狀態資訊。

    如果 Stapling 設定為 no_staple(預設值),則將停用 OCSP Stapling。

    注意

    即使客戶端請求,伺服器也可能不提供 OCSP 回應。在這種情況下,SSL 將繼續執行握手並產生 {missing, stapling_response} 記錄器事件。

    Stapling 作為映射給出時,布林值 ocsp_nonce 鍵可以指示客戶端是否應請求 OCSP 隨機數(預設值為 false)。

    注意

    可以提供沒有隨機數值的 OCSP 回應 — 即使客戶端已請求。在這種情況下,SSL 將繼續執行握手並產生 {missing, ocsp_nonce} 記錄器事件。

此類型的連結

client_option_legacy()

檢視原始碼 (未匯出)
-type client_option_legacy() ::
          {client_preferred_next_protocols,
           NextAppProtocols ::
               {Precedence :: server | client, ClientPrefs :: [AppProto :: binary()]} |
               {Precedence :: server | client,
                ClientPrefs :: [AppProto :: binary()],
                Default :: (AppProto :: binary())}}.

舊版用戶端選項。

  • {client_preferred_next_protocols, NextAppProtocols} - 下一個協商協議

    ALPN(應用層協議協商)取代了 NPN(下一個協議協商)和此選項。

    表示客戶端想要執行下一個協議協商。

    如果 Precedenceserver,則協商的協議是在伺服器廣播列表上顯示的第一個協議,該協議也在客戶端偏好列表上。

    如果 Precedenceclient,則協商的協議是在客戶端偏好列表上顯示的第一個協議,該協議也在伺服器廣播列表上。

    如果客戶端不支援任何伺服器廣播的協議,或伺服器未廣播任何協議,則客戶端會回復到其列表中的第一個協議或預設協議(如果提供了預設值)。如果伺服器不支援下一個協議協商,則如果未提供預設協議,連線將終止。

此類型的連結

client_option_pre_tls13()

檢視原始碼 (未匯出)
-type client_option_pre_tls13() ::
          {reuse_session, SessionRef :: session_id() | {session_id(), SessionData :: binary()}} |
          {reuse_sessions, Reuse :: boolean() | save} |
          {psk_identity, PskID :: string()} |
          {srp_identity, SrpID :: {Username :: string(), Password :: string()}} |
          {fallback, LegacyFallback :: boolean()}.

僅與 TLS-1.3 之前的 TLS 版本相關的選項。

  • {reuse_session, SessionRef} - 明確的 Session 重用

    重用特定的 Session。

    自 Erlang/OTP 21.3 起,如果 Session 先前使用選項 {reuse_sessions, save} 儲存,則可以使用其 Session ID 參照該 Session。

    自 Erlang/OTP 22.3 起,可以透過其 Session ID 和相關資料明確指定 Session。

    另請參閱 SSL 使用者指南,TLS 1.3 之前的 Session 重用

  • {reuse_sessions, Reuse} - 啟用後續 Session 重用

    Reuse 設定為 save 時,將會協商並儲存新的連線,以便後續重用。可以使用 connection_information/2 取得 Session ID,並搭配用戶端選項 reuse_session 使用。

    Reuse 設定為 true 時,如果可能,將會執行自動 Session 重用。如果建立新的 Session,且與先前儲存的 Session 相比是唯一的,則會儲存該 Session 以便後續可能重用。

    自:OTP 21.3。

  • {psk_identity, PskID} - 用於 PSK 密碼套件的選項

    指定用戶端呈現給伺服器的身分。匹配的密鑰會由 user_lookup_fun 選項中給定的 fun 找到。

  • {srp_identity, SrpID} - 用於 SRP 密碼套件的選項

    指定要用於向伺服器驗證的使用者名稱和密碼。

  • {fallback, LegacyFallback} - 互通的舊版用戶端選項

    傳送特殊的密碼套件 TLS_FALLBACK_SCSV 以避免不必要的 TLS 版本降級。預設值為 false

    警告

    此選項在正常的 TLS 使用中不需要,且不得用於實作新的用戶端。但是,以下列方式重試連線的舊版用戶端

    ssl:connect(Host, Port, [...{versions, ['tlsv2', 'tlsv1.1', 'tlsv1']}])

    ssl:connect(Host, Port, [...{versions, [tlsv1.1', 'tlsv1']}, {fallback, true}])

    ssl:connect(Host, Port, [...{versions, ['tlsv1']}, {fallback, true}])

    可以使用它來避免不必要的 TLS 版本降級。請注意,伺服器也必須支援 TLS_FALLBACK_SCSV,此預防措施才能運作。

此類型的連結

client_option_tls13()

檢視原始碼 (未匯出)
-type client_option_tls13() ::
          {session_tickets, SessionTickets :: disabled | manual | auto} |
          {use_ticket, Tickets :: [binary()]} |
          {early_data, binary()} |
          {middlebox_comp_mode, MiddleBoxMode :: boolean()}.

僅與 TLS-1.3 相關的選項。

  • {session_tickets, SessionTickets} - Session Ticket 的使用

    設定 Session Ticket 功能。允許的值為 disabledmanualauto。如果設定為 manual,用戶端將以 3 元組的形式將 Ticket 資訊傳送至使用者程序

    {ssl, session_ticket, {SNI, TicketData}}

    其中 SNI 是 ServerNameIndication,TicketData 是擴充的 Ticket 資料,可用於後續的 Session 恢復。

    如果設定為 auto,用戶端會自動處理收到的 Ticket,並在建立新的 TLS 連線時嘗試使用它們(使用預先共用金鑰的 Session 恢復)。

    Ticket 的生命週期、伺服器傳送的 Ticket 數量,以及伺服器在有狀態模式中儲存的最大 Ticket 數量由 應用程式變數 設定。

    另請參閱 SSL 使用者指南,TLS 1.3 中的 Session Ticket 和 Session 恢復

  • {use_ticket, Tickets}

    設定要用於 Session 恢復的 Session Ticket。在 manual 模式 ({session_tickets, manual}) 中是必要選項。

    注意

    僅當選項 session_tickets 設定為 manual 時,才會將 Session Ticket 傳送給使用者。

    TLS-1.3 支援此選項。另請參閱 SSL 使用者指南,TLS 1.3 中的 Session Ticket 和 Session 恢復

  • {early_data, EarlyData}

    設定用戶端要傳送的早期資料。

    為了驗證伺服器是否打算處理早期資料,會將以下元組傳送至使用者程序

    {ssl, SslSocket, {early_data, Result}}

    其中 Resultacceptedrejected

    警告

    使用者有責任處理遭拒的 EarlyData,並在適當的時候重新傳送。

  • {middlebox_comp_mode, MiddleBoxMode}

    設定 TLS-1.3 連線的中繼盒相容模式。

    當協商 TLS-1.3 連線時,大量的中繼盒會發生錯誤。實作可以透過調整 TLS-1.3 交握以類似於 TLS-1.2 交握,來提高透過這些中繼盒建立連線的機會。

    中繼盒相容模式預設為啟用 (true)。

類型:伺服器選項

此類型的連結

server_option()

檢視原始碼 (未匯出)
-type server_option() ::
          server_option_cert() |
          common_option_cert() |
          {alpn_preferred_protocols, AppProtocols :: [binary()]} |
          {sni_hosts, SNIHosts :: [{inet:hostname(), [server_option() | common_option()]}]} |
          {sni_fun, SNIFun :: fun((string()) -> [])} |
          server_option_pre_tls13() |
          common_option_pre_tls13() |
          server_option_tls13() |
          common_option_tls13() |
          common_option_dtls() |
          server_option_legacy() |
          common_option_legacy().

專用於伺服器端,或對用戶端和伺服器具有不同語意的選項。

  • {alpn_preferred_protocols, AppProtocols} - 應用程式層協定協商

    表示伺服器將嘗試執行應用程式層協定協商 (ALPN)。

    協定的清單是依偏好順序排列。協商的協定將是清單中第一個與用戶端宣傳的協定之一匹配的協定。如果沒有協定匹配,伺服器將會以 no_application_protocol 警示終止連線。

    可以使用 negotiated_protocol/1 函式擷取協商的協定。

  • {sni_fun, SNIFun}

    如果伺服器收到用戶端傳來的 SNI (伺服器名稱指示),則會呼叫給定的 fun SNIFun 以擷取指示主機的 server_option()。這些選項會覆寫先前為該主機指定的選項。

    注意

    選項 sni_funsni_hosts 是互斥的。

  • {sni_hosts, SNIHosts}

    如果伺服器收到用戶端傳來的 SNI (伺服器名稱指示),且與 sni_hosts 選項中列出的主機匹配,則該主機的特定選項將會覆寫先前指定的選項。

    注意

    選項 sni_funsni_hosts 是互斥的。

此類型的連結

server_option_cert()

檢視來源
-type server_option_cert() ::
          {cacerts, CACerts :: [public_key:der_encoded()] | [public_key:combined_cert()]} |
          {cacertfile, CACertFile :: file:filename()} |
          {verify, Verify :: verify_none | verify_peer} |
          {fail_if_no_peer_cert, FailNoPeerCert :: boolean()} |
          {certificate_authorities, ServerCertAuth :: boolean()}.

伺服器的憑證相關選項。

  • {cacerts, CACerts} - 受信任的憑證。

    DER 編碼的受信任憑證。如果提供此選項,它會覆寫 cacertfile 選項。

  • {verify, Verify} - 驗證憑證。

    用戶端憑證是 TLS 協定的可選部分。伺服器僅在 verify_peer 模式下執行 X.509 憑證路徑驗證。依預設,伺服器處於 verify_none 模式,因此不會向用戶端傳送憑證請求。當使用 verify_peer 時,您可能也想指定選項 fail_if_no_peer_certcertificate_authorities

  • {fail_if_no_peer_cert, FailNoPeerCert} - 舊版權衡選項

    由 TLS/DTLS 伺服器與 {verify, verify_peer} 一起使用。如果設定為 true,如果用戶端沒有要傳送的憑證,也就是傳送空的憑證,則伺服器會失敗。如果設定為 false,則僅當用戶端傳送無效的憑證時才會失敗(空的憑證會被視為有效)。預設值為 false

  • {certificate_authorities, ServerCertAuth} - 互通提示選項

    決定 TLS-1.3 伺服器是否應在其憑證請求訊息中包含授權單位擴充功能,該訊息在選項 verify 設定為 verify_peer 時傳送。預設值為 true

    如果針對較舊的 TLS 版本設定為 false,則其憑證請求中對應的憑證授權單位定義將會設定為空的清單,而不是包含適當的憑證授權單位。這與排除 TLS-1.3 擴充功能的效果相同。

    排除擴充功能的原因可能是如果伺服器想要與無法傳送符合擴充功能的完整憑證鏈的用戶端通訊,但伺服器仍然有能力重新建立它可以驗證的鏈。

此類型的連結

server_option_legacy()

檢視原始碼 (未匯出)
-type server_option_legacy() :: {next_protocols_advertised, NextAppProtocols :: [binary()]}.

舊版伺服器選項。

  • {next_protocols_advertised, NextAppProtocols}

    ALPN (應用程式層協定協商) 會取代此處描述的 NPN (下一個協定協商)。

    如果用戶端表示其支援「下一個協定」擴充功能,則要傳送給用戶端的協定清單。用戶端可以選擇不在清單中的協定。協定清單不得包含空的二進位。如果伺服器協商了「下一個協定」,則可以使用 negotiated_protocol/1 方法存取它。

此類型的連結

server_option_pre_tls13()

檢視原始碼 (未匯出)
-type server_option_pre_tls13() ::
          {client_renegotiation, ClientRengotiation :: boolean()} |
          {reuse_sessions, ReuseSessions :: boolean()} |
          {reuse_session, ReuseSession :: fun()} |
          {honor_cipher_order, HonorServerCipherOrder :: boolean()} |
          {honor_ecc_order, HonorServerECCOrder :: boolean()} |
          {dh, DHDer :: public_key:der_encoded()} |
          {dhfile, DhFile :: file:filename()} |
          {psk_identity, PSKHint :: string()}.

僅與 TLS-1.3 之前的 TLS 版本相關的選項。

  • {client_renegotiation, ClientRengotiation} - 避免 DoS 攻擊的選項

    在支援用戶端起始重新協商的協定中,此操作的資源成本對伺服器高於用戶端。這可以作為阻斷服務 (DoS) 攻擊的向量。SSL 應用程式已採取措施來應對此類嘗試,但可以透過將此選項設定為 false 來完全停用用戶端起始的重新協商。預設值為 true。請注意,由於基礎密碼套件可以加密的訊息數量有限,停用重新協商可能會導致長期連線變得無法使用。

  • {reuse_sessions, ReuseSessions} - 啟用 Session 重用

    布林值 true 指定伺服器將同意重用 Session。將其設定為 false 將導致空的 Session 表格,這表示不會重用任何 Session。

  • {reuse_session, ReuseSession} - 本機伺服器重用原則

    啟用 TLS/DTLS 伺服器擁有本地原則,以決定是否要重用 Session。僅在 reuse_sessions 設定為 true 時才有意義。

    ReuseSession 應該是一個 fun

    fun(SuggestedSessionId, PeerCert, Compression, CipherSuite)

    SuggestedSessionId 是一個 binary()PeerCert 是一個 DER 編碼的憑證,Compression 是一個列舉整數,而 CipherSuite 的類型為 erl_cipher_suite()

  • {psk_identity, PSKHint} - 互動提示選項

    指定伺服器呈現給客戶端的伺服器身分提示。

  • {honor_cipher_order, HonorServerCipherOrder} - 權衡選項,會改變協定定義的行為

    如果 true,則使用伺服器偏好的 ECC 曲線選擇。如果 false (預設值),則使用客戶端偏好的選擇。

  • {honor_ecc_order, HonorServerECCOrder} - 權衡選項,會改變協定定義的行為

    如果 true,則使用伺服器偏好的 ECC 曲線選擇。如果 false (預設值),則使用客戶端偏好的選擇。

  • {dh, DHder} - 影響 DH 金鑰交換加密套件

    DER 編碼的 Diffie-Hellman 參數。如果指定,它會覆寫 dhfile 選項。

  • {dh_file, DHfile} - 影響 DH 金鑰交換加密套件

    包含 PEM 編碼的 Diffie-Hellman 參數的檔案路徑,如果協商了使用 Diffie-Hellman 金鑰交換的加密套件,伺服器將會使用這些參數。如果未指定,則使用預設參數。

此類型的連結

server_option_tls13()

檢視原始碼 (未匯出)
-type server_option_tls13() ::
          {session_tickets,
           SessionTickets :: disabled | stateful | stateless | stateful_with_cert | stateless_with_cert} |
          {stateless_tickets_seed, TicketSeed :: binary()} |
          {anti_replay,
           '10k' | '100k' |
           {BloomFilterWindowSize :: pos_integer(),
            BloomFilterHashFunctions :: pos_integer(),
            BloomFilterBits :: pos_integer()}} |
          {cookie, Cookie :: boolean()} |
          {early_data, EarlyData :: enabled | disabled}.

僅與 TLS-1.3 相關的選項。

  • {session_tickets, SessionTickets}

    設定會話票證功能。SessionTickets 的允許值為:

    • disabled
    • stateful
    • stateless
    • stateful_with_cert
    • stateless_with_cert

    如果 SessionTickets 未設定為 disabled,則啟用使用預先共享金鑰的會話恢復,且伺服器在成功連線後,會將有狀態或無狀態的會話票證傳送給客戶端。

    注意

    在預先共享金鑰會話票證恢復中,不涉及憑證交換。因此,ssl:peercert/1 不會傳回對等憑證,因為憑證只在初始交握期間傳送。為了將原始交握中的客戶端憑證與其發出的票證建立關聯,可以使用伺服器選項 stateful_with_certstateless_with_cert

    有狀態的會話票證是指向內部狀態資訊的資料庫參照。無狀態的會話票證是自我加密的二進位檔,其中包含密碼金鑰材料和狀態資料。

    警告

    SessionTickets 設定為 stateful_with_cert 時,客戶端憑證會與內部狀態資訊一起儲存,導致記憶體消耗增加。相反地,當它設定為 stateless_with_cert 時,客戶端憑證會編碼在傳送給客戶端的自我加密二進位檔中,導致有效負載大小增加。

    另請參閱 SSL 使用者指南,TLS 1.3 中的 Session Ticket 和 Session 恢復

  • {stateless_tickets_seed, TicketSeed} - 無狀態票證的選項

    設定用於加密無狀態會話票證的種子。允許的值是任何隨機產生的 binary/0。如果未設定此選項,則會隨機產生加密種子。

    警告

    在多個伺服器實例之間重複使用票證加密種子,可讓無狀態會話票證跨多個伺服器實例運作,但它會破壞跨實例的反重播保護。

    伺服器實例之間不精確的時間同步也可能影響會話票證的新鮮度檢查,可能會導致誤判為假陰性以及假陽性。

  • {anti_replay, AntiReplay} - 無狀態票證的選項

    根據 Bloom 篩選器設定伺服器的內建反重播功能。

    AntiReplay 的允許值是預定義的 '10k''100k',或定義 Bloom 篩選器屬性的自訂 3 元組:{WindowSize, HashFunctions, Bits}WindowSize 是目前 Bloom 篩選器輪換後經過的秒數,也是 ClientHello 新鮮度檢查所使用的視窗大小。HashFunctions 是雜湊函數的數量,而 Bits 是位元向量中的位元數。'10k''100k' 是具有下列屬性的簡單預設值:

    • '10k':Bloom 篩選器可以容納 10000 個元素,且誤判率為 3%。WindowSize:10,HashFunctions:5,Bits: 72985 (8.91 KiB)。
    • '100k':Bloom 篩選器可以容納 100000 個元素,且誤判率為 3%。WindowSize:10,HashFunctions:5,Bits:729845 (89.09 KiB)。

    另請參閱 SSL 使用者指南,TLS 1.3 中的反重播保護

  • {cookie, Cookie} - HelloRetryRequest 行為的選項

    如果 Cookietrue,這是預設值,伺服器會在 HelloRetryRequest 訊息中傳送 cookie 擴充。

    cookie 擴充有兩個主要目的。它允許伺服器強制客戶端在其顯式的網路位址上展示可達性 (因此提供了一定的 DoS 保護)。這主要適用於非連線導向的傳輸。它也允許將伺服器的狀態卸載到客戶端。預設會啟用 cookie 擴充,因為它是 RFC8446 中強制性的擴充。

  • {early_data, EarlyData} - 接受或拒絕早期資料的選項

    設定伺服器是否接受 (enabled) 或拒絕 (disabled) 客戶端傳送的早期資料。預設值為 disabled

類型:客戶端和伺服器選項

此類型的連結

common_option()

檢視原始碼 (未匯出)
-type common_option() ::
          {protocol, tls | dtls} |
          {handshake, hello | full} |
          {ciphers, cipher_suites()} |
          {signature_algs, signature_algs()} |
          {signature_algs_cert, [sign_scheme()]} |
          {keep_secrets, KeepSecrets :: boolean()} |
          {max_handshake_size, HandshakeSize :: pos_integer()} |
          {versions, [protocol_version()]} |
          {log_level, Level :: logger:level() | none | all} |
          {hibernate_after, HibernateTimeout :: timeout()} |
          {receiver_spawn_opts, SpawnOpts :: [erlang:spawn_opt_option()]} |
          {sender_spawn_opts, SpawnOpts :: [erlang:spawn_opt_option()]}.

用戶端和伺服器端通用的選項。

  • {protocol, Protocol} - 為傳輸層安全性選擇 TLS 或 DTLS 協定。

    預設值為 tls

  • {handshake, Completion} - 可能在 hello 階段暫停交握。

    預設值為 full。如果指定 hello,則交握會在 hello 訊息後暫停,允許使用者根據 hello 擴充做出決定,然後呼叫 handshake_continue/3handshake_cancel/1 來繼續或中止交握。

  • {keep_secrets, KeepSecrets} - 為金鑰記錄設定 TLS 1.3 連線。

    為了在 TLS 1.3 連線上擷取金鑰記錄資訊,必須預先設定以保留 client_random 和各種交握機密。

    預設會停用 (false) keep_secrets 功能。

    在 OTP 23.2 中新增。

  • {max_handshake_size, HandshakeSize} - 限制可接受的交握封包大小。

    用於限制有效 TLS 交握封包的大小,以避免 DoS 攻擊。

    整數 (24 位元,無符號)。預設值為 256*1024

  • {hibernate_after, HibernateTimeout} - 休眠非活動連線處理程序。

    當指定整數值時,TLS/DTLS 連線會在指定的非活動毫秒數後進入休眠狀態,從而減少其記憶體佔用量。如果未指定,處理程序永遠不會進入休眠狀態。

  • {log_level, Level} - 指定 TLS/DTLS 連線的記錄層級。

    警示記錄在 notice 層級,這是預設層級。debug 層級會觸發 TLS/DTLS 協定訊息的詳細記錄。另請參閱 SSL 應用程式

  • {receiver|sender_spawn_opts, SpawnOpts} - 設定 erlang spawn 選項。

    設定 TLS 傳送者和接收者處理程序的 spawn 選項。

    設定垃圾收集選項對於在 CPU 使用率和記憶體使用率之間進行權衡可能很有幫助。請參閱 erlang:spawn_opt/2

    對於使用 Erlang 分散式的連線,預設傳送者選項為 [...{priority, max}];此優先順序選項無法變更。對於所有連線,...link 會新增至接收者且無法變更。

此類型的連結

common_option_cert()

檢視原始碼 (未匯出)
-type common_option_cert() ::
          {certs_keys, CertsKeys :: [cert_key_conf()]} |
          {depth, AllowedCertChainLen :: pos_integer()} |
          {verify_fun, Verify :: {Verifyfun :: fun(), InitialUserState :: any()}} |
          {cert_policy_opts,
           PolicyOpts ::
               [{policy_set, [public_key:oid()]} |
                {explicit_policy, boolean()} |
                {inhibit_policy_mapping, boolean()} |
                {inhibit_any_policy, boolean()}]} |
          {allow_any_ca_purpose, Allow :: boolean()} |
          {crl_check, Check :: boolean() | peer | best_effort} |
          {crl_cache, crl_cache_opts()} |
          {partial_chain, anchor_fun()}.

用戶端和伺服器通用的憑證相關選項。

  • {certs_keys, CertsKeys} - 至少一個憑證和金鑰對。

    憑證 (或可能的憑證及其鏈) 清單,以及可用於驗證客戶端或伺服器的憑證相關聯的金鑰。將會選取被認為最佳且符合連線協商參數的憑證金鑰對。

    不同的簽章演算法會依以下順序設定優先順序:eddsaecdsarsa_pss_pssrsadsa。如果為相同的簽章演算法提供多個金鑰,它們將依強度設定優先順序 (引擎金鑰 除外;請參閱下一段)。這提供彈性,例如,設定預期在大多數情況下使用的新憑證,以及僅用於與舊系統通訊的較舊但可接受的憑證。請注意,誘導的額外負擔與彈性之間存在權衡;因此,應基於充分的理由選擇替代方案。

    引擎金鑰 將優先於其他金鑰。由於無法檢查引擎金鑰,因此提供多個引擎金鑰沒有意義。

    指定此選項時,它會覆寫所有單一憑證和金鑰選項。如需範例,請參閱 使用者指南

    注意

    只有不支援 dsa 憑證的 TLS-1.3 實作才支援 eddsa 憑證。rsa_pss_pss (使用機率簽章方案的 RSA 憑證) 在 TLS-1.2 和 TLS-1.3 中受支援,但某些 TLS-1.2 實作不支援 rsa_pss_pss

  • {depth, AllowedCertChainLen} - 限制憑證鏈中接受的憑證數。

    有效憑證路徑中,對等憑證之後可出現的最大非自行發行的中繼憑證數。因此,如果深度為 0,則對等端必須由信任的 ROOT-CA 直接簽署;如果為 1,則路徑可以是 PEER、CA、ROOT-CA;如果為 2,則路徑可以是 PEER、CA、CA、ROOT-CA,依此類推。預設值為 10。用於降低 DoS 攻擊的可能性。

  • {verify_fun, Verify} - 自訂憑證路徑驗證

    驗證函式應定義如下:

    fun(OtpCert :: #'OTPCertificate'{},
        Event, InitialUserState :: term()) ->
      {valid, UserState :: term()} |
      {fail, Reason :: term()} | {unknown, UserState :: term()}.
    
    fun(OtpCert :: #'OTPCertificate'{}, DerCert :: public_key:der_encoded(),
        Event, InitialUserState :: term()) ->
      {valid, UserState :: term()} |
      {fail, Reason :: term()} | {unknown, UserState :: term()}.
    
    Types:
          Event = {bad_cert, Reason :: atom() |
                  {revoked, atom()}} |
          {extension, #'Extension'{}} |
                  valid |
                  valid_peer

    當 X.509 路徑驗證發生錯誤或遇到 SSL 應用程式未知的擴展時,會呼叫驗證函式。當路徑驗證認為憑證有效時,也會呼叫此函式,以允許使用者應用程式存取路徑中的每個憑證。它會使用 valid_peervalid 作為驗證函式的 Event 參數,來區分對等憑證和 CA 憑證。關於 #'OTPCertificate'{}#'Extension'{} 的定義,請參閱 Public_Key 使用者指南

    • 如果驗證回呼函式傳回 {fail, Reason},驗證過程會立即停止,並向對等方傳送警示,且 TLS/DTLS 交握會終止。
    • 如果驗證回呼函式傳回 {valid, UserState},驗證過程會繼續。
    • 如果驗證回呼函式始終傳回 {valid, UserState},則無論驗證是否失敗,TLS/DTLS 交握都不會終止,並且會建立連線。
    • 如果使用使用者應用程式未知的擴展呼叫,則該函式應傳回 {unknown, UserState}

    請注意,如果函式針對標記為 critical 的擴展傳回 unknown,則驗證將會失敗。

    verify_peer mode 中的預設選項 verify_fun

    {fun(_, _, {bad_cert, _} = Reason, _) ->
       {fail, Reason};
        (_, _, {extension, _}, UserState) ->
       {unknown, UserState};
        (_, _, valid, UserState) ->
       {valid, UserState};
        (_, _, valid_peer, UserState) ->
           {valid, UserState}
     end, []}

    verify_none 模式中的預設選項 verify_fun

     {fun(_, _, {bad_cert, _}, UserState) ->
       {valid, UserState};
        (_, _, {extension, #'Extension'{critical = true}}, UserState) ->
       {valid, UserState};
        (_, _, {extension, _}, UserState) ->
       {unknown, UserState};
        (_, _, valid, UserState) ->
       {valid, UserState};
        (_, _, valid_peer, UserState) ->
           {valid, UserState}
     end, []}

    可能出現的路徑驗證錯誤以 {bad_cert, Reason} 的形式給出,其中 Reason 是:

    • unknown_ca

      在信任儲存區中找不到信任的 CA。信任的 CA 通常是所謂的 ROOT CA,也就是自我簽署的憑證。透過使用 partial_chain 選項,可以聲明對中繼 CA 的信任(根據 X-509,信任錨點不一定是自我簽署的)。

    • selfsigned_peer

      鏈中只包含一個自我簽署的憑證。

    • {invalid_ext_keyusage, [public_key:oid()]}

    如果對等憑證指定了擴展金鑰用法擴展,並且沒有根據對等方的角色包含作為 TLS 伺服器 (id-kp-ServerAuth) 或 TLS 用戶端 (id-kp-ClientAuth) 的用途。

    • {ca_invalid_ext_keyusage, [public_key:oid()]}

    如果 CA 憑證指定了擴展金鑰用法擴展,並且沒有根據與此 CA 連鎖的對等方的角色,包含作為 TLS 伺服器 (id-kp-ServerAuth) 或 TLS 用戶端 (id-kp-ClientAuth) 的用途,或者選項 allow_any_ca_purpose 設定為 true,但 CA 憑證用途中不包含特殊的 any 值 (anyExtendedKeyUsage)。

  • {cert_policy_opts, PolicyOpts} - 處理憑證策略。

    為憑證路徑驗證過程設定 X.509 憑證策略處理;有關更多詳細資訊,請參閱 public_key:pkix_path_validation/3

  • {allow_any_ca_purpose, boolean()} - 處理憑證擴展金鑰用法擴展

    如果 CA 憑證具有擴展金鑰用法擴展,但不想限制金鑰的用法,則可以包含特殊的 anyExtendedKeyUsage 用途。如果此選項設定為 true,則會自動接受包含該用途的 CA 的所有金鑰用法用途,該選項預設為 false。

  • {cerl_check, Check} - 處理憑證撤銷清單。

    在憑證鏈的路徑驗證 (public_key:pkix_path_validation/3) 期間,對所有憑證執行 CRL(憑證撤銷清單)驗證 (public_key:pkix_crls_validate/3)Check 預設為 false

    Check 的含義如下

    • false

      不執行任何檢查。

    • peer

      僅對對等憑證執行檢查。

    • best_effort

      如果無法確定憑證撤銷狀態,則將其接受為有效。

      為連線指定的 CA 憑證將用於建構驗證 CRL 的憑證鏈。

      CRL 將從本機或外部快取中提取。請參閱 ssl_crl_cache_api

此類型的連結

common_option_dtls()

檢視原始碼 (未匯出)
-type common_option_dtls() ::
          {use_srtp, UseSrtp :: #{protection_profiles := [binary()], mki => binary()}}.

僅適用於 DTLS 的用戶端和伺服器通用選項。

  • {use_srtp, UseSrtp} - 設定 use_srtp DTLS hello 擴展。

    為了協商使用 SRTP 資料保護,用戶端會在 DTLS 擴展用戶端 hello 中包含一個類型為 "use_srtp" 的擴展。只有在傳輸的資料是 RTP 或 RTCP 時,才必須使用此擴展。

    該值是一個具有強制性 protection_profiles 參數和可選 mki 參數的映射。

    protection_profiles 設定用戶端可接受的 SRTP 保護設定檔列表。每個設定檔都是一個 2 位元組的二進位。範例:#{protection_profiles => [<<0,2>>, <<0,5>>]}

    mki 設定由用戶端選擇的 SRTP 主金鑰識別碼。

    srtp_mki 欄位包含與由此交握衍生的 SRTP 主金鑰相關聯的 SRTP MKI 的值。每個 SRTP 會話必須恰好有一個主金鑰,該主金鑰用於在任何給定時間保護封包。用戶端必須選擇 MKI 值,使其與上次使用的 MKI 值不同,並且應使這些值在 TLS 會話期間保持唯一。

    注意

    OTP 不處理 SRTP,因此需要 SRTP 編碼器/解碼器和封包多工解碼器的外部實作才能使用 use_srtp 擴展。另請參閱選項 transport_option

    接收包含 "use_srtp" 擴展的擴展 hello 的伺服器可以透過在擴展伺服器 hello 中包含一個類型為 "use_srtp" 的擴展來同意使用 SRTP,其中包含選擇的保護設定檔。只有在傳輸的資料是 RTP 或 RTCP 時,才必須使用此擴展。

此類型的連結

common_option_legacy()

檢視原始碼 (未匯出)
-type common_option_legacy() ::
          {cert, Cert :: public_key:der_encoded() | [public_key:der_encoded()]} |
          {certfile, CertPem :: file:filename()} |
          {key, Key :: key()} |
          {keyfile, KeyPem :: file:filename()} |
          {password, KeyPemPasswd :: iodata() | fun(() -> iodata())} |
          {log_alert, LogAlert :: boolean()} |
          {padding_check, PaddingCheck :: boolean()} |
          {beast_mitigation, one_n_minus_one | zero_n | disabled} |
          {ssl_imp, Imp :: new | old}.

為了支援其他選項而遭到棄用、不安全使用或完全不再相關的舊版選項。

  • {cert, Certs}

    請改用選項 certs_keys

  • {certfile, CertPem}

    請改用選項 certs_keys

  • {keyfile, KeyPem}

    請改用選項 certs_keys

  • {password, KeyPemPasswd}

    請改用選項 certs_keys

  • {log_alert, LogAlert}

    如果 LogAlertfalse,則不會顯示 TLS/DTLS 警示報告。在 OTP 22 中已棄用;請改用 {log_level, Level}

  • {padding_check, PaddingCheck} - 互通性權衡選項

    僅影響 TLS-1.0 連線。如果設定為 false,則會停用區塊密碼填充檢查,以便能夠與舊版軟體互通。

    警告

    使用 {padding_check, false} 會使 TLS 容易受到 Poodle 攻擊。

  • {beast_mitigation, BeastMitigation} - 互通性權衡選項

    僅影響 TLS-1.0 連線。用於變更 BEAST 緩解策略,以便與舊版軟體互通。預設為 one_n_minus_one

    one_n_minus_one - 執行 1/n-1 BEAST 緩解。

    zero_n - 執行 0/n BEAST 緩解。

    disabled - 停用 BEAST 緩解。

    警告

    使用 {beast_mitigation, disabled} 會使 TLS-1.0 容易受到 BEAST 攻擊。

  • {ssl_imp, Imp}

    自 OTP 17 起已棄用;沒有任何效果。

此類型的連結

common_option_pre_tls13()

檢視原始碼 (未匯出)
-type common_option_pre_tls13() ::
          {eccs, NamedCurves :: [named_curve()]} |
          {secure_renegotiate, SecureRenegotiate :: boolean()} |
          {user_lookup_fun, {Lookupfun :: fun(), UserState :: any()}}.

TLS-1.3 之前用戶端和伺服器端通用的選項。

  • {eccs, NamedCurves} - 具名橢圓曲線

    可以在 TLS-1.3 之前的金鑰交換中使用的橢圓曲線。

  • {secure_renegotiate, SecureRenegotiate} - 互通性權衡選項

    指定是否拒絕不符合 RFC 5746 的重新協商嘗試。預設情況下,SecureRenegotiatetrue,表示會強制執行安全重新協商。如果 SecureRenegotiatefalse,如果可能,仍會使用安全重新協商,但如果對等方不支持 RFC 5746,則會回退到不安全重新協商。

  • {user_lookup_fun, {LookupFun, UserState}} - PSK/SRP 密碼套件選項

    查詢函式定義如下:

    fun(psk, PSKIdentity :: binary(), UserState :: term()) ->
      {ok, SharedSecret :: binary()} | error;
    fun(srp, Username :: binary(), UserState :: term()) ->
      {ok, {SRPParams :: srp_param_type(), Salt :: binary(),
            DerivedKey :: binary()}} | error.

    對於預先共享金鑰 (PSK) 密碼套件,查詢函式由用戶端和伺服器呼叫,以確定共享秘密。當由用戶端呼叫時,PSKIdentity 是伺服器提供的提示,或者 undefined。當由伺服器呼叫時,PSKIdentity 是用戶端提供的身份。

    對於安全遠端密碼 (SRP),該函式僅由伺服器使用,以取得伺服器用來產生其會話金鑰的參數。DerivedKey 應根據 RFC 2945RFC 5054 衍生:crypto:sha([Salt, crypto:sha([Username, <<$:>>, Password])])

此類型的連結

common_option_tls13()

檢視來源
-type common_option_tls13() ::
          {supported_groups, [group()]} | {key_update_at, KeyUpdateAt :: pos_integer()}.

適用於 TLS-1.3 的用戶端和伺服器通用選項。

  • {supported_groups, Groups} - 金鑰交換選項

    TLS 1.3 引入了 "supported_groups" 擴展,該擴展用於協商 TLS 1.3 交握中的 Diffie-Hellman 參數。用戶端和伺服器都可以指定他們願意使用的參數列表。

    如果未指定,則將使用預設列表 ([x25519, x448, secp256r1, secp384r1]),該列表會根據安裝的加密程式庫版本進行篩選。

  • {key_update_at, KeyUpdateAt} - 會話金鑰續訂

    設定在執行自動金鑰更新之前,可以在 TLS 1.3 連線上傳送的最大位元組數。

    在給定的一組金鑰下,可以安全加密的純文字量存在加密限制。目前的預設設定可確保資料完整性不會以大於 1/2^57 的機率遭到破壞。如需更多資訊,請參閱 TLS 中經驗證的加密使用的限制

類型:Info

-type connection_info() ::
          [{protocol, protocol_version()} |
           {session_resumption, boolean()} |
           {selected_cipher_suite, erl_cipher_suite()} |
           {sni_hostname, term()} |
           {ciphers, [erl_cipher_suite()]}] |
          connection_info_pre_tls13() |
          security_info().

關於已建立連線的一些資訊的金鑰值清單。

此類型的連結

connection_info_keys()

檢視來源
-type connection_info_keys() ::
          [protocol | selected_cipher_suite | sni_hostname | session_resumption | ciphers |
           client_random | server_random | master_secret | keylog | session_id | session_data | ecc |
           srp_username].

可以擷取資訊的 TLS 連線金鑰。

此類型的連結

connection_info_pre_tls13()

檢視原始碼 (未匯出)
-type connection_info_pre_tls13() ::
          [{session_id, session_id()} |
           {session_data, binary()} |
           {ecc, {named_curve, term()}} |
           {srp_username, term()}].

TLS-1.3 之前相關的 TLS 連線資訊。

此類型的連結

security_info()

檢視原始碼 (未匯出)
-type security_info() ::
          [{client_random, binary()} |
           {server_random, binary()} |
           {master_secret, binary()} |
           {keylog, term()}].

可用於 NSS 金鑰記錄的 TLS 連線資訊。

類型:已棄用

此類型已棄用。類型 ssl:prf_random() 已棄用;僅在已棄用的函式 prf/5 中使用,而且不再需要。
-type prf_random() :: client_random | server_random.

用戶端 API

此函式的連結

connect(TCPSocket, TLSOptions)

檢視原始碼 (自 OTP R14B 起)
-spec connect(TCPSocket, TLSOptions) -> {ok, sslsocket()} | {error, Reason}
                 when
                     TCPSocket :: socket(),
                     TLSOptions :: [tls_client_option()],
                     Reason :: closed | {options, any()} | error_alert() | reason().

等同於 connect(TCPSocket, TLSOptions, infinity)

此函式的連結

connect(TCPSocketOrHost, TLSOptionsOrPort, TimeoutOrTLSOptions)

檢視來源
-spec connect(TCPSocketOrHost, TLSOptionsOrPort, TimeoutOrTLSOptions) ->
                 {ok, sslsocket()} | {ok, sslsocket(), Ext :: protocol_extensions()} | {error, Reason}
                 when
                     TCPSocketOrHost :: socket() | host(),
                     TLSOptionsOrPort :: [tls_client_option()] | inet:port_number(),
                     TimeoutOrTLSOptions :: [tls_client_option()] | timeout(),
                     Reason :: closed | timeout | {options, any()} | error_alert() | reason().

開啟 TLS/DTLS 連線。

connect(TCPSocket, TLSOptions, Timeout).

通過執行客戶端 TLS 交握,將已連線的 gen_tcp(或等效)socket 升級為 TLS socket。

connect(Host, Port, TLSOptions).

開啟與 HostPort 的 TLS/DTLS 連線。此呼叫等同於

connect(Host, Port, TLSOptions, infinity).
此函式的連結

connect(Host, Port, TLSOptions, Timeout)

檢視來源
-spec connect(Host, Port, TLSOptions, Timeout) ->
                 {ok, sslsocket()} | {ok, sslsocket(), Ext :: protocol_extensions()} | {error, Reason}
                 when
                     Host :: host(),
                     Port :: inet:port_number(),
                     TLSOptions :: [tls_client_option()],
                     Timeout :: timeout(),
                     Reason :: closed | timeout | {options, any()} | error_alert() | reason().

開啟到 Host, Port 的 TLS/DTLS 連線。

verify 選項設定為 verify_peer 時,除了通常的 X.509 路徑驗證檢查外,還會執行 public_key:pkix_verify_hostname/2 檢查。如果檢查失敗,則錯誤 {bad_cert, hostname_check_failed} 將會傳播到路徑驗證函式,您可以在其中使用 public_key:pkix_verify_hostname/3 API 的完整功能進行自訂檢查。當提供 server_name_indication 選項時,其值(DNS 名稱)將用作 public_key:pkix_verify_hostname/2ReferenceID。當未提供 server_name_indication 選項時,Host 參數將用作伺服器名稱指示擴充功能。Host 參數也將用於 public_key:pkix_verify_hostname/2 檢查。如果 Host 參數是 inet:ip_address(),則用於檢查的 ReferenceID 將為 {ip, Host};否則將假設為 dns_id,如果失敗則會回退至 ip

注意

根據良好實務,憑證不應使用 IP 位址作為「伺服器名稱」,尤其是在封閉網路之外。

如果使用 {handshake, hello} 選項,則在收到伺服器 hello 訊息後,交握會暫停,且成功回應為 {ok, SslSocket, Ext} 而非 {ok, SslSocket}。之後,透過呼叫 handshake_continue/3handshake_cancel/1 來繼續或取消交握。

如果 active 選項設定為 oncetrue 或整數值,則擁有 SSL socket 的程序將會收到 active_msgs() 類型的訊息。

伺服器 API

此函式的連結

handshake(HsSocket)

檢視原始碼 (自 OTP 21.0 起)
-spec handshake(HsSocket) -> {ok, SslSocket} | {ok, SslSocket, Ext} | {error, Reason}
                   when
                       HsSocket :: sslsocket(),
                       SslSocket :: sslsocket(),
                       Ext :: protocol_extensions(),
                       Reason :: closed | timeout | error_alert().

等同於 handshake(HsSocket, infinity)

此函式的連結

handshake(HsSocket, OptionsOrTimeout)

檢視原始碼 (自 OTP 21.0 起)
-spec handshake(HsSocket, OptionsOrTimeout) -> {ok, SslSocket} | {ok, SslSocket, Ext} | {error, Reason}
                   when
                       HsSocket :: sslsocket(),
                       OptionsOrTimeout :: timeout() | [server_option()],
                       SslSocket :: sslsocket(),
                       Ext :: protocol_extensions(),
                       Reason :: closed | timeout | error_alert().

執行 TLS/DTLS 伺服器端交握。

如果第二個參數是逾時值

handshake(HsSocket, Timeout).

此呼叫等同於

handshake(HsSocket, [], Timeout).

否則,如果第二個參數是選項列表

handshake(HsSocket, Options).

此呼叫等同於

handshake(HsSocket, Options, infinity).
此函式的連結

handshake(Socket, Options, Timeout)

檢視原始碼 (自 OTP 21.0 起)
-spec handshake(Socket, Options, Timeout) -> {ok, SslSocket} | {ok, SslSocket, Ext} | {error, Reason}
                   when
                       Socket :: socket() | sslsocket(),
                       SslSocket :: sslsocket(),
                       Options :: [server_option()],
                       Timeout :: timeout(),
                       Ext :: protocol_extensions(),
                       Reason :: closed | timeout | {options, any()} | error_alert().

執行 TLS/DTLS 伺服器端交握。

如果交握成功,則傳回新的 TLS/DTLS socket。

如果 Socket 是普通的 socket(),則通過執行 TLS 伺服器端交握並傳回 TLS socket,將 gen_tcp 或等效的 socket 升級為 SSL socket。

注意

普通的 Socket 必須在呼叫此函式之前,以及客戶端嘗試使用 TLS 連線之前,處於被動模式 ({active, false});否則,此函式的行為是未定義的。確保這一點的最佳方法是在被動模式下建立普通的監聽 socket。

如果 Socketsslsocket(),則提供在 listen/2 中指定的額外 TLS/DTLS 選項,然後執行 TLS/DTLS 交握。如果交握成功,則傳回新的 TLS/DTLS socket。

警告

不設定逾時會使伺服器更容易受到阻斷服務 (DoS) 攻擊。

如果指定選項 {handshake, hello},則在收到客戶端 hello 訊息後,交握會暫停,且成功回應為 {ok, SslSocket, Ext} 而非 {ok, SslSocket}。之後,透過呼叫 handshake_continue/3handshake_cancel/1 來繼續或取消交握。

如果選項 active 設定為 oncetrue 或整數值,則擁有 sslsocket() 的程序將會收到 active_msgs() 類型的訊息。

此函式的連結

listen(Port, Options)

檢視來源
-spec listen(Port, Options) -> {ok, ListenSocket} | {error, Reason}
                when
                    Port :: inet:port_number(),
                    Options :: [tls_server_option()],
                    ListenSocket :: sslsocket(),
                    Reason :: {options, any()} | reason().

建立 SSL 接聽通訊端。

此函式的連結

transport_accept(ListenSocket)

檢視來源
-spec transport_accept(ListenSocket) -> {ok, SslSocket} | {error, Reason}
                          when ListenSocket :: sslsocket(), SslSocket :: sslsocket(), Reason :: reason().

等同於 transport_accept(ListenSocket, infinity)

此函式的連結

transport_accept(ListenSocket, Timeout)

檢視來源
-spec transport_accept(ListenSocket, Timeout) -> {ok, SslSocket} | {error, Reason}
                          when
                              ListenSocket :: sslsocket(),
                              Timeout :: timeout(),
                              SslSocket :: sslsocket(),
                              Reason :: reason().

接受接聽通訊端上的連入連線請求。

ListenSocket 必須是從 listen/2 傳回的 socket。傳回的 socket 將傳遞至 handshake/1,2,3,以完成交握並建立 TLS/DTLS 連線。

警告

大多數 API 函式都要求已建立 TLS/DTLS 連線才能按預期工作。

接受的 socket 會繼承在 listen/2 中為 ListenSocket 設定的選項。

Timeout 的預設值為 infinity。如果指定 Timeout,且在指定的時間內未接受任何連線,則會傳回 {error, timeout}

客戶端和伺服器 API

-spec close(SslSocket) -> ok | {error, Reason} when SslSocket :: sslsocket(), Reason :: any().

關閉 TLS/DTLS 連線。

此函式的連結

close(SslSocket, How)

檢視原始碼 (自 OTP 18.1 起)
-spec close(SslSocket, How) -> ok | {ok, port()} | {ok, port(), Data} | {error, Reason}
               when
                   SslSocket :: sslsocket(),
                   How :: timeout() | {NewController :: pid(), timeout()},
                   Data :: binary(),
                   Reason :: any().

關閉或降級 TLS 連線。

在後一種情況下,在收到來自對等的 TLS 關閉警示後,傳輸連線將移交給 NewController 程序。傳回的傳輸 socket 將設定以下選項:[{active, false}, {packet, 0}, {mode, binary}]

在降級的情況下,關閉函式可能會傳回一些二進位資料,使用者應將其視為在降級連線上收到的第一個位元組。

此函式的連結

controlling_process(SslSocket, NewOwner)

檢視來源
-spec controlling_process(SslSocket, NewOwner) -> ok | {error, Reason}
                             when SslSocket :: sslsocket(), NewOwner :: pid(), Reason :: any().

為 SSL 通訊端指派新的控制程序。

控制程序是 SSL socket 的擁有者,並接收來自 socket 的所有訊息。

此函式的連結

handshake_cancel(Socket)

檢視原始碼 (自 OTP 21.0 起)
-spec handshake_cancel(#sslsocket{fd :: term(), pid :: term()}) -> any().

以嚴重錯誤 USER_CANCELED 警示取消交握。

此函式的連結

handshake_continue(HsSocket, Options)

檢視原始碼 (自 OTP 21.0 起)
-spec handshake_continue(HsSocket, Options) -> {ok, SslSocket} | {error, Reason}
                            when
                                HsSocket :: sslsocket(),
                                Options :: [tls_client_option() | tls_server_option()],
                                SslSocket :: sslsocket(),
                                Reason :: closed | timeout | error_alert().

等同於 handshake_continue(HsSocket, Options, infinity)

此函式的連結

handshake_continue(HsSocket, Options, Timeout)

檢視原始碼 (自 OTP 21.0 起)
-spec handshake_continue(HsSocket, Options, Timeout) -> {ok, SslSocket} | {error, Reason}
                            when
                                HsSocket :: sslsocket(),
                                Options :: [tls_client_option() | tls_server_option()],
                                Timeout :: timeout(),
                                SslSocket :: sslsocket(),
                                Reason :: closed | timeout | error_alert().

繼續 TLS 交握,可能使用新的、額外的或變更的選項。

此函式的連結

recv(SslSocket, Length)

檢視來源
-spec recv(SslSocket, Length) -> {ok, Data} | {error, reason()}
              when
                  SslSocket :: sslsocket(),
                  Length :: non_neg_integer(),
                  Data :: binary() | list() | HttpPacket,
                  HttpPacket :: any().

等同於 recv(Socket, Length, infinity)

此函式的連結

recv(SslSocket, Length, Timeout)

檢視來源
-spec recv(SslSocket, Length, Timeout) -> {ok, Data} | {error, reason()}
              when
                  SslSocket :: sslsocket(),
                  Length :: non_neg_integer(),
                  Data :: binary() | list() | HttpPacket,
                  Timeout :: timeout(),
                  HttpPacket :: any().

以被動模式從通訊端接收封包。

關閉的 socket 由傳回值 {error, closed} 指示。參數 Length 僅在 socket 處於 raw 模式時才有意義,並表示要讀取的位元組數。如果 Length 為零,則會傳回所有可用的位元組。如果 Length 大於零,則會傳回剛好 Length 個位元組,或者發生錯誤;當 socket 從另一端關閉時,可能會捨棄少於 Length 個位元組的資料。

可選參數 Timeout 指定以毫秒為單位的逾時。預設值為 infinity

此函式的連結

send(SslSocket, Data)

檢視來源
-spec send(SslSocket, Data) -> ok | {error, reason()} when SslSocket :: sslsocket(), Data :: iodata().

Data 寫入 SslSocket

一個值得注意的傳回值是 {error, closed},表示 socket 已關閉。

此函式的連結

setopts(SslSocket, Options)

檢視來源
-spec setopts(SslSocket, Options) -> ok | {error, reason()}
                 when SslSocket :: sslsocket(), Options :: [gen_tcp:option()].

根據 Options 為通訊端 SslSocket 設定選項。

此函式的連結

shutdown(SslSocket, How)

檢視原始碼 (自 OTP R14B 起)
-spec shutdown(SslSocket, How) -> ok | {error, reason()}
                  when SslSocket :: sslsocket(), How :: read | write | read_write.

立即單向或雙向關閉通訊端。

How == write 表示關閉 socket 進行寫入,但仍然可以從中讀取。

為了處理對等方已在寫入端執行關閉的情況,選項 {exit_on_close, false} 非常有用。

僅限 TLS-1.3 API

此函式的連結

groups()

檢視原始碼 (自 OTP 27.0 起)
-spec groups() -> [group()].

傳回 TLS 1.3 中所有支援的群組。

自 OTP 22.0 起存在;自 OTP 27 起記錄。

此函式的連結

groups(Description)

檢視原始碼 (自 OTP 27.0 起)
-spec groups(Description) -> [group()] when Description :: default.

傳回 TLS 1.3 中預設支援的群組。

自 OTP 22.0 起存在;自 OTP 27 起記錄。

此函式的連結

update_keys(SslSocket, Type)

檢視原始碼 (自 OTP 22.3 起)
-spec update_keys(SslSocket, Type) -> ok | {error, reason()}
                     when SslSocket :: sslsocket(), Type :: write | read_write.

建立新的工作階段金鑰。

在給定的一組金鑰下,可以安全加密的明文數量存在密碼學限制。如果資料量超過這些限制,則會觸發金鑰更新並安裝一組新的金鑰。另請參閱 common_option_tls13/0 中的 key_update_at 選項。

此函式可用於在 TLS-1.3 連線上明確啟動金鑰更新。金鑰更新有兩種型別:如果 Typewrite,則只更新寫入金鑰;如果 Typeread_write,則更新讀取和寫入金鑰。

TLS-1.3 前 API

此函式的連結

eccs()

檢視原始碼 (自 OTP 19.2 起)
-spec eccs() -> NamedCurves when NamedCurves :: [named_curve()].

傳回所有 TLS/DTLS 1.3 之前版本的所有支援橢圓曲線清單,包括舊版曲線。

此函式的連結

eccs(Version)

檢視原始碼 (自 OTP 19.2 起)
-spec eccs(Version) -> NamedCurves
              when
                  Version :: 'tlsv1.2' | 'tlsv1.1' | tlsv1 | 'dtlsv1.2' | dtlsv1,
                  NamedCurves :: [named_curve()].

傳回 Version 預設支援的橢圓曲線。

這是 eccs/0 傳回值的一個子集。

此函式的連結

renegotiate(SslSocket)

檢視原始碼 (自 OTP R14B 起)
-spec renegotiate(SslSocket) -> ok | {error, reason()} when SslSocket :: sslsocket().

啟動新的交握。

一個值得注意的回傳值是 {error, renegotiation_rejected},表示對等端拒絕重新協商,但連線仍使用先前協商的會期保持活動狀態。

TLS-1.3 移除了早期 TLS 版本中的重新協商功能,並新增了一個稱為金鑰更新的新功能,該功能取代了重新協商最重要的部分:刷新會期金鑰。這會在達到純文字限制後自動觸發,並且可以使用 common_option_tls13/0 中的 key_update_at 選項進行設定。

實用函數

此函式的連結

append_cipher_suites(Deferred, Suites)

檢視原始碼 (自 OTP 20.3 起)
-spec append_cipher_suites(Deferred, Suites) -> ciphers()
                              when Deferred :: ciphers() | cipher_filters(), Suites :: ciphers().

使 Deferred 套件成為最不慣用的套件。

延遲的密碼套件(Deferred)將被放置在密碼套件列表 Suites 的末尾,如果它們存在於 Suites 中,則會將其移除。Deferred 可以是密碼套件的列表,也可以是篩選器的列表。在後者的情況下,篩選器會被用在 Suites 上以提取延遲的密碼列表。

此函式的連結

cipher_suites(Description, Version)

檢視原始碼 (自 OTP 20.3 起)
-spec cipher_suites(Description, Version) -> ciphers()
                       when
                           Description :: default | all | exclusive | anonymous | exclusive_anonymous,
                           Version :: protocol_version().

列出對應於 Description 的所有可用密碼套件。

exclusiveexclusive_anonymous 選項會獨佔地列出 Version 中首次支援的密碼套件,而其他選項則會包含從最低可能版本到 Version 的所有密碼套件。all 選項包含所有套件,但匿名套件除外。預設情況下不支援匿名套件。

注意

TLS-1.3 與先前的 TLS 版本沒有重疊的密碼套件,這表示 cipher_suites(all, 'tlsv1.3') 的結果包含一組可與 TLS-1.3 搭配使用的單獨套件,以及另一組可在協商較低版本時使用的套件。所謂的 PSKSRP 套件(在 TLS-1.3 之前)需要額外的設定才能運作;也就是 user_lookup_function 選項。TLS-1.3 不支援匿名套件。

另請注意,此函數返回的密碼套件是 OTP SSL 應用程式可以支援的密碼套件,前提是它們受到與 OTP Crypto 應用程式連結的 crypto 函式庫支援。使用 ssl:filter_cipher_suites(Suites, []) 來篩選清單,以取得目前的 crypto 函式庫。請注意,密碼套件可能會因為太舊或太新而遭到篩除,這取決於 crypto 函式庫。

此函式的連結

cipher_suites(Description, Version, StringType)

檢視原始碼 (自 OTP 22.0 起)
-spec cipher_suites(Description, Version, StringType) -> [string()]
                       when
                           Description :: default | all | exclusive | anonymous,
                           Version :: protocol_version(),
                           StringType :: rfc | openssl.

等同於 cipher_suites/2,但列出 RFC 或 OpenSSL 字串名稱,而不是 erl_cipher_suite()

此函式的連結

clear_pem_cache()

檢視原始碼 (自 OTP 17.5 起)
-spec clear_pem_cache() -> ok.

清除 PEM 快取。

SSL API 函數使用的 PEM 檔案會為了效能因素而進行快取。快取會定期自動檢查,以判斷是否應使任何快取項目失效。

此函數提供了一種無條件清除整個快取的方法,從而強制重新載入先前快取的 PEM 檔案。

此函式的連結

connection_information(SslSocket)

檢視原始碼 (自 OTP 18.0 起)
-spec connection_information(SslSocket) -> {ok, Result} | {error, reason()}
                                when SslSocket :: sslsocket(), Result :: connection_info().

傳回關於連線的最相關資訊。

一些未定義的項目將被篩除。不會返回任何會影響連線安全性的值。

注意

舊版 cipher_suite 項目已在 OTP 23 中移除。先前它以其(未記載的)舊版格式返回密碼套件。它已被 selected_cipher_suite 取代。

此函式的連結

connection_information(SslSocket, Items)

檢視原始碼 (自 OTP 18.0 起)
-spec connection_information(SslSocket, Items) -> {ok, Result} | {error, reason()}
                                when
                                    SslSocket :: sslsocket(),
                                    Items :: connection_info_keys(),
                                    Result :: connection_info().

如果已定義,則傳回關於連線的請求資訊項目。

請注意,client_randomserver_randommaster_secretkeylog 的值會影響連線的安全性。

為了從 TLS 1.3 連線中檢索 keylog 和其他機密資訊,必須預先設定 keep_secrets 選項並將其設定為 true

注意

如果僅請求未定義的選項,則產生的列表可能是空的。

此函式的連結

export_key_materials(SslSocket, Labels, Contexts, WantedLengths)

檢視原始碼 (自 OTP 27.0 起)
-spec export_key_materials(SslSocket, Labels, Contexts, WantedLengths) ->
                              {ok, ExportKeyMaterials} | {error, reason()}
                              when
                                  SslSocket :: sslsocket(),
                                  Labels :: [binary()],
                                  Contexts :: [binary() | no_context],
                                  WantedLengths :: [non_neg_integer()],
                                  ExportKeyMaterials :: [binary()].

等同於 export_key_materials(TLSSocket, Labels, Contexts, WantedLengths, true)

此函式的連結

export_key_materials(SslSocket, Labels, Contexts, WantedLengths, ConsumeSecret)

檢視原始碼 (自 OTP 27.0 起)
-spec export_key_materials(SslSocket, Labels, Contexts, WantedLengths, ConsumeSecret) ->
                              {ok, ExportKeyMaterials} |
                              {error, exporter_master_secret_already_consumed | bad_input}
                              when
                                  SslSocket :: sslsocket(),
                                  Labels :: [binary()],
                                  Contexts :: [binary() | no_context],
                                  WantedLengths :: [non_neg_integer()],
                                  ConsumeSecret :: boolean(),
                                  ExportKeyMaterials :: [binary()].

使用 TLS 連線的偽隨機函數 (TLS-1.3 之前的 PRF) 或金鑰衍生函數 (TLS-1.3 中的 HKDF) 來產生和匯出金鑰材料。

在 TLS-1.3 中,使用 no_context 等同於指定一個空的上下文(空的二進位資料)。在 TLS-1.3 之前,no_context 和空的上下文會產生不同的結果。

ConsumeSecret 引數僅在 TLS-1.3 中相關,它會導致 TLS-1.3 的 exporter_master_secret 被使用,從而使其不可用並提高安全性。進一步嘗試呼叫此函數將會失敗。

此函式的連結

filter_cipher_suites(Suites, Filters)

檢視原始碼 (自 OTP 20.3 起)
-spec filter_cipher_suites(Suites, Filters) -> Ciphers
                              when
                                  Suites :: ciphers(), Filters :: cipher_filters(), Ciphers :: ciphers().

如果任何篩選函數針對密碼套件的任何部分返回 false,則移除該密碼套件。

如果沒有為某些部分提供篩選函數,則預設行為會將其視為返回 true 的篩選函數。有關範例,請參閱自訂密碼套件。此外,此函數還會篩選密碼套件以排除 OTP Crypto 應用程式使用的加密庫不支援的密碼套件,這表示 ssl:filter_cipher_suites(Suites, []) 等同於僅套用加密庫支援的篩選器。

-spec format_error(Error) -> ReasonStr when Error :: {error, reason()} | reason(), ReasonStr :: string().

將 SSL 函數返回的錯誤呈現為可列印的字串。

此函式的連結

getopts(SslSocket, OptionNames)

檢視來源
-spec getopts(SslSocket, OptionNames) -> {ok, [gen_tcp:option()]} | {error, reason()}
                 when SslSocket :: sslsocket(), OptionNames :: [gen_tcp:option_name()].

取得指定 socket 選項的值。

此函式的連結

getstat(SslSocket)

檢視原始碼 (自 OTP 19.0 起)
-spec getstat(SslSocket) -> {ok, OptionValues} | {error, inet:posix()}
                 when SslSocket :: sslsocket(), OptionValues :: [{inet:stat_option(), integer()}].

取得底層 socket 的統計資訊。

此函式的連結

getstat(SslSocket, Options)

檢視原始碼 (自 OTP 19.0 起)
-spec getstat(SslSocket, Options) -> {ok, OptionValues} | {error, inet:posix()}
                 when
                     SslSocket :: sslsocket(),
                     Options :: [inet:stat_option()],
                     OptionValues :: [{inet:stat_option(), integer()}].

取得底層 socket 的一個或多個統計值。

如需更多詳細資訊,請參閱 inet:getstat/2

此函式的連結

negotiated_protocol(SslSocket)

檢視原始碼 (自 OTP 18.0 起)
-spec negotiated_protocol(SslSocket) -> {ok, Protocol} | {error, Reason}
                             when
                                 SslSocket :: sslsocket(),
                                 Protocol :: binary(),
                                 Reason :: protocol_not_negotiated | closed.

返回透過 ALPN 或 NPN 擴展協商的協定。

-spec peercert(SslSocket) -> {ok, Cert} | {error, reason()}
                  when SslSocket :: sslsocket(), Cert :: public_key:der_encoded().

對等憑證會以 DER 編碼的二進位形式返回。

可以使用 public_key:pkix_decode_cert/2 解碼憑證。有關憑證的建議進一步閱讀內容為Public_Key 使用者指南SSL 使用者指南

-spec peername(SslSocket) -> {ok, {Address, Port}} | {error, reason()}
                  when
                      SslSocket :: sslsocket(), Address :: inet:ip_address(), Port :: inet:port_number().

返回對等的位址和埠號。

此函式的連結

prepend_cipher_suites(Preferred, Suites)

檢視原始碼 (自 OTP 20.3 起)
-spec prepend_cipher_suites(Preferred, Suites) -> ciphers()
                               when Preferred :: ciphers() | cipher_filters(), Suites :: ciphers().

使 Preferred 套件成為最優先的套件。

偏好的套件(Preferred)將被放置在密碼套件列表 Suites 的開頭,如果它們存在於 Suites 中,則會將其移除。Preferred 可以是密碼套件的列表,也可以是篩選器的列表。在後者的情況下,篩選器會被用在 Suites 上以提取偏好的密碼列表。

此函式的連結

signature_algs(Description, Version)

檢視原始碼 (自 OTP 26.0 起)
-spec signature_algs(Description, Version) -> signature_algs()
                        when Description :: default | all | exclusive, Version :: protocol_version().

列出對應於 Description 的所有可用簽章演算法。

exclusive 選項會獨佔地列出該協議版本的演算法或演算法方案,而 defaultall 選項則會列出組合列表,以支援從 (D)TLS-1.2(第一個支援設定簽名演算法的版本)到 Version 的協議範圍。

範例

1> ssl:signature_algs(default, 'tlsv1.3').
[eddsa_ed25519,eddsa_ed448,ecdsa_secp521r1_sha512,
ecdsa_secp384r1_sha384,ecdsa_secp256r1_sha256,
rsa_pss_pss_sha512,rsa_pss_pss_sha384,rsa_pss_pss_sha256,
rsa_pss_rsae_sha512,rsa_pss_rsae_sha384,rsa_pss_rsae_sha256,
rsa_pkcs1_sha512,rsa_pkcs1_sha384,rsa_pkcs1_sha256,
{sha512,ecdsa},
{sha384,ecdsa},
{sha256,ecdsa}]

2> ssl:signature_algs(all, 'tlsv1.3').
[eddsa_ed25519,eddsa_ed448,ecdsa_secp521r1_sha512,
ecdsa_secp384r1_sha384,ecdsa_secp256r1_sha256,
rsa_pss_pss_sha512,rsa_pss_pss_sha384,rsa_pss_pss_sha256,
rsa_pss_rsae_sha512,rsa_pss_rsae_sha384,rsa_pss_rsae_sha256,
rsa_pkcs1_sha512,rsa_pkcs1_sha384,rsa_pkcs1_sha256,
{sha512,ecdsa},
{sha384,ecdsa},
{sha256,ecdsa},
{sha224,ecdsa},
{sha224,rsa},
{sha,rsa},
{sha,dsa}]

3> ssl:signature_algs(exclusive, 'tlsv1.3').
[eddsa_ed25519,eddsa_ed448,ecdsa_secp521r1_sha512,
ecdsa_secp384r1_sha384,ecdsa_secp256r1_sha256,
rsa_pss_pss_sha512,rsa_pss_pss_sha384,rsa_pss_pss_sha256,
rsa_pss_rsae_sha512,rsa_pss_rsae_sha384,rsa_pss_rsae_sha256]

注意

一些 TLS-1-3 方案名稱與 TLS-1.2 演算法元組對名稱重疊,然後會使用 TLS-1.3 名稱,例如 rsa_pkcs1_sha256 而不是 {sha256, rsa}。這些是 TLS-1.3 中的舊版演算法,僅適用於此協議版本中的憑證簽名。

-spec sockname(SslSocket) -> {ok, {Address, Port}} | {error, reason()}
                  when
                      SslSocket :: sslsocket(), Address :: inet:ip_address(), Port :: inet:port_number().

返回 socket SslSocket 的本機位址和埠號。

此函式的連結

start()

檢視原始碼 (自 OTP R14B 起)
-spec start() -> ok | {error, reason()}.

等同於 start(temporary)

此函式的連結

start(Type)

檢視原始碼 (自 OTP R14B 起)
-spec start(permanent | transient | temporary) -> ok | {error, reason()}.

啟動 SSL 應用程式。

此函式的連結

stop()

檢視原始碼 (自 OTP R14B 起)
-spec stop() -> ok.

停止 SSL 應用程式。

此函式的連結

str_to_suite(CipherSuiteName)

檢視原始碼 (自 OTP 22.0 起)
-spec str_to_suite(CipherSuiteName) -> erl_cipher_suite() | {error, {not_recognized, CipherSuiteName}}
                      when CipherSuiteName :: string().

將 RFC 或 OpenSSL 名稱字串轉換為 erl_cipher_suite/0

如果密碼套件不受支援或名稱不是有效的密碼套件名稱,則返回錯誤。

此函式的連結

suite_to_openssl_str(CipherSuite)

檢視原始碼 (自 OTP 22.0 起)
-spec suite_to_openssl_str(CipherSuite) -> string() when CipherSuite :: erl_cipher_suite().

erl_cipher_suite() 值轉換為 OpenSSL 名稱字串。

在 TLS-1.3 之前,這些名稱與 RFC 名稱不同

此函式的連結

suite_to_str(CipherSuite)

檢視原始碼 (自 OTP 21.0 起)
-spec suite_to_str(CipherSuite) -> string() when CipherSuite :: erl_cipher_suite().

erl_cipher_suite() 值轉換為 RFC 名稱字串。

此函式的連結

versions()

檢視原始碼 (自 OTP R14B 起)
-spec versions() -> [VersionInfo]
                  when
                      VersionInfo ::
                          {ssl_app, string()} |
                          {supported | available | implemented, [tls_version()]} |
                          {supported_dtls | available_dtls | implemented_dtls, [dtls_version()]}.

列出用於偵錯和測試目的的執行階段資訊,主要是有關 TLS/DTLS 版本。

  • app_vsn - SSL 應用程式的應用程式版本。

  • supported - 目前應用程式環境和加密函式庫配置所支援的 TLS 版本。會被 connect/2,3,4listen/2handshake/2,3 上的版本選項覆寫。關於協商後的 TLS 版本,請參閱 connection_information/1

  • supported_dtls - 目前應用程式環境和加密函式庫配置所支援的 DTLS 版本。會被 connect/2,3,4listen/2handshake/2,3 上的版本選項覆寫。關於協商後的 DTLS 版本,請參閱 connection_information/1

  • available - 連結的加密函式庫所支援的所有 TLS 版本。

  • available_dtls - 連結的加密函式庫所支援的所有 DTLS 版本。

  • implemented - 如果連結的加密函式庫具備必要支援,SSL 應用程式所支援的所有 TLS 版本。

  • implemented_dtls - 如果連結的加密函式庫具備必要支援,SSL 應用程式所支援的所有 DTLS 版本。

已棄用的 API

此函式的連結

prf(SslSocket, Secret, Label, Seed, WantedLength)

檢視原始碼 (自 OTP R15B01 起)
此函數已棄用。ssl:prf/5 已棄用;請改用 export_key_materials/4。請注意,在 OTP 28 中,此函數的 'testing' 呼叫方式將不再被支援。
-spec prf(SslSocket, Secret, Label, Seed, WantedLength) -> {ok, binary()} | {error, reason()}
             when
                 SslSocket :: sslsocket(),
                 Secret :: binary() | master_secret,
                 Label :: binary(),
                 Seed :: [binary() | prf_random()],
                 WantedLength :: non_neg_integer().

使用 TLS 工作階段的偽隨機函數 (PRF) 來產生額外的金鑰材料。

它會接受使用者產生的 SecretSeed 值,或接受指示使用來自會期安全性參數的特定值的原子。

注意

此函數已由 export_key_materials/4 取代,自 OTP 27 以來的官方文件化 API 函數,其等效於 prf(TLSSocket, master_secret, Label, [client_random, server_random, Context], WantedLength)。呼叫此函數的其他方式僅供測試用途,沒有實際應用案例。當在 TLS-1.3 環境中呼叫時,其行為將如同 export_key_materials(TLSSocket, [Label], [Context], [WantedLength])