summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc9525.txt
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
committerThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
commit4bfd864f10b68b71482b35c818559068ef8d5797 (patch)
treee3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc9525.txt
parentea76e11061bda059ae9f9ad130a9895cc85607db (diff)
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc9525.txt')
-rw-r--r--doc/rfc/rfc9525.txt1440
1 files changed, 1440 insertions, 0 deletions
diff --git a/doc/rfc/rfc9525.txt b/doc/rfc/rfc9525.txt
new file mode 100644
index 0000000..7e0d8cf
--- /dev/null
+++ b/doc/rfc/rfc9525.txt
@@ -0,0 +1,1440 @@
+
+
+
+
+Internet Engineering Task Force (IETF) P. Saint-Andre
+Request for Comments: 9525 Independent
+Obsoletes: 6125 R. Salz
+Category: Standards Track Akamai Technologies
+ISSN: 2070-1721 November 2023
+
+
+ Service Identity in TLS
+
+Abstract
+
+ Many application technologies enable secure communication between two
+ entities by means of Transport Layer Security (TLS) with Internet
+ Public Key Infrastructure using X.509 (PKIX) certificates. This
+ document specifies procedures for representing and verifying the
+ identity of application services in such interactions.
+
+ This document obsoletes RFC 6125.
+
+Status of This Memo
+
+ This is an Internet Standards Track document.
+
+ This document is a product of the Internet Engineering Task Force
+ (IETF). It represents the consensus of the IETF community. It has
+ received public review and has been approved for publication by the
+ Internet Engineering Steering Group (IESG). Further information on
+ Internet Standards is available in Section 2 of RFC 7841.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ https://www.rfc-editor.org/info/rfc9525.
+
+Copyright Notice
+
+ Copyright (c) 2023 IETF Trust and the persons identified as the
+ document authors. All rights reserved.
+
+ This document is subject to BCP 78 and the IETF Trust's Legal
+ Provisions Relating to IETF Documents
+ (https://trustee.ietf.org/license-info) in effect on the date of
+ publication of this document. Please review these documents
+ carefully, as they describe your rights and restrictions with respect
+ to this document. Code Components extracted from this document must
+ include Revised BSD License text as described in Section 4.e of the
+ Trust Legal Provisions and are provided without warranty as described
+ in the Revised BSD License.
+
+Table of Contents
+
+ 1. Introduction
+ 1.1. Motivation
+ 1.2. Applicability
+ 1.3. Overview of Recommendations
+ 1.4. Scope
+ 1.4.1. In Scope
+ 1.4.2. Out of Scope
+ 1.5. Terminology
+ 2. Identifying Application Services
+ 3. Designing Application Protocols
+ 4. Representing Server Identity
+ 4.1. Rules
+ 4.2. Examples
+ 5. Requesting Server Certificates
+ 6. Verifying Service Identity
+ 6.1. Constructing a List of Reference Identifiers
+ 6.1.1. Rules
+ 6.1.2. Examples
+ 6.2. Preparing to Seek a Match
+ 6.3. Matching the DNS Domain Name Portion
+ 6.4. Matching an IP Address Portion
+ 6.5. Matching the Application Service Type Portion
+ 6.6. Outcome
+ 7. Security Considerations
+ 7.1. Wildcard Certificates
+ 7.2. Uniform Resource Identifiers
+ 7.3. Internationalized Domain Names
+ 7.4. IP Addresses
+ 7.5. Multiple Presented Identifiers
+ 7.6. Multiple Reference Identifiers
+ 7.7. Certificate Trust
+ 8. IANA Considerations
+ 9. References
+ 9.1. Normative References
+ 9.2. Informative References
+ Appendix A. Changes from RFC 6125
+ Acknowledgements
+ Contributors
+ Authors' Addresses
+
+1. Introduction
+
+1.1. Motivation
+
+ The visible face of the Internet largely consists of services that
+ employ a client-server architecture in which a client communicates
+ with an application service. When a client communicates with an
+ application service using [TLS], [DTLS], or a protocol built on those
+ ([QUIC] being a notable example), it has some notion of the server's
+ identity (e.g., "the website at bigcompany.example") while attempting
+ to establish secure communication. Likewise, during TLS negotiation,
+ the server presents its notion of the service's identity in the form
+ of a public key certificate that was issued by a certification
+ authority (CA) in the context of the Internet Public Key
+ Infrastructure using X.509 [PKIX]. Informally, we can think of these
+ identities as the client's "reference identity" and the server's
+ "presented identity"; more formal definitions are given later. A
+ client needs to verify that the server's presented identity matches
+ its reference identity so it can deterministically and automatically
+ authenticate the communication.
+
+ This document defines procedures for how clients perform this
+ verification. It therefore defines requirements on other parties,
+ such as the certification authorities that issue certificates, the
+ service administrators requesting them, and the protocol designers
+ defining interactions between clients and servers.
+
+ This document obsoletes RFC 6125 [VERIFY]. Changes from RFC 6125
+ [VERIFY] are described under Appendix A.
+
+1.2. Applicability
+
+ This document does not supersede the rules for certificate issuance
+ or validation specified by [PKIX]. That document also governs any
+ certificate-related topic on which this document is silent. This
+ includes certificate syntax, extensions such as name constraints or
+ extended key usage, and handling of certification paths.
+
+ This document addresses only name forms in the leaf "end entity"
+ server certificate. It does not address the name forms in the chain
+ of certificates used to validate a certificate, nor does it create or
+ check the validity of such a chain. In order to ensure proper
+ authentication, applications need to verify the entire certification
+ path.
+
+1.3. Overview of Recommendations
+
+ The previous version of this specification, [VERIFY], surveyed the
+ then-current practice from many IETF standards and tried to
+ generalize best practices (see Appendix A of [VERIFY] for details).
+
+ This document takes the lessons learned since then and codifies them.
+ The following is a summary of the rules, which are described at
+ greater length in the remainder of this document:
+
+ * Only check DNS domain names via the subjectAltName extension
+ designed for that purpose: dNSName.
+
+ * Allow use of even more specific subjectAltName extensions where
+ appropriate such as uniformResourceIdentifier, iPAddress, and the
+ otherName form SRVName.
+
+ * Wildcard support is now the default in certificates. Constrain
+ wildcard certificates so that the wildcard can only be the
+ complete left-most label of a domain name.
+
+ * Do not include or check strings that look like domain names in the
+ subject's Common Name.
+
+1.4. Scope
+
+1.4.1. In Scope
+
+ This document applies only to service identities that are used in TLS
+ or DTLS and that are included in PKIX certificates.
+
+ With regard to TLS and DTLS, these security protocols are used to
+ protect data exchanged over a wide variety of application protocols,
+ which use both the TLS or DTLS handshake protocol and the TLS or DTLS
+ record layer, either directly or through a profile as in Network Time
+ Security [NTS]. The TLS handshake protocol can also be used with
+ different record layers to define secure transport protocols; at
+ present, the most prominent example is QUIC [RFC9000]. The rules
+ specified here are intended to apply to all protocols in this
+ extended TLS "family".
+
+ With regard to PKIX certificates, the primary usage is in the context
+ of the public key infrastructure described in [PKIX]. In addition,
+ technologies such as DNS-Based Authentication of Named Entities
+ (DANE) [DANE] sometimes use certificates based on PKIX (more
+ precisely, certificates structured via [X.509] or specific encodings
+ thereof such as [X.690]), at least in certain modes. Alternatively,
+ a TLS peer could issue delegated credentials that are based on a CA-
+ issued certificate, as in [TLS-SUBCERTS]. In both cases, a TLS
+ client could learn of a service identity through its inclusion in the
+ relevant certificate. The rules specified here are intended to apply
+ whenever service identities are included in X.509 certificates or
+ credentials that are derived from such certificates.
+
+1.4.2. Out of Scope
+
+ The following topics are out of scope for this specification:
+
+ * Security protocols other than those described above.
+
+ * Keys or certificates employed outside the context of PKIX-based
+ systems.
+
+ * Client or end-user identities. Other than as described above,
+ certificates representing client identities (e.g., rfc822Name) are
+ beyond the scope of this document.
+
+ * Identification of servers using other than a domain name, an IP
+ address, or an SRV service name. This document discusses Uniform
+ Resource Identifiers [URI] only to the extent that they are
+ expressed in certificates. Other aspects of a service such as a
+ specific resource (the URI "path" component) or parameters (the
+ URI "query" component) are the responsibility of specific
+ protocols or URI schemes.
+
+ * Certification authority policies. This includes items such as the
+ following:
+
+ - How to certify or validate fully qualified domain names (FQDNs)
+ and application service types (see [ACME]).
+
+ - What types or "classes" of certificates to issue and whether to
+ apply different policies for them.
+
+ - How to certify or validate other kinds of information that
+ might be included in a certificate (e.g., organization name).
+
+ * Resolution of DNS domain names. Although the process whereby a
+ client resolves the DNS domain name of an application service can
+ involve several steps, for the purposes of this specification, the
+ only relevant consideration is that the client needs to verify the
+ identity of the entity with which it will communicate once the
+ resolution process is complete. Thus, the resolution process
+ itself is out of scope for this specification.
+
+ * User interface issues. In general, such issues are properly the
+ responsibility of client software developers and standards
+ development organizations dedicated to particular application
+ technologies (for example, see [WSC-UI]).
+
+1.5. Terminology
+
+ Because many concepts related to "identity" are often too vague to be
+ actionable in application protocols, we define a set of more concrete
+ terms for use in this specification.
+
+ application service: A service on the Internet that enables clients
+ to connect for the purpose of retrieving or uploading information,
+ communicating with other entities, or connecting to a broader
+ network of services.
+
+ application service provider: An entity that hosts or deploys an
+ application service.
+
+ application service type: A formal identifier for the application
+ protocol used to provide a particular kind of application service
+ at a domain. This often appears as a URI scheme [URI], a DNS SRV
+ Service [DNS-SRV], or an Application-Layer Protocol Negotiation
+ (ALPN) [ALPN] identifier.
+
+ identifier: A particular instance of an identifier type that is
+ either presented by a server in a certificate or referenced by a
+ client for matching purposes.
+
+ identifier type: A formally defined category of identifier that can
+ be included in a certificate and therefore be used for matching
+ purposes. For conciseness and convenience, we define the
+ following identifier types of interest:
+
+ DNS-ID: A subjectAltName entry of type dNSName as defined in
+ [PKIX].
+
+ IP-ID: A subjectAltName entry of type iPAddress as defined in
+ [PKIX].
+
+ SRV-ID: A subjectAltName entry of type otherName whose name form
+ is SRVName as defined in [SRVNAME].
+
+ URI-ID: A subjectAltName entry of type uniformResourceIdentifier
+ as defined in [PKIX]. See further discussion in Section 7.2.
+
+ PKIX: The short name for the Internet Public Key Infrastructure
+ using X.509 defined in [PKIX]. That document provides a profile
+ of the X.509v3 certificate specifications and X.509v2 certificate
+ revocation list (CRL) specifications for use on the Internet.
+
+ presented identifier: An identifier presented by a server to a
+ client within a PKIX certificate when the client attempts to
+ establish secure communication with the server. The certificate
+ can include one or more presented identifiers of different types,
+ and if the server hosts more than one domain, then the certificate
+ might present distinct identifiers for each domain.
+
+ reference identifier: An identifier expected by the client when
+ examining presented identifiers. It is constructed from the
+ source domain and, optionally, an application service type.
+
+ Relative Distinguished Name (RDN): An ASN.1-based construction that
+ is itself a building-block component of Distinguished Names. See
+ [LDAP-DN], Section 2.
+
+ source domain: The FQDN that a client expects an application service
+ to present in the certificate. This is typically input by a human
+ user, configured into a client, or provided by reference such as a
+ URL. The combination of a source domain and, optionally, an
+ application service type enables a client to construct one or more
+ reference identifiers. This specification covers FQDNs. Use of
+ any names that are not fully qualified is out of scope and may
+ result in unexpected or undefined behavior.
+
+ subjectAltName entry: An identifier placed in a subjectAltName
+ extension.
+
+ subjectAltName extension: A standard PKIX extension enabling
+ identifiers of various types to be bound to the certificate
+ subject.
+
+ subjectName: The name of a PKIX certificate's subject, encoded in a
+ certificate's subject field (see [PKIX], Section 4.1.2.6).
+
+ TLS uses the words "client" and "server", where the client is the
+ entity that initiates the connection. In many cases, this is
+ consistent with common practice, such as a browser connecting to a
+ web origin. For the sake of clarity, and to follow the usage in
+ [TLS] and related specifications, we will continue to use the terms
+ client and server in this document. However, these are TLS-layer
+ roles, and the application protocol could support the TLS server
+ making requests to the TLS client after the TLS handshake; there is
+ no requirement that the roles at the application layer match the TLS
+ layer.
+
+ Security-related terms used in this document, but not defined here or
+ in [PKIX], should be understood in the sense defined in [SECTERMS].
+ Such terms include "attack", "authentication", "identity", "trust",
+ "validate", and "verify".
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
+ "OPTIONAL" in this document are to be interpreted as described in BCP
+ 14 [RFC2119] [RFC8174] when, and only when, they appear in all
+ capitals, as shown here.
+
+2. Identifying Application Services
+
+ This document assumes that an application service is identified by a
+ DNS domain name (e.g., bigcompany.example), an IP address (IPv4 or
+ IPv6), or an identifier that contains additional supplementary
+ information. Supplementary information is limited to the application
+ service type as expressed in a DNS SRV record (e.g., "the IMAP server
+ at isp.example" for "_imap.isp.example") or a URI.
+
+ In a DNS-ID -- and in the DNS domain name portion of an SRV-ID or
+ URI-ID -- any characters outside the range described in [US-ASCII]
+ are prohibited, and internationalized domain labels are represented
+ as A-labels [IDNA-DEFS].
+
+ An IP address is either a 4-octet IPv4 address [IPv4] or a 16-octet
+ IPv6 address [IPv6]. The identifier might need to be converted from
+ a textual representation to obtain this value.
+
+ From the perspective of the application client or user, some
+ identifiers are _direct_ because they are provided directly by a
+ human user. This includes runtime input, prior configuration, or
+ explicit acceptance of a client communication attempt. Other names
+ are _indirect_ because they are automatically resolved by the
+ application based on user input, such as a target name resolved from
+ a source name using DNS SRV or the records described in [NAPTR]. The
+ distinction matters most for certificate consumption, specifically
+ verification as discussed in this document.
+
+ From the perspective of the application service, some identifiers are
+ _unrestricted_ because they can be used in any type of service, such
+ as a single certificate being used for both the HTTP and IMAP
+ services at the host "bigcompany.example". Other identifiers are
+ _restricted_ because they can only be used for one type of service,
+ such as a special-purpose certificate that can only be used for an
+ IMAP service. This distinction matters most for certificate
+ issuance.
+
+ The four identifier types can be categorized as follows:
+
+ * A DNS-ID is direct and unrestricted.
+
+ * An IP-ID is direct and unrestricted.
+
+ * An SRV-ID is typically indirect but can be direct, and it is
+ restricted.
+
+ * A URI-ID is direct and restricted.
+
+ It is important to keep these distinctions in mind because best
+ practices for the deployment and use of the identifiers differ. Note
+ that cross-protocol attacks such as those described in [ALPACA] are
+ possible when two different protocol services use the same
+ certificate. This can be addressed by using restricted identifiers
+ or deploying services so that they do not share certificates.
+ Protocol specifications MUST specify which identifiers are mandatory
+ to implement and SHOULD provide operational guidance when necessary.
+
+ The Common Name RDN MUST NOT be used to identify a service because it
+ is not strongly typed (it is essentially free-form text) and
+ therefore suffers from ambiguities in interpretation.
+
+ For similar reasons, other RDNs within the subjectName MUST NOT be
+ used to identify a service.
+
+ An IP address that is the result of a DNS query is indirect. Use of
+ IP-IDs that are indirect is out of scope for this document.
+
+ The IETF continues to define methods for looking up information
+ needed to make connections to network services. One recent example
+ is service binding via the "SVCB" and "HTTPS" DNS resource record
+ (RR) types. This document does not define any identity
+ representation or verification procedures that are specific to SVCB-
+ compatible records, because the use of such records during connection
+ establishment does not currently alter any of the PKIX validation
+ requirements specified herein or in any other relevant specification.
+ For example, the PKIX validation rules for [HTTP] and [DNS-OVER-TLS]
+ do not change when the client uses the DNS resource records defined
+ in [SVCB-FOR-HTTPS] or [SVCB-FOR-DNS] to look up connection
+ information. However, it is possible that future SVCB mapping
+ documents could specify altered PKIX rules for new use cases.
+
+3. Designing Application Protocols
+
+ This section defines how protocol designers should reference this
+ document, which would typically be a normative reference in their
+ specification.
+
+ A specification MAY choose to allow only one of the identifier types
+ defined here.
+
+ If the technology does not use DNS SRV records to resolve the DNS
+ domain names of application services, then the specification MUST
+ state that SRV-ID as defined in this document is not supported. Note
+ that many existing application technologies use DNS SRV records to
+ resolve the DNS domain names of application services, but they do not
+ rely on representations of those records in PKIX certificates by
+ means of SRV-IDs as defined in [SRVNAME].
+
+ If the technology does not use URIs to identify application services,
+ then the specification MUST state that URI-ID as defined in this
+ document is not supported. Note that many existing application
+ technologies use URIs to identify application services, but they do
+ not rely on representation of those URIs in PKIX certificates by
+ means of URI-IDs.
+
+ A technology MAY disallow the use of the wildcard character in
+ presented identifiers. If it does so, then the specification MUST
+ state that wildcard certificates as defined in this document are not
+ supported.
+
+ A protocol can allow the use of an IP address in place of a DNS name.
+ This might use the same field without distinguishing the type of
+ identifier as, for example, in the "host" components of a URI. In
+ this case, applications need to be aware that the textual
+ representation of an IPv4 address is a valid DNS name. The two types
+ can be distinguished by first testing if the identifier is a valid
+ IPv4 address, as is done by the "first-match-wins" algorithm in
+ Section 3.2.2 of [URI].
+
+4. Representing Server Identity
+
+ This section provides instructions for issuers of certificates.
+
+4.1. Rules
+
+ When a certification authority issues a certificate based on the FQDN
+ at which the application service provider will provide the relevant
+ application, the following rules apply to the representation of
+ application service identities. Note that some of these rules are
+ cumulative and can interact in important ways that are illustrated
+ later in this document.
+
+ 1. The certificate MUST include at least one identifier.
+
+ 2. The certificate SHOULD include a DNS-ID as a baseline for
+ interoperability. This is not mandatory because it is legitimate
+ for a certificate to include only an SRV-ID or URI-ID so as to
+ scope its use to a particular application type.
+
+ 3. If the service using the certificate deploys a technology for
+ which the relevant specification stipulates that certificates
+ should include identifiers of type SRV-ID (e.g., this is true of
+ the Extensible Messaging and Presence Protocol (XMPP) as
+ described in [XMPP]), then the certificate SHOULD include an SRV-
+ ID. This identifier type could supplement the DNS-ID, unless the
+ certificate is meant to be scoped to only the protocol in
+ question.
+
+ 4. If the service using the certificate deploys a technology for
+ which the relevant specification stipulates that certificates
+ should include identifiers of type URI-ID (e.g., this is true of
+ the Session Initiation Protocol [SIP] as specified by
+ [SIP-CERTS]), then the certificate SHOULD include a URI-ID. The
+ scheme MUST be that of the protocol associated with the
+ application service type, and the "host" component MUST be the
+ FQDN of the service. The application protocol specification MUST
+ specify which URI schemes are acceptable in URI-IDs contained in
+ PKIX certificates used for the application protocol (e.g., sip
+ but not sips or tel for SIP as described in [SIP-SIPS]).
+ Typically, this identifier type would supplement the DNS-ID,
+ unless the certificate is meant to be scoped to only the protocol
+ in question.
+
+ 5. The certificate MAY contain more than one DNS-ID, SRV-ID, URI-ID,
+ or IP-ID as further explained in Section 7.5.
+
+ 6. The certificate MAY include other application-specific
+ identifiers for compatibility with a deployed base, especially
+ identifiers for types that were defined before publication of
+ [SRVNAME] or for which SRV service names or URI schemes do not
+ exist. Such identifiers are out of scope for this specification.
+
+4.2. Examples
+
+ Consider a simple website at <www.bigcompany.example>, which is not
+ discoverable via DNS SRV lookups. Because HTTP does not specify the
+ use of URIs in server certificates, a certificate for this service
+ might include only a DNS-ID of <www.bigcompany.example>.
+
+ Consider another website, which is reachable by a fixed IP address of
+ 2001:db8::5c. If the two sites refer to the same web service, then
+ the certificate might also include this value in an IP-ID to allow
+ clients to use the fixed IP address as a reference identity.
+
+ Consider an IMAP-accessible email server at the host mail.isp.example
+ servicing email addresses of the form user@isp.example and
+ discoverable via DNS SRV lookups on the application service name of
+ isp.example. A certificate for this service might include SRV-IDs of
+ _imap.isp.example and _imaps.isp.example (see [EMAIL-SRV]) along with
+ DNS-IDs of isp.example and mail.isp.example.
+
+ Consider a SIP-accessible voice-over-IP (VoIP) server at the host
+ voice.college.example servicing SIP addresses of the form
+ user@voice.college.example and identified by a URI of
+ <sip:voice.college.example>. A certificate for this service would
+ include a URI-ID of <sip:voice.college.example> (see [SIP-CERTS])
+ along with a DNS-ID of voice.college.example.
+
+ Consider an XMPP-compatible instant messaging (IM) server at the host
+ messenger.example that services IM addresses of the form
+ user@messenger.example and that is discoverable via DNS SRV lookups
+ on the messenger.example domain. A certificate for this service
+ might include SRV-IDs of _xmpp-client.messenger.example and _xmpp-
+ server.messenger.example (see [XMPP]), as well as a DNS-ID of
+ messenger.example.
+
+5. Requesting Server Certificates
+
+ This section provides instructions for service providers regarding
+ the information to include in certificate signing requests (CSRs).
+ In general, service providers SHOULD request certificates that
+ include all the identifier types that are required or recommended for
+ the application service type that will be secured using the
+ certificate to be issued.
+
+ A service provider SHOULD request certificates with as few
+ identifiers as necessary to identify a single service; see
+ Section 7.5.
+
+ If the certificate will be used for only a single type of application
+ service, the service provider SHOULD request a certificate that
+ includes DNS-ID or IP-ID values that identify that service or, if
+ appropriate for the application service type, SRV-ID or URI-ID values
+ that limit the deployment scope of the certificate to only the
+ defined application service type.
+
+ If the certificate might be used for any type of application service,
+ the service provider SHOULD request a certificate that includes only
+ DNS-IDs or IP-IDs. Again, because of multiprotocol attacks, this
+ practice is discouraged; it can be mitigated by deploying only one
+ service on a host.
+
+ If a service provider offers multiple application service types and
+ wishes to limit the applicability of certificates using SRV-IDs or
+ URI-IDs, it SHOULD request that multiple certificates rather than a
+ single certificate containing multiple SRV-IDs or URI-IDs each
+ identify a different application service type. This rule does not
+ apply to application service type "bundles" that identify distinct
+ access methods to the same underlying application such as an email
+ application with access methods denoted by the application service
+ types of imap, imaps, pop3, pop3s, and submission as described in
+ [EMAIL-SRV].
+
+6. Verifying Service Identity
+
+ At a high level, the client verifies the application service's
+ identity by performing the following actions:
+
+ 1. The client constructs a list of reference identifiers it would
+ find acceptable based on the source domain and, if applicable,
+ the type of service to which the client is connecting.
+
+ 2. The server provides its presented identifiers in the form of a
+ PKIX certificate.
+
+ 3. The client checks each of its reference identifiers against the
+ server's presented identifiers for the purpose of finding a
+ match. When checking a reference identifier against a presented
+ identifier, the client matches the source domain of the
+ identifiers and, optionally, their application service type.
+
+ Naturally, in addition to checking identifiers, a client should
+ perform further checks, such as expiration and revocation, to ensure
+ that the server is authorized to provide the requested service.
+ Because such checking is not a matter of verifying the application
+ service identity presented in a certificate, methods for doing so are
+ out of scope for this document.
+
+6.1. Constructing a List of Reference Identifiers
+
+6.1.1. Rules
+
+ The client MUST construct a list of acceptable reference identifiers
+ and MUST do so independently of the identifiers presented by the
+ server.
+
+ The inputs used by the client to construct its list of reference
+ identifiers might be a URI that a user has typed into an interface
+ (e.g., an HTTPS URL for a website), configured account information
+ (e.g., the domain name of a host for retrieving email, which might be
+ different from the DNS domain name portion of a username), a
+ hyperlink in a web page that triggers a browser to retrieve a media
+ object or script, or some other combination of information that can
+ yield a source domain and an application service type.
+
+ This document does not precisely define how reference identifiers are
+ generated. Defining reference identifiers is the responsibility of
+ applications or protocols that use this document. Because the
+ security of a system that uses this document will depend on how
+ reference identifiers are generated, great care should be taken in
+ this process. For example, a protocol or application could specify
+ that the application service type is obtained through a one-to-one
+ mapping of URI schemes to service types or that the protocol or
+ application supports only a restricted set of URI schemes.
+ Similarly, it could specify that a domain name or an IP address taken
+ as input to the reference identifier must be obtained in a secure
+ context such as a hyperlink embedded in a web page that was delivered
+ over an authenticated and encrypted channel (for instance, see
+ [SECURE-CONTEXTS] with regard to the web platform).
+
+ Naturally, if the inputs themselves are invalid or corrupt (e.g., a
+ user has clicked a hyperlink provided by a malicious entity in a
+ phishing attack), then the client might end up communicating with an
+ unexpected application service.
+
+ During the course of processing, a client might be exposed to
+ identifiers that look like, but are not, reference identifiers. For
+ example, DNS resolution that starts at a DNS-ID reference identifier
+ might produce intermediate domain names that need to be further
+ resolved. Unless an application defines a process for authenticating
+ intermediate identifiers in a way that then allows them to be used as
+ a reference identifier (for example, see [SMTP-TLS]), any
+ intermediate values are not reference identifiers and MUST NOT be
+ treated as such. In the DNS case, not treating intermediate domain
+ names as reference identifiers removes DNS and DNS resolution from
+ the attack surface.
+
+ As one example of the process of generating a reference identifier,
+ from the user input of the URI <sip:alice@voice.college.example>, a
+ client could derive the application service type sip from the URI
+ scheme and parse the domain name college.example from the "host"
+ component.
+
+ Using the combination of one or more FQDNs or IP addresses, plus
+ optionally an application service type, the client MUST construct its
+ list of reference identifiers in accordance with the following rules:
+
+ * If a server for the application service type is typically
+ associated with a URI for security purposes (i.e., a formal
+ protocol document specifies the use of URIs in server
+ certificates), the reference identifier SHOULD be a URI-ID.
+
+ * If a server for the application service type is typically
+ discovered by means of DNS SRV records, the reference identifier
+ SHOULD be an SRV-ID.
+
+ * If the reference identifier is an IP address, the reference
+ identifier is an IP-ID.
+
+ * In the absence of more specific identifiers, the reference
+ identifier is a DNS-ID. A reference identifier of type DNS-ID can
+ be directly constructed from an FQDN that is (a) contained in or
+ securely derived from the inputs or (b) explicitly associated with
+ the source domain by means of user configuration.
+
+ Which identifier types a client includes in its list of reference
+ identifiers, and their priority, is a matter of local policy. For
+ example, a client that is built to connect only to a particular kind
+ of service might be configured to accept as valid only certificates
+ that include an SRV-ID for that application service type. By
+ contrast, a more lenient client, even if built to connect only to a
+ particular kind of service, might include SRV-IDs, DNS-IDs, and IP-
+ IDs in its list of reference identifiers.
+
+6.1.2. Examples
+
+ The following examples are for illustrative purposes only and are not
+ intended to be comprehensive.
+
+ 1. A web browser that is connecting via HTTPS to the website at
+ <https://www.bigcompany.example/> would have a single reference
+ identifier: a DNS-ID of www.bigcompany.example.
+
+ 2. A web browser connecting to <https://192.0.2.107/> would have a
+ single IP-ID reference identifier of 192.0.2.107. Likewise, if
+ connecting to <https://[2001:db8::abcd]>, it would have a single
+ IP-ID reference identifier of 2001:db8::abcd.
+
+ 3. A mail user agent that is connecting via IMAPS to the email
+ service at isp.example (resolved as mail.isp.example) might have
+ three reference identifiers: an SRV-ID of _imaps.isp.example (see
+ [EMAIL-SRV]) and DNS-IDs of isp.example and mail.isp.example. An
+ email user agent that does not support [EMAIL-SRV] would probably
+ be explicitly configured to connect to mail.isp.example, whereas
+ an SRV-aware user agent would derive isp.example from an email
+ address of the form user@isp.example but might also accept
+ mail.isp.example as the DNS domain name portion of reference
+ identifiers for the service.
+
+ 4. A VoIP user agent that is connecting via SIP to the voice service
+ at voice.college.example might have only one reference
+ identifier: a URI-ID of sip:voice.college.example (see
+ [SIP-CERTS]).
+
+ 5. An IM client that is connecting via XMPP to the IM service at
+ messenger.example might have three reference identifiers: an SRV-
+ ID of _xmpp-client.messenger.example (see [XMPP]), a DNS-ID of
+ messenger.example, and an XMPP-specific XmppAddr of
+ messenger.example (see [XMPP]).
+
+ In all these cases, presented identifiers that do not match the
+ reference identifier(s) would be rejected; for instance:
+
+ * With regard to the first example, a DNS-ID of
+ web.bigcompany.example would be rejected because the DNS domain
+ name portion does not match www.bigcompany.example.
+
+ * With regard to the third example, a URI-ID of
+ <sip:www.college.example> would be rejected because the DNS domain
+ name portion does not match "voice.college.example", and a DNS-ID
+ of "voice.college.example" would be rejected because it lacks the
+ appropriate application service type portion (i.e., it does not
+ specify a "sip:" URI).
+
+6.2. Preparing to Seek a Match
+
+ Once the client has constructed its list of reference identifiers and
+ has received the server's presented identifiers, the client checks
+ its reference identifiers against the presented identifiers for the
+ purpose of finding a match. The search fails if the client exhausts
+ its list of reference identifiers without finding a match. The
+ search succeeds if any presented identifier matches one of the
+ reference identifiers, at which point the client SHOULD stop the
+ search.
+
+ Before applying the comparison rules provided in the following
+ sections, the client might need to split the reference identifier
+ into components. Each reference identifier produces either a domain
+ name or an IP address and optionally an application service type as
+ follows:
+
+ * A DNS-ID reference identifier MUST be used directly as the DNS
+ domain name, and there is no application service type.
+
+ * An IP-ID reference identifier MUST exactly match the value of an
+ iPAddress entry in subjectAltName, with no partial (e.g., network-
+ level) matching. There is no application service type.
+
+ * For an SRV-ID reference identifier, the DNS domain name portion is
+ the Name and the application service type portion is the Service.
+ For example, an SRV-ID of _imaps.isp.example has a DNS domain name
+ portion of isp.example and an application service type portion of
+ imaps, which maps to the IMAP application protocol as explained in
+ [EMAIL-SRV].
+
+ * For a reference identifier of type URI-ID, the DNS domain name
+ portion is the "reg-name" part of the "host" component and the
+ application service type portion is the scheme, as defined above.
+ Matching only the "reg-name" rule from [URI] limits the additional
+ domain name validation (Section 6.3) to DNS domain names or non-IP
+ hostnames. A URI that contains an IP address might be matched
+ against an IP-ID in place of a URI-ID by some lenient clients.
+ This document does not describe how a URI that contains no "host"
+ component can be matched. Note that extraction of the "reg-name"
+ might necessitate normalization of the URI (as explained in
+ Section 6 of [URI]). For example, a URI-ID of
+ <sip:voice.college.example> would be split into a DNS domain name
+ portion of voice.college.example and an application service type
+ of sip (associated with an application protocol of SIP as
+ explained in [SIP-CERTS]).
+
+ If the reference identifier produces a domain name, the client MUST
+ match the DNS name; see Section 6.3. If the reference identifier
+ produces an IP address, the client MUST match the IP address; see
+ Section 6.4. If an application service type is present, it MUST also
+ match the service type; see Section 6.5.
+
+6.3. Matching the DNS Domain Name Portion
+
+ This section describes how the client must determine if the presented
+ DNS name matches the reference DNS name. The rules differ depending
+ on whether the domain to be checked is an internationalized domain
+ name, as defined in Section 2, or not. For clients that support
+ presented identifiers containing the wildcard character "*", this
+ section also specifies a supplemental rule for such "wildcard
+ certificates". This section uses the description of labels and
+ domain names in [DNS-CONCEPTS].
+
+ If the DNS domain name portion of a reference identifier is not an
+ internationalized domain name (i.e., an FQDN that conforms to
+ "preferred name syntax" as described in Section 3.5 of
+ [DNS-CONCEPTS]), then the matching of the reference identifier
+ against the presented identifier MUST be performed by comparing the
+ set of domain name labels using a case-insensitive ASCII comparison,
+ as clarified by [DNS-CASE]. For example, WWW.BigCompany.Example
+ would be lower-cased to www.bigcompany.example for comparison
+ purposes. Each label MUST match in order for the names to be
+ considered a match, except as supplemented by the rule about checking
+ wildcard labels in presented identifiers given below.
+
+ If the DNS domain name portion of a reference identifier is an
+ internationalized domain name, then the client MUST convert any
+ U-labels [IDNA-DEFS] in the domain name to A-labels before checking
+ the domain name or comparing it with others. In accordance with
+ [IDNA-PROTO], A-labels MUST be compared as case-insensitive ASCII.
+ Each label MUST match in order for the domain names to be considered
+ to match, except as supplemented by the rule about checking wildcard
+ labels in presented identifiers given below.
+
+ If the technology specification supports wildcards in presented
+ identifiers, then the client MUST match the reference identifier
+ against a presented identifier whose DNS domain name portion contains
+ the wildcard character "*" in a label, provided these requirements
+ are met:
+
+ 1. There is only one wildcard character.
+
+ 2. The wildcard character appears only as the complete content of
+ the left-most label.
+
+ If the requirements are not met, the presented identifier is invalid
+ and MUST be ignored.
+
+ A wildcard in a presented identifier can only match one label in a
+ reference identifier. This specification covers only wildcard
+ characters in presented identifiers, not wildcard characters in
+ reference identifiers or in DNS domain names more generally.
+ Therefore, the use of wildcard characters as described herein is not
+ to be confused with DNS wildcard matching, where the "*" label always
+ matches at least one whole label and sometimes more; see
+ [DNS-CONCEPTS], Section 4.3.3 and [DNS-WILDCARDS]. In particular, it
+ also deviates from [DNS-WILDCARDS], Section 2.1.3.
+
+ For information regarding the security characteristics of wildcard
+ certificates, see Section 7.1.
+
+6.4. Matching an IP Address Portion
+
+ Matching of an IP-ID is based on an octet-for-octet comparison of the
+ bytes of the reference identity with the bytes contained in the
+ iPAddress subjectAltName.
+
+ For an IP address that appears in a URI-ID, the "host" component of
+ both the reference identity and the presented identifier must match.
+ These are parsed as either an "IPv6address" (following [URI],
+ Section 3.2.2) or an "IPv4address" (following [IPv4]). If the
+ resulting octets are equal, the IP address matches.
+
+ This document does not specify how an SRV-ID reference identity can
+ include an IP address, as [SRVNAME] only defines string names, not
+ octet identifiers such as an IP address.
+
+6.5. Matching the Application Service Type Portion
+
+ The rules for matching the application service type depend on whether
+ the identifier is an SRV-ID or a URI-ID.
+
+ These identifiers provide an application service type portion to be
+ checked, but that portion is combined only with the DNS domain name
+ portion of the SRV-ID or URI-ID itself. Consider the example of a
+ messaging client that has two reference identifiers: (1) an SRV-ID of
+ _xmpp-client.messenger.example and (2) a DNS-ID of app.example. The
+ client MUST check (1) the combination of (a) an application service
+ type of xmpp-client and (b) a DNS domain name of messenger.example as
+ well as (2) a DNS domain name of app.example. However, the client
+ MUST NOT check the combination of an application service type of
+ xmpp-client and a DNS domain name of app.example because it does not
+ have an SRV-ID of _xmpp-client.app.example in its list of reference
+ identifiers.
+
+ If the identifier is an SRV-ID, then the application service name
+ MUST be matched in a case-insensitive manner, in accordance with
+ [DNS-SRV]. Note that per [SRVNAME], the underscore "_" is part of
+ the service name in DNS SRV records and in SRV-IDs.
+
+ If the identifier is a URI-ID, then the scheme name portion MUST be
+ matched in a case-insensitive manner, in accordance with [URI]. Note
+ that the colon ":" is a separator between the scheme name and the
+ rest of the URI and thus does not need to be included in any
+ comparison.
+
+6.6. Outcome
+
+ If the client has found a presented identifier that matches a
+ reference identifier, then the service identity check has succeeded.
+ In this case, the client MUST use the matched reference identifier as
+ the validated identity of the application service.
+
+ If the client does not find a presented identifier matching any of
+ the reference identifiers, then the client MUST proceed as follows.
+
+ If the client is an automated application, then it SHOULD terminate
+ the communication attempt with a bad certificate error and log the
+ error appropriately. The application MAY provide a configuration
+ setting to disable this behavior, but it MUST NOT disable this
+ security control by default.
+
+ If the client is one that is directly controlled by a human user,
+ then it SHOULD inform the user of the identity mismatch and
+ automatically terminate the communication attempt with a bad
+ certificate error in order to prevent users from inadvertently
+ bypassing security protections in hostile situations. Such clients
+ MAY give advanced users the option of proceeding with acceptance
+ despite the identity mismatch. Although this behavior can be
+ appropriate in certain specialized circumstances, it needs to be
+ handled with extreme caution, for example by first encouraging even
+ an advanced user to terminate the communication attempt and, if they
+ choose to proceed anyway, by forcing the user to view the entire
+ certification path before proceeding.
+
+ The application MAY also present the user with the ability to accept
+ the presented certificate as valid for subsequent connections. Such
+ ad hoc "pinning" SHOULD NOT restrict future connections to just the
+ pinned certificate. Local policy that statically enforces a given
+ certificate for a given peer SHOULD be made available only as prior
+ configuration rather than a just-in-time override for a failed
+ connection.
+
+7. Security Considerations
+
+7.1. Wildcard Certificates
+
+ Wildcard certificates automatically vouch for any single-label
+ hostnames within their domain, but not multiple levels of domains.
+ This can be convenient for administrators but also poses the risk of
+ vouching for rogue or buggy hosts. For example, see [Defeating-SSL]
+ (beginning at slide 91) and [HTTPSbytes] (slides 38-40).
+
+ As specified in Section 6.3, restricting the presented identifiers in
+ certificates to only one wildcard character (e.g.,
+ "*.bigcompany.example" but not "*.*.bigcompany.example") and
+ restricting the use of wildcards to only the left-most domain label
+ can help to mitigate certain aspects of the attack described in
+ [Defeating-SSL].
+
+ That same attack also relies on the initial use of a cleartext HTTP
+ connection, which is hijacked by an active on-path attacker and
+ subsequently upgraded to HTTPS. In order to mitigate such an attack,
+ administrators and software developers are advised to follow the
+ strict TLS guidelines provided in [TLS-REC], Section 3.2.
+
+ Because the attack described in [HTTPSbytes] relies on an underlying
+ cross-site scripting (XSS) attack, web browsers and applications are
+ advised to follow best practices to prevent XSS attacks; for example,
+ see [XSS], which was published by the Open Web Application Security
+ Project (OWASP).
+
+ Protection against a wildcard that identifies a public suffix
+ [Public-Suffix], such as *.co.uk or *.com, is beyond the scope of
+ this document.
+
+ As noted in Section 3, application protocols can disallow the use of
+ wildcard certificates entirely as a more foolproof mitigation.
+
+7.2. Uniform Resource Identifiers
+
+ The URI-ID type is a subjectAltName entry of type
+ uniformResourceIdentifier as defined in [PKIX]. For the purposes of
+ this specification, the URI-ID MUST include both a "scheme" and a
+ "host" component that matches the "reg-name" rule; if the entry does
+ not include both, it is not a valid URI-ID and MUST be ignored. Any
+ other components are ignored because only the "scheme" and "host"
+ components are used for certificate matching as specified under
+ Section 6.
+
+ The quoted component names in the previous paragraph represent the
+ associated [ABNF] productions from the IETF Proposed Standard for
+ Uniform Resource Identifiers [URI]. Although the reader should be
+ aware that some applications (e.g., web browsers) might instead
+ conform to the Uniform Resource Locator (URL) specification
+ maintained by the WHATWG [URL], it is not expected that differences
+ between the URI and URL specifications would manifest themselves in
+ certificate matching.
+
+7.3. Internationalized Domain Names
+
+ This document specifies only matching between reference identifiers
+ and presented identifiers, not the visual presentation of domain
+ names. Specifically, the matching of internationalized domain names
+ is performed on A-labels only (Section 6.3). The limited scope of
+ this specification likely mitigates potential confusion caused by the
+ use of visually similar characters in domain names (for example, as
+ described in Section 4.4 of [IDNA-DEFS], [UTS-36], and [UTS-39]); in
+ any case, such concerns are a matter for application-level protocols
+ and user interfaces, not the matching of certificates.
+
+7.4. IP Addresses
+
+ The TLS Server Name Indication (SNI) extension only conveys domain
+ names. Therefore, a client with an IP-ID reference identity cannot
+ present any information about its reference identity when connecting
+ to a server. Servers that wish to present an IP-ID therefore need to
+ present this identity when a connection is made without SNI.
+
+ The textual representation of an IPv4 address might be misinterpreted
+ as a valid FQDN in some contexts. This can result in different
+ security treatment that might cause different components of a system
+ to classify the value differently, which might lead to
+ vulnerabilities. Consider a system in which one component enforces a
+ security rule that is conditional on the type of identifier but
+ misclassifies an IP address as an FQDN, whereas a second component
+ correctly classifies the identifier but incorrectly assumes that
+ rules regarding IP addresses have been enforced by the first
+ component. As a result, the system as a whole might behave in an
+ insecure manner. Consistent classification of identifiers avoids
+ this problem.
+
+ See also Section 3, particularly the last paragraph.
+
+7.5. Multiple Presented Identifiers
+
+ A given application service might be addressed by multiple DNS domain
+ names for a variety of reasons, and a given deployment might service
+ multiple domains or protocols. TLS extensions such as the Server
+ Name Indication (SNI), as discussed in [TLS-EXT], Section 3, and
+ ALPN, as discussed in [ALPN], provide a way for the application to
+ indicate the desired identifier and protocol to the server, which it
+ can then use to select the most appropriate certificate.
+
+ This specification allows multiple DNS-IDs, IP-IDs, SRV-IDs, or URI-
+ IDs in a certificate. As a result, an application service can use
+ the same certificate for multiple hostnames, such as when a client
+ does not support the TLS SNI extension, or for multiple protocols,
+ such as SMTP and HTTP, on a single hostname. Note that the set of
+ names in a certificate is the set of names that could be affected by
+ a compromise of any other server named in the set: the strength of
+ any server in the set of names is determined by the weakest of those
+ servers that offer the names.
+
+ The way to mitigate this risk is to limit the number of names that
+ any server can speak for and to ensure that all servers in the set
+ have a strong minimum configuration as described in [TLS-REC],
+ Section 3.9.
+
+7.6. Multiple Reference Identifiers
+
+ This specification describes how a client may construct multiple
+ acceptable reference identifiers and may match any of those reference
+ identifiers with the set of presented identifiers. [PKIX],
+ Section 4.2.1.10 describes a mechanism to allow CA certificates to be
+ constrained in the set of presented identifiers that they may include
+ within server certificates. However, these constraints only apply to
+ the explicitly enumerated name forms. For example, a CA that is only
+ name-constrained for DNS-IDs is not constrained for SRV-IDs and URI-
+ IDs, unless those name forms are also explicitly included within the
+ name constraints extension.
+
+ A client that constructs multiple reference identifiers of different
+ types, such as both DNS-IDs and SRV-IDs as described in
+ Section 6.1.1, SHOULD take care to ensure that CAs issuing such
+ certificates are appropriately constrained. This MAY take the form
+ of local policy through agreement with the issuing CA or MAY be
+ enforced by the client requiring that if one form of presented
+ identifier is constrained, such as a dNSName name constraint for DNS-
+ IDs, then all other forms of acceptable reference identities are also
+ constrained, such as requiring a uniformResourceIndicator name
+ constraint for URI-IDs.
+
+7.7. Certificate Trust
+
+ This document assumes that if a client trusts a given CA, it trusts
+ all certificates issued by that CA. The certificate checking process
+ does not include additional checks for bad behavior by the hosts
+ identified with such certificates, for instance, rogue servers or
+ buggy applications. Any additional checks (e.g., checking the server
+ name against trusted block lists) are the responsibility of the
+ application protocol or the client itself.
+
+8. IANA Considerations
+
+ This document has no IANA actions.
+
+9. References
+
+9.1. Normative References
+
+ [DNS-CONCEPTS]
+ Mockapetris, P., "Domain names - concepts and facilities",
+ STD 13, RFC 1034, DOI 10.17487/RFC1034, November 1987,
+ <https://www.rfc-editor.org/info/rfc1034>.
+
+ [DNS-SRV] Gulbrandsen, A., Vixie, P., and L. Esibov, "A DNS RR for
+ specifying the location of services (DNS SRV)", RFC 2782,
+ DOI 10.17487/RFC2782, February 2000,
+ <https://www.rfc-editor.org/info/rfc2782>.
+
+ [DNS-WILDCARDS]
+ Lewis, E., "The Role of Wildcards in the Domain Name
+ System", RFC 4592, DOI 10.17487/RFC4592, July 2006,
+ <https://www.rfc-editor.org/info/rfc4592>.
+
+ [IDNA-DEFS]
+ Klensin, J., "Internationalized Domain Names for
+ Applications (IDNA): Definitions and Document Framework",
+ RFC 5890, DOI 10.17487/RFC5890, August 2010,
+ <https://www.rfc-editor.org/info/rfc5890>.
+
+ [IDNA-PROTO]
+ Klensin, J., "Internationalized Domain Names in
+ Applications (IDNA): Protocol", RFC 5891,
+ DOI 10.17487/RFC5891, August 2010,
+ <https://www.rfc-editor.org/info/rfc5891>.
+
+ [IPv4] Postel, J., "Internet Protocol", STD 5, RFC 791,
+ DOI 10.17487/RFC0791, September 1981,
+ <https://www.rfc-editor.org/info/rfc791>.
+
+ [IPv6] Hinden, R. and S. Deering, "IP Version 6 Addressing
+ Architecture", RFC 4291, DOI 10.17487/RFC4291, February
+ 2006, <https://www.rfc-editor.org/info/rfc4291>.
+
+ [LDAP-DN] Zeilenga, K., Ed., "Lightweight Directory Access Protocol
+ (LDAP): String Representation of Distinguished Names",
+ RFC 4514, DOI 10.17487/RFC4514, June 2006,
+ <https://www.rfc-editor.org/info/rfc4514>.
+
+ [PKIX] Cooper, D., Santesson, S., Farrell, S., Boeyen, S.,
+ Housley, R., and W. Polk, "Internet X.509 Public Key
+ Infrastructure Certificate and Certificate Revocation List
+ (CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008,
+ <https://www.rfc-editor.org/info/rfc5280>.
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119,
+ DOI 10.17487/RFC2119, March 1997,
+ <https://www.rfc-editor.org/info/rfc2119>.
+
+ [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
+ 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
+ May 2017, <https://www.rfc-editor.org/info/rfc8174>.
+
+ [SRVNAME] Santesson, S., "Internet X.509 Public Key Infrastructure
+ Subject Alternative Name for Expression of Service Name",
+ RFC 4985, DOI 10.17487/RFC4985, August 2007,
+ <https://www.rfc-editor.org/info/rfc4985>.
+
+ [TLS-REC] Sheffer, Y., Saint-Andre, P., and T. Fossati,
+ "Recommendations for Secure Use of Transport Layer
+ Security (TLS) and Datagram Transport Layer Security
+ (DTLS)", BCP 195, RFC 9325, DOI 10.17487/RFC9325, November
+ 2022, <https://www.rfc-editor.org/info/rfc9325>.
+
+ [URI] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
+ Resource Identifier (URI): Generic Syntax", STD 66,
+ RFC 3986, DOI 10.17487/RFC3986, January 2005,
+ <https://www.rfc-editor.org/info/rfc3986>.
+
+9.2. Informative References
+
+ [ABNF] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
+ Specifications: ABNF", STD 68, RFC 5234,
+ DOI 10.17487/RFC5234, January 2008,
+ <https://www.rfc-editor.org/info/rfc5234>.
+
+ [ACME] Barnes, R., Hoffman-Andrews, J., McCarney, D., and J.
+ Kasten, "Automatic Certificate Management Environment
+ (ACME)", RFC 8555, DOI 10.17487/RFC8555, March 2019,
+ <https://www.rfc-editor.org/info/rfc8555>.
+
+ [ALPACA] Brinkmann, M., Dresen, C., Merget, R., Poddebniak, D.,
+ Müller, J., Somorovsky, J., Schwenk, J., and S. Schinzel,
+ "ALPACA: Application Layer Protocol Confusion - Analyzing
+ and Mitigating Cracks in TLS Authentication", 30th USENIX
+ Security Symposium (USENIX Security 21), September 2021,
+ <https://alpaca-attack.com/ALPACA.pdf>.
+
+ [ALPN] Friedl, S., Popov, A., Langley, A., and E. Stephan,
+ "Transport Layer Security (TLS) Application-Layer Protocol
+ Negotiation Extension", RFC 7301, DOI 10.17487/RFC7301,
+ July 2014, <https://www.rfc-editor.org/info/rfc7301>.
+
+ [DANE] Hoffman, P. and J. Schlyter, "The DNS-Based Authentication
+ of Named Entities (DANE) Transport Layer Security (TLS)
+ Protocol: TLSA", RFC 6698, DOI 10.17487/RFC6698, August
+ 2012, <https://www.rfc-editor.org/info/rfc6698>.
+
+ [Defeating-SSL]
+ Marlinspike, M., "New Tricks for Defeating SSL in
+ Practice", Black Hat DC, February 2009,
+ <https://www.blackhat.com/presentations/bh-dc-
+ 09/Marlinspike/BlackHat-DC-09-Marlinspike-Defeating-
+ SSL.pdf>.
+
+ [DNS-CASE] Eastlake 3rd, D., "Domain Name System (DNS) Case
+ Insensitivity Clarification", RFC 4343,
+ DOI 10.17487/RFC4343, January 2006,
+ <https://www.rfc-editor.org/info/rfc4343>.
+
+ [DNS-OVER-TLS]
+ Hu, Z., Zhu, L., Heidemann, J., Mankin, A., Wessels, D.,
+ and P. Hoffman, "Specification for DNS over Transport
+ Layer Security (TLS)", RFC 7858, DOI 10.17487/RFC7858, May
+ 2016, <https://www.rfc-editor.org/info/rfc7858>.
+
+ [DTLS] Rescorla, E., Tschofenig, H., and N. Modadugu, "The
+ Datagram Transport Layer Security (DTLS) Protocol Version
+ 1.3", RFC 9147, DOI 10.17487/RFC9147, April 2022,
+ <https://www.rfc-editor.org/info/rfc9147>.
+
+ [EMAIL-SRV]
+ Daboo, C., "Use of SRV Records for Locating Email
+ Submission/Access Services", RFC 6186,
+ DOI 10.17487/RFC6186, March 2011,
+ <https://www.rfc-editor.org/info/rfc6186>.
+
+ [HTTP] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke,
+ Ed., "HTTP Semantics", STD 97, RFC 9110,
+ DOI 10.17487/RFC9110, June 2022,
+ <https://www.rfc-editor.org/info/rfc9110>.
+
+ [HTTPSbytes]
+ Sokol, J. and R. Hansen, "HTTPS Can Byte Me", Black Hat
+ Briefings, November 2010, <https://media.blackhat.com/bh-
+ ad-10/Hansen/Blackhat-AD-2010-Hansen-Sokol-HTTPS-Can-Byte-
+ Me-slides.pdf>.
+
+ [NAPTR] Mealling, M., "Dynamic Delegation Discovery System (DDDS)
+ Part Three: The Domain Name System (DNS) Database",
+ RFC 3403, DOI 10.17487/RFC3403, October 2002,
+ <https://www.rfc-editor.org/info/rfc3403>.
+
+ [NTS] Franke, D., Sibold, D., Teichel, K., Dansarie, M., and R.
+ Sundblad, "Network Time Security for the Network Time
+ Protocol", RFC 8915, DOI 10.17487/RFC8915, September 2020,
+ <https://www.rfc-editor.org/info/rfc8915>.
+
+ [Public-Suffix]
+ Mozilla Foundation, "Public Suffix List",
+ <https://publicsuffix.org>.
+
+ [QUIC] Thomson, M., Ed. and S. Turner, Ed., "Using TLS to Secure
+ QUIC", RFC 9001, DOI 10.17487/RFC9001, May 2021,
+ <https://www.rfc-editor.org/info/rfc9001>.
+
+ [RFC9000] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based
+ Multiplexed and Secure Transport", RFC 9000,
+ DOI 10.17487/RFC9000, May 2021,
+ <https://www.rfc-editor.org/info/rfc9000>.
+
+ [SECTERMS] Shirey, R., "Internet Security Glossary, Version 2",
+ FYI 36, RFC 4949, DOI 10.17487/RFC4949, August 2007,
+ <https://www.rfc-editor.org/info/rfc4949>.
+
+ [SECURE-CONTEXTS]
+ West, M., "Secure Contexts", W3C Candidate Recommendation
+ Draft, September 2021,
+ <https://www.w3.org/TR/secure-contexts/>.
+
+ [SIP] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston,
+ A., Peterson, J., Sparks, R., Handley, M., and E.
+ Schooler, "SIP: Session Initiation Protocol", RFC 3261,
+ DOI 10.17487/RFC3261, June 2002,
+ <https://www.rfc-editor.org/info/rfc3261>.
+
+ [SIP-CERTS]
+ Gurbani, V., Lawrence, S., and A. Jeffrey, "Domain
+ Certificates in the Session Initiation Protocol (SIP)",
+ RFC 5922, DOI 10.17487/RFC5922, June 2010,
+ <https://www.rfc-editor.org/info/rfc5922>.
+
+ [SIP-SIPS] Audet, F., "The Use of the SIPS URI Scheme in the Session
+ Initiation Protocol (SIP)", RFC 5630,
+ DOI 10.17487/RFC5630, October 2009,
+ <https://www.rfc-editor.org/info/rfc5630>.
+
+ [SMTP-TLS] Fenton, J., "SMTP Require TLS Option", RFC 8689,
+ DOI 10.17487/RFC8689, November 2019,
+ <https://www.rfc-editor.org/info/rfc8689>.
+
+ [SVCB-FOR-DNS]
+ Schwartz, B., "Service Binding Mapping for DNS Servers",
+ RFC 9461, DOI 10.17487/RFC9461, November 2023,
+ <https://www.rfc-editor.org/info/rfc9461>.
+
+ [SVCB-FOR-HTTPS]
+ Schwartz, B., Bishop, M., and E. Nygren, "Service Binding
+ and Parameter Specification via the DNS (SVCB and HTTPS
+ Resource Records)", RFC 9460, DOI 10.17487/RFC9460,
+ November 2023, <https://www.rfc-editor.org/info/rfc9460>.
+
+ [TLS] Rescorla, E., "The Transport Layer Security (TLS) Protocol
+ Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018,
+ <https://www.rfc-editor.org/info/rfc8446>.
+
+ [TLS-EXT] Eastlake 3rd, D., "Transport Layer Security (TLS)
+ Extensions: Extension Definitions", RFC 6066,
+ DOI 10.17487/RFC6066, January 2011,
+ <https://www.rfc-editor.org/info/rfc6066>.
+
+ [TLS-SUBCERTS]
+ Barnes, R., Iyengar, S., Sullivan, N., and E. Rescorla,
+ "Delegated Credentials for TLS and DTLS", RFC 9345,
+ DOI 10.17487/RFC9345, July 2023,
+ <https://www.rfc-editor.org/info/rfc9345>.
+
+ [URL] van Kesteren, A., "URL", WHATWG Living Standard, September
+ 2023, <https://url.spec.whatwg.org/>.
+
+ [US-ASCII] American National Standards Institute, "Coded Character
+ Sets - 7-bit American Standard Code for Information
+ Interchange (7-Bit ASCII)", ANSI INCITS 4-1986 (R2007),
+ June 2007.
+
+ [UTS-36] Davis, M. and M. Suignard, "Unicode Security
+ Considerations", Revision 15, Unicode Technical
+ Report #36, September 2014,
+ <https://unicode.org/reports/tr36/>.
+
+ [UTS-39] Davis, M. and M. Suignard, "Unicode Security Mechanisms",
+ Version 15.1.0, Revision 28, Unicode Technical
+ Standard #39, September 2023,
+ <https://unicode.org/reports/tr39/>.
+
+ [VERIFY] Saint-Andre, P. and J. Hodges, "Representation and
+ Verification of Domain-Based Application Service Identity
+ within Internet Public Key Infrastructure Using X.509
+ (PKIX) Certificates in the Context of Transport Layer
+ Security (TLS)", RFC 6125, DOI 10.17487/RFC6125, March
+ 2011, <https://www.rfc-editor.org/info/rfc6125>.
+
+ [WSC-UI] Saldhana, A. and T. Roessler, "Web Security Context: User
+ Interface Guidelines", W3C Recommendation REC-wsc-ui-
+ 20100812, August 2010,
+ <https://www.w3.org/TR/2010/REC-wsc-ui-20100812/>.
+
+ [X.509] ITU-T, "Information Technology - Open Systems
+ Interconnection - The Directory: Public-key and attribute
+ certificate frameworks", ISO/IEC 9594-8, ITU-T
+ Recommendation X.509, October 2019.
+
+ [X.690] ITU-T, "Information Technology - ASN.1 encoding rules:
+ Specification of Basic Encoding Rules (BER), Canonical
+ Encoding Rules (CER) and Distinguished Encoding Rules
+ (DER)", ISO/IEC 8825-1:2021 (E), ITU-T
+ Recommendation X.690, February 2021.
+
+ [XMPP] Saint-Andre, P., "Extensible Messaging and Presence
+ Protocol (XMPP): Core", RFC 6120, DOI 10.17487/RFC6120,
+ March 2011, <https://www.rfc-editor.org/info/rfc6120>.
+
+ [XSS] Kirsten, S., et al., "Cross Site Scripting (XSS)", OWASP
+ Foundation, 2020,
+ <https://owasp.org/www-community/attacks/xss/>.
+
+Appendix A. Changes from RFC 6125
+
+ This document revises and obsoletes [VERIFY] based on the decade of
+ experience and changes since it was published. The major changes, in
+ no particular order, include:
+
+ * The only legal place for a certificate wildcard is as the complete
+ left-most label in a domain name.
+
+ * The server identity can only be expressed in the subjectAltNames
+ extension; it is no longer valid to use the commonName RDN, known
+ as CN-ID in [VERIFY].
+
+ * Detailed discussion of pinning (configuring use of a certificate
+ that doesn't match the criteria in this document) has been removed
+ and replaced with two paragraphs in Section 6.6.
+
+ * The sections detailing different target audiences and which
+ sections to read (first) have been removed.
+
+ * References to the X.500 directory, the survey of prior art, and
+ the sample text in Appendix A have been removed.
+
+ * All references have been updated to the latest versions.
+
+ * The TLS SNI extension is no longer new; it is commonplace.
+
+ * Additional text on multiple identifiers, and their security
+ considerations, has been added.
+
+ * IP-ID reference identifiers have been added. This builds on the
+ definition in [HTTP], Section 4.3.5.
+
+ * The document title has been shortened because the previous title
+ was difficult to cite.
+
+Acknowledgements
+
+ We gratefully acknowledge everyone who contributed to the previous
+ version of this specification [VERIFY]. Thanks also to Carsten
+ Bormann for converting the previous version of this specification to
+ Markdown so that we could more easily use Martin Thomson's
+ i-d-template software.
+
+ In addition to discussions within the UTA Working Group, the
+ following people provided official reviews or especially significant
+ feedback: Corey Bonnell, Roman Danyliw, Viktor Dukhovni, Lars Eggert,
+ Patrik Fältström, Jim Fenton, Olle Johansson, John Klensin, Murray
+ Kucherawy, Warren Kumari, John Mattson, Alexey Melnikov, Derrell
+ Piper, Maria Ines Robles, Rob Sayre, Yaron Sheffer, Ryan Sleevi,
+ Brian Smith, Petr Špaček, Orie Steele, Martin Thomson, Joe Touch,
+ Éric Vyncke, Paul Wouters, and Qin Wu.
+
+ A few descriptive sentences were borrowed from [TLS-REC].
+
+Contributors
+
+ Jeff Hodges coauthored the previous version of this specification
+ [VERIFY]. The authors gratefully acknowledge his essential
+ contributions to this work.
+
+ Martin Thomson contributed the text on the handling of IP-IDs.
+
+Authors' Addresses
+
+ Peter Saint-Andre
+ Independent
+ United States of America
+ Email: stpeter@stpeter.im
+
+
+ Rich Salz
+ Akamai Technologies
+ United States of America
+ Email: rsalz@akamai.com