target = "https://tools.ietf.org/rfc/rfc8446#appendix-D.1"

# D.1.  Negotiating with an Older Server
#
# A TLS 1.3 client who wishes to negotiate with servers that do not
# support TLS 1.3 will send a normal TLS 1.3 ClientHello containing
# 0x0303 (TLS 1.2) in ClientHello.legacy_version but with the correct
# version(s) in the "supported_versions" extension.  If the server does
# not support TLS 1.3, it will respond with a ServerHello containing an
# older version number.  If the client agrees to use this version, the
# negotiation will proceed as appropriate for the negotiated protocol.
# A client using a ticket for resumption SHOULD initiate the connection
# using the version that was previously negotiated.
# 
# Note that 0-RTT data is not compatible with older servers and
# SHOULD NOT be sent absent knowledge that the server supports TLS 1.3.
# See Appendix D.3.
# 
# If the version chosen by the server is not supported by the client
# (or is not acceptable), the client MUST abort the handshake with a
# "protocol_version" alert.
# 
# Some legacy server implementations are known to not implement the TLS
# specification properly and might abort connections upon encountering
# TLS extensions or versions which they are not aware of.
# Interoperability with buggy servers is a complex topic beyond the
# scope of this document.  Multiple connection attempts may be required
# in order to negotiate a backward-compatible connection; however, this
# practice is vulnerable to downgrade attacks and is NOT RECOMMENDED.

[[spec]]
level = "SHOULD"
quote = '''
A client using a ticket for resumption SHOULD initiate the connection
using the version that was previously negotiated.
'''

[[spec]]
level = "SHOULD"
quote = '''
Note that 0-RTT data is not compatible with older servers and
SHOULD NOT be sent absent knowledge that the server supports TLS 1.3.
'''

[[spec]]
level = "MUST"
quote = '''
If the version chosen by the server is not supported by the client
(or is not acceptable), the client MUST abort the handshake with a
"protocol_version" alert.
'''

[[spec]]
level = "SHOULD"
quote = '''
Multiple connection attempts may be required
in order to negotiate a backward-compatible connection; however, this
practice is vulnerable to downgrade attacks and is NOT RECOMMENDED.
'''

