RFC 8446, 4.2.9: A client MUST provide a "psk_key_exchange_modes" extension if it offers a "pre_shared_key" extension. If clients offer "pre_shared_key" without a "psk_key_exchange_modes" extension, servers MUST abort the handshake.
The check below will make servers abort the handshake with a missing_extension alert. Since we don't support these extensions (i.e., we ignore them), this is currently a noop. Index: tls13_server.c =================================================================== RCS file: /cvs/src/lib/libssl/tls13_server.c,v retrieving revision 1.96 diff -u -p -r1.96 tls13_server.c --- tls13_server.c 3 Feb 2022 16:33:12 -0000 1.96 +++ tls13_server.c 31 May 2022 13:02:49 -0000 @@ -108,10 +108,15 @@ tls13_client_hello_required_extensions(s */ /* - * If we got no pre_shared_key, then signature_algorithms and - * supported_groups must both be present. + * RFC 8446, 4.2.9: if we got a pre_shared_key, then we also need + * psk_key_exchange_modes. Otherwise, section 9.2 specifies that we + * need both signature_algorithms and supported_groups. */ - if (!tlsext_extension_seen(s, TLSEXT_TYPE_pre_shared_key)) { + if (tlsext_extension_seen(s, TLSEXT_TYPE_pre_shared_key)) { + if (!tlsext_extension_seen(s, + TLSEXT_TYPE_psk_key_exchange_modes)) + return 0; + } else { if (!tlsext_extension_seen(s, TLSEXT_TYPE_signature_algorithms)) return 0; if (!tlsext_extension_seen(s, TLSEXT_TYPE_supported_groups))