summaryrefslogtreecommitdiff
path: root/lib/ssl/doc/src/ssl.xml
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ssl/doc/src/ssl.xml')
-rw-r--r--lib/ssl/doc/src/ssl.xml144
1 files changed, 126 insertions, 18 deletions
diff --git a/lib/ssl/doc/src/ssl.xml b/lib/ssl/doc/src/ssl.xml
index 803c0f789a..700709ed7a 100644
--- a/lib/ssl/doc/src/ssl.xml
+++ b/lib/ssl/doc/src/ssl.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1999</year><year>2022</year>
+ <year>1999</year><year>2023</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -229,6 +229,10 @@
</datatype>
<datatype>
+ <name name="legacy_named_curve"/>
+ </datatype>
+
+ <datatype>
<name name="psk_identity"/>
</datatype>
@@ -475,14 +479,10 @@
{sha256, ecdsa},
{sha256, rsa},
{sha224, ecdsa},
-{sha224, rsa},
-%% SHA
-{sha, ecdsa},
-{sha, rsa},
-{sha, dsa}
+{sha224, rsa}
]</code>
-<p>Support for {md5, rsa} was removed from the the TLS-1.2 default in ssl-8.0 (OTP-22) </p>
+<p>Support for {md5, rsa} was removed from the the TLS-1.2 default in ssl-8.0 (OTP-22) and support for SHA1 {sha, _} was removed in ssl-11.0 (OTP-26) </p>
<p><c> rsa_pss_schemes =</c></p>
<code>
@@ -500,8 +500,6 @@ rsa_pss_rsae_sha256]
rsa_pkcs1_sha512, %% Corresponds to {sha512, rsa}
rsa_pkcs1_sha384, %% Corresponds to {sha384, rsa}
rsa_pkcs1_sha256, %% Corresponds to {sha256, rsa}
-ecdsa_sha1, %% Corresponds to {sha, ecdsa}
-rsa_pkcs1_sha1 %% Corresponds to {sha, rsa}
]
</code>
@@ -520,7 +518,7 @@ ecdsa_secp256r1_sha256] ++
rsa_pss_schemes()
</code>
- <p>EDDSA was made highest priority in ssl-11.0 (OTP-25) </p>
+ <p>EDDSA was made highest priority in ssl-10.8 (OTP-25) </p>
<p>TLS-1.3 default is</p>
<code>Default_TLS_13_Schemes ++ Legacy_TLS_13_Schemes </code>
@@ -821,7 +819,7 @@ marker="public_key:public_key#pkix_path_validation/3">public_key:pkix_path_valid
<desc>
<code>
fun(Chain::[public_key:der_encoded()]) ->
- {trusted_ca, DerCert::public_key:der_encoded()} | unknown_ca}
+ {trusted_ca, DerCert::public_key:der_encoded()} | unknown_ca.
</code>
<p>Claim an intermediate CA in the chain as trusted. TLS then
performs <seemfa
@@ -1160,7 +1158,10 @@ fun(srp, Username :: binary(), UserState :: term()) ->
<name name="customize_hostname_check"/>
<desc>
<p> Customizes the hostname verification of the peer certificate, as different protocols that use
- TLS such as HTTP or LDAP may want to do it differently, for possible options see
+ TLS such as HTTP or LDAP may want to do it differently. For example the get standard HTTPS handling
+ provide the already implememnted fun from the public_key application for HTTPS.
+ <c>{customize_hostname_check, [{match_fun, public_key:pkix_verify_hostname_match_fun(https)}]}</c>
+ For futher description of customize options see
<seemfa marker="public_key:public_key#pkix_verify_hostname/3">public_key:pkix_verify_hostname/3</seemfa> </p>
</desc>
</datatype>
@@ -1231,6 +1232,34 @@ fun(srp, Username :: binary(), UserState :: term()) ->
</desc>
</datatype>
+ <datatype>
+ <name name="use_srtp"/>
+ <desc>
+ <p>Configures the <c>use_srtp</c> DTLS hello extension.</p>
+ <p>In order to negotiate the use of SRTP data protection, clients
+ include an extension of type "use_srtp" in the DTLS extended client
+ hello. This extension MUST only be used when the data being
+ transported is RTP or RTCP.</p>
+ <p>The value is a map with a mandatory <c>protection_profiles</c> and
+ an optional <c>mki</c> parameters.</p>
+ <p><c>protection_profiles</c> configures the list of the client's acceptable
+ SRTP Protection Profiles. Each profile is a 2-byte binary. Example:
+ <c>#{protection_profiles =&gt; [&lt;&lt;0,2&gt;&gt;, &lt;&lt;0,5&gt;&gt;]}</c></p>
+ <p><c>mki</c> configures the SRTP Master Key Identifier chosen by the client.</p>
+ <p>The srtp_mki field contains the value of the SRTP MKI which is associated
+ with the SRTP master keys derived from this handshake. Each SRTP
+ session MUST have exactly one master key that is used to protect
+ packets at any given time. The client MUST choose the MKI value so
+ that it is distinct from the last MKI value that was used, and it
+ SHOULD make these values unique for the duration of the TLS session.</p>
+ <note><p>This extension MUST only be used with DTLS, and not with TLS.</p></note>
+ <note><p>OTP does not handle SRTP, so an external implementations of SRTP
+ encoder/decoder and a packet demultiplexer are needed to make use
+ of the <c>use_srtp</c> extension. See also
+ <seetype marker="#transport_option">cb_info</seetype> option.</p></note>
+ </desc>
+ </datatype>
+
<!-- <datatype> -->
<!-- <name name="ocsp_stapling"/> -->
<!-- <desc><p>If true, OCSP stapling will be enabled, an extension of type "status_request" will be -->
@@ -1472,15 +1501,34 @@ fun(srp, Username :: binary(), UserState :: term()) ->
<datatype>
<name name="server_session_tickets"/>
<desc>
- <p>Configures the session ticket functionality. Allowed values are <c>disabled</c>,
- <c>stateful</c> and <c>stateless</c>.</p>
- <p>If it is set to <c>stateful</c> or
- <c>stateless</c>, session resumption with pre-shared keys is enabled and the server will
- send stateful or stateless session tickets to the client after successful connections.</p>
+ <p>Configures the session ticket functionality. Allowed values are <c>disabled</c>,
+ <c>stateful</c>, <c>stateless</c>, <c>stateful_with_cert</c>, <c>stateless_with_cert</c>.</p>
+ <p>If it is not set to <c>disabled</c>,
+ session resumption with pre-shared keys is enabled and the server will
+ send stateful or stateless session tickets to the client after successful connections.</p>
+
+ <note><p>
+ Pre-shared key session ticket resumption does not include any certificate exchange,
+ hence the function <seemfa marker="ssl:ssl#peercert/1">ssl:peercert/1</seemfa> will not
+ be able to return the peer certificate as it is only communicated in the initial handshake.
+ The server options <c>stateful_with_cert</c> or <c>stateless_with_cert</c> may be used
+ to make a server associate the client certificate from the original handshake
+ with the tickets it issues.
+ </p></note>
+
<p>A stateful session ticket is a database reference to internal state information.
A stateless session ticket is a self-encrypted binary that contains both cryptographic keying
material and state data.
</p>
+
+ <warning><p>
+ If it is set to <c>stateful_with_cert</c> the client certificate
+ is stored with the internal state information, increasing memory consumption.
+ If it is set to <c>stateless_with_cert</c> the client certificate is
+ encoded in the self-encrypted binary that is sent to the client,
+ increasing the payload size.
+ </p></warning>
+
<note><p>This option is supported by TLS 1.3 and above. See also
<seeguide marker="ssl:using_ssl#session-tickets-and-session-resumption-in-tls-1.3">
SSL's Users Guide, Session Tickets and Session Resumption in TLS 1.3</seeguide>
@@ -1489,6 +1537,26 @@ fun(srp, Username :: binary(), UserState :: term()) ->
</datatype>
<datatype>
+ <name name="stateless_tickets_seed"/>
+ <desc>
+ <p>Configures the seed used for the encryption of stateless session tickets.
+ Allowed values are any randomly generated <c>binary()</c>. If this option is not
+ configured, an encryption seed will be randomly generated.</p>
+
+ <warning><p>Reusing the ticket encryption seed between multiple server
+ instances enables stateless session tickets to work across multiple server
+ instances, but it breaks anti-replay protection across instances.</p>
+
+ <p>Inaccurate time synchronization between server instances can also
+ affect session ticket freshness checks, potentially causing false negatives as
+ well as false positives.</p></warning>
+
+ <note><p>This option is supported by TLS 1.3 and above and only with stateless
+ session tickets.</p></note>
+ </desc>
+ </datatype>
+
+ <datatype>
<name name="anti_replay"/>
<desc>
<p>Configures the server's built-in anti replay feature based on Bloom filters.</p>
@@ -1496,7 +1564,7 @@ fun(srp, Username :: binary(), UserState :: term()) ->
<p>Allowed values are the pre-defined <c>'10k'</c>, <c>'100k'</c> or a custom 3-tuple that
defines the properties of the bloom filters: <c>{WindowSize, HashFunctions, Bits}</c>.
<c>WindowSize</c> is the number of seconds after the current Bloom filter is rotated
- and also the window size used for freshness checks. <c>HashFunctions</c> is the number
+ and also the window size used for freshness checks of ClientHello. <c>HashFunctions</c> is the number
hash functions and <c>Bits</c> is the number of bits in the bit vector.
<c>'10k'</c> and <c>'100k'</c> are simple defaults with the following properties:</p>
<list type="bulleted">
@@ -1544,6 +1612,40 @@ fun(srp, Username :: binary(), UserState :: term()) ->
</datatype>
<datatype>
+ <name name="use_srtp"/>
+ <desc>
+ <p>Configures the <c>use_srtp</c> DTLS hello extension.</p>
+ <p>Servers that receive an extended hello containing a "use_srtp"
+ extension can agree to use SRTP by including an extension of type
+ "use_srtp", with the chosen protection profile in the extended server
+ hello. This extension MUST only be used when the data being
+ transported is RTP or RTCP.</p>
+ <p>The value is a map with a mandatory <c>protection_profiles</c> and
+ an optional <c>mki</c> parameters.</p>
+ <list type="bulleted">
+ <item><p><c>protection_profiles</c> configures the list of the server's chosen
+ SRTP Protection Profile as a list of a single 2-byte binary. Example:
+ <c>#{protection_profiles =&gt; [&lt;&lt;0,5&gt;&gt;]}</c></p></item>
+ <item><p><c>mki</c> configures the server's SRTP Master Key Identifier.</p>
+ <p>Upon receipt of a "use_srtp" extension containing a "srtp_mki" field,
+ the server MUST either (assuming it accepts the extension at all):</p>
+ <list type="bulleted">
+ <item><p>include a matching "srtp_mki" value in its "use_srtp" extension
+ to indicate that it will make use of the MKI, or</p></item>
+ <item><p>return an empty "srtp_mki" value to indicate that it cannot
+ make use of the MKI (default).</p></item>
+ </list>
+ </item>
+ </list>
+ <note><p>This extension MUST only be used with DTLS, and not with TLS.</p></note>
+ <note><p>OTP does not handle SRTP, so an external implementations of SRTP
+ encoder/decoder and a packet demultiplexer are needed to make use
+ of the <c>use_srtp</c> extension. See also
+ <seetype marker="#transport_option">cb_info</seetype> option.</p></note>
+ </desc>
+ </datatype>
+
+ <datatype>
<name name="connection_info"/>
</datatype>
@@ -2019,6 +2121,12 @@ fun(srp, Username :: binary(), UserState :: term()) ->
<c>{error, renegotiation_rejected}</c> indicating that the peer
refused to go through with the renegotiation, but the connection
is still active using the previously negotiated session.</p>
+ <p>TLS-1.3 has removed the renegotiate feature of earlier TLS versions
+ and instead adds a new feature called key update that replaces the most
+ important part of renegotiate, that is the refreshing of session keys.
+ This is triggered automatically after reaching a plaintext limit and
+ can be configured by option <seetype marker="ssl:ssl#key_update_at">key_update_at</seetype>.
+ </p>
</desc>
</func>