Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TLS1.3 support #26209

Closed
wants to merge 1 commit into from
Closed

TLS1.3 support #26209

wants to merge 1 commit into from

Commits on Mar 19, 2019

  1. tls: support TLSv1.3

    This introduces TLS1.3 support and makes it the default max protocol,
    but also supports CLI/NODE_OPTIONS switches to disable it if necessary.
    
    TLS1.3 is a major update to the TLS protocol, with many security
    enhancements. It should be preferred over TLS1.2 whenever possible.
    
    TLS1.3 is different enough that even though the OpenSSL APIs are
    technically API/ABI compatible, that when TLS1.3 is negotiated, the
    timing of protocol records and of callbacks broke assumptions hard-coded
    into the 'tls' module.
    
    This change introduces no API incompatibilities when TLS1.2 is
    negotiated. It is the intention that it be backported to current and LTS
    release lines with the default maximum TLS protocol reset to 'TLSv1.2'.
    This will allow users of those lines to explicitly enable TLS1.3 if they
    want.
    
    API incompatibilities between TLS1.2 and TLS1.3 are:
    
    - Renegotiation is not supported by TLS1.3 protocol, attempts to call
    `.renegotiate()` will always fail.
    
    - Compiling against a system OpenSSL lower than 1.1.1 is no longer
    supported (OpenSSL-1.1.0 used to be supported with configure flags).
    
    - Variations of `conn.write('data'); conn.destroy()` have undefined
    behaviour according to the streams API. They may or may not send the
    'data', and may or may not cause a ERR_STREAM_DESTROYED error to be
    emitted. This has always been true, but conditions under which the write
    suceeds is slightly but observably different when TLS1.3 is negotiated
    vs when TLS1.2 or below is negotiated.
    
    - If TLS1.3 is negotiated, and a server calls `conn.end()` in its
    'secureConnection' listener without any data being written, the client
    will not receive session tickets (no 'session' events will be emitted,
    and `conn.getSession()` will never return a resumable session).
    
    - The return value of `conn.getSession()` API may not return a resumable
    session if called right after the handshake. The effect will be that
    clients using the legacy `getSession()` API will resume sessions if
    TLS1.2 is negotiated, but will do full handshakes if TLS1.3 is
    negotiated.  See nodejs#25831 for more
    information.
    sam-github committed Mar 19, 2019
    Configuration menu
    Copy the full SHA
    45f3b19 View commit details
    Browse the repository at this point in the history