Skip to main content

TLS Alert Codes

TLS alerts signal errors and state changes during the handshake and session. Fatal alerts terminate the connection immediately. Warning alerts may allow the connection to continue. All alert codes are defined in RFC 8446 §6.2.

Fatal Alerts

Fatal alerts immediately terminate the connection. The sender must close the TLS connection after sending a fatal alert.

CodeAlert Name & DescriptionLevel
10

unexpected_message

unexpected_message (10) is sent when a TLS record is received that is inappropriate for the current state of the connection – a message that should not have been sent at this point in the handshake or session.

fatal
20

bad_record_mac

bad_record_mac (20) is sent when a TLS record fails its MAC or AEAD authentication check.

fatal
22

record_overflow

record_overflow (22) is sent when a TLS record exceeds the maximum allowed length.

fatal
40

handshake_failure

handshake_failure (40) is sent when the sender cannot negotiate an acceptable set of security parameters for the TLS handshake.

fatal
42

bad_certificate

bad_certificate (42) is sent when a certificate is corrupt, has an invalid signature, or cannot be parsed.

fatal
43

unsupported_certificate

unsupported_certificate (43) is sent when the certificate type is not supported by the receiver.

fatal
44

certificate_revoked

certificate_revoked (44) is sent when a certificate has been revoked by the issuing Certificate Authority.

fatal
45

certificate_expired

certificate_expired (45) is sent when a certificate's validity period has passed – its notAfter date is in the past, or its notBefore date is in the future.

fatal
46

certificate_unknown

certificate_unknown (46) is a catch-all alert for certificate problems not covered by more specific codes.

fatal
47

illegal_parameter

illegal_parameter (47) is sent when a field in the TLS handshake is out of range or inconsistent with other fields.

fatal
48

unknown_ca

unknown_ca (48) is sent when the certificate chain was valid but the root CA is not recognized or trusted.

fatal
49

access_denied

access_denied (49) is sent when a valid certificate was received but access was denied by the server's authorization policy.

fatal
50

decode_error

decode_error (50) is sent when a TLS message cannot be decoded because a field is out of the specified range or the length of the message is incorrect.

fatal
51

decrypt_error

decrypt_error (51) is sent when a cryptographic operation in the handshake fails – specifically when verifying a signature or a Finished message MAC.

fatal
70

protocol_version

protocol_version (70) is sent when the TLS version proposed by the client is not supported by the server.

fatal
71

insufficient_security

insufficient_security (71) is sent when the server requires security parameters stronger than those offered by the client.

fatal
80

internal_error

internal_error (80) is sent when an internal error unrelated to the peer or the correctness of the protocol made it impossible to continue the TLS handshake or session.

fatal
86

inappropriate_fallback

inappropriate_fallback (86) is sent by a server when a client performed a TLS version downgrade using the TLS_FALLBACK_SCSV signaling cipher suite but the downgraded version is lower than the server's highest supported version.

fatal
109

missing_extension

missing_extension (109) is a TLS 1.

fatal
110

unsupported_extension

unsupported_extension (110) is sent when a TLS extension appears in a handshake message where it is not permitted.

fatal
113

bad_certificate_status_response

bad_certificate_status_response (113) is sent when an invalid OCSP response was received via the status_request extension (OCSP stapling).

fatal
115

unknown_psk_identity

unknown_psk_identity (115) is sent in TLS 1.

fatal
116

certificate_required

certificate_required (116) is a TLS 1.

fatal
120

no_application_protocol

no_application_protocol (120) is sent when the client offered ALPN (Application-Layer Protocol Negotiation) extension but none of the offered protocols are supported by the server.

fatal
121

ech_required

ech_required (121) is sent when the server requires Encrypted Client Hello (ECH) but the client did not use it.

fatal

Warning Alerts

Warning alerts do not necessarily terminate the connection. close_notify is the most important – both sides must send it for a clean shutdown.