<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.4.4) -->
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-cel-nfsv4-rpc-tls-othername-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="SunRPC x.509 Identity Squashing">Remote Procedure Call Identity Squashing via x.509 Certificate Fields</title>
    <seriesInfo name="Internet-Draft" value="draft-cel-nfsv4-rpc-tls-othername-01"/>
    <author fullname="Rick Macklem">
      <organization abbrev="FreeBSD">FreeBSD Project</organization>
      <address>
        <postal>
          <country>Canada</country>
        </postal>
        <email>rmacklem@uoguelph.ca</email>
      </address>
    </author>
    <author fullname="Chuck Lever" role="editor">
      <organization abbrev="Oracle">Oracle Corporation</organization>
      <address>
        <postal>
          <country>United States of America</country>
        </postal>
        <email>chuck.lever@oracle.com</email>
      </address>
    </author>
    <date year="2025" month="November" day="02"/>
    <area>Web and Internet Transport</area>
    <workgroup>Network File System Version 4</workgroup>
    <keyword>x.509</keyword>
    <keyword>SubjectAltName</keyword>
    <keyword>otherName</keyword>
    <keyword>NFS</keyword>
    <keyword>SunRPC</keyword>
    <abstract>
      <?line 46?>

<t>This document extends RPC-with-TLS, as described in <xref target="RFC9289"/>, so
that a client's x.509 certificate may carry instructions to the RPC
server to execute all RPC transactions from that client as a single
user identity.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://chucklever.github.io/i-d-rpc-tls-othername/#go.draft-cel-nfsv4-rpc-tls-othername.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-cel-nfsv4-rpc-tls-othername/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        nfsv4 Working Group mailing list (<eref target="mailto:nfsv4@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/nfsv4/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/nfsv4/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/chucklever/i-d-rpc-tls-othername"/>.</t>
    </note>
  </front>
  <middle>
    <?line 53?>

<section anchor="introduction">
      <name>Introduction</name>
      <section anchor="background">
        <name>Background</name>
        <t>The Remote Procedure Call version 2 protocol (RPC, for short) has been
a Proposed Standard for three decades (see <xref target="RFC5531"/> and its
antecedents).
Several important upper layer protocols, such as the family of Network
File System protocols (most recently described in <xref target="RFC8881"/> are based
on RPC.</t>
        <t>In 2022, the IETF published <xref target="RFC9289"/>, which specifies a mechanism
by which RPC transactions can be cryptographically protected during
transit. This protection includes maintaining confidentiality and
integrity, and the authentication of the communicating peers.</t>
      </section>
      <section anchor="problem-statement">
        <name>Problem Statement</name>
        <t><xref section="4.2" sectionFormat="of" target="RFC9289"/> states that:</t>
        <ul empty="true">
          <li>
            <t>RPC user authentication is not affected by
the use of transport layer security.  When a client presents a TLS
peer identity to an RPC server, the protocol extension described in
the current document provides no way for the server to know whether
that identity represents one RPC user on that client or is shared
amongst many RPC users.  Therefore, a server implementation cannot
utilize the remote TLS peer identity to authenticate RPC users.</t>
          </li>
        </ul>
        <t>Mobile devices such as laptops are typically used by a single user and
do not have a fixed, well known IP host address or fully qualified DNS name.
The lack of a well known fixed IP host address or fully qualified DNS name
weakens the verification checks that may be done on the client's X.509
certificate by the server.  As such, this extension allows the client to be
restricted to a single user entity on the server, limiting the scope of risk
associated with allowing access to the server.</t>
        <t>When a service is running in a dedicated VM or container, it often
runs as a single assigned user identity. Handling this user identity
using Kerberos is problematic, since Kerberos TGTs typically expire
in a matter of hours and the service is typically a long running task.
This extension allows the client to specify the single assigned user
identity to the server in a manner that will not expire for a significant
period of time.</t>
        <t>When an RPC server replaces incoming RPC user identities with a single
user identity, for brevity we refer to this as "identity squashing".</t>
      </section>
      <section anchor="summary-of-proposed-solution">
        <name>Summary of Proposed Solution</name>
        <t>In the interest of enabling the independent creation of interoperating
implementations of RPC identity squashing, this document proposes the
use of the x.509 SubjectAltName otherName field to carry a RPC user
identity.
For these user squashing instructions,
this document establishes a fixed object identifier
carried in the "type-id" part of the otherName field,
and specifies the format of the "value" part of the otherName
field when "type-id" carries the new object identifier.
The document also provides normative guidance on how the "value"
is to be interpreted by RPC servers.</t>
      </section>
    </section>
    <section anchor="requirements-language">
      <name>Requirements Language</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="x509-certificate-subjectaltname-field">
      <name>x.509 Certificate SubjectAltName Field</name>
      <t>As specified in <xref section="4.2.1.6" sectionFormat="of" target="RFC5280"/>:</t>
      <ul empty="true">
        <li>
          <t>The subjectAltName <bcp14>MAY</bcp14> carry additional name types through the use of
the otherName field.  The format and semantics of the name are
indicated through the OBJECT IDENTIFIER in the type-id field.  The
name itself is conveyed as value field in otherName.</t>
        </li>
      </ul>
      <t>A SubjectAltName extension <bcp14>MAY</bcp14> contain multiple entries of different types
(e.g., dNSName, iPAddress, otherName). When processing a certificate for
identity squashing purposes, the server examines only the otherName entries
with type-id values defined in this document. Other SubjectAltName entries
are used for their normal purposes (such as hostname verification for TLS).</t>
      <t>This document specifies new uses of the otherName field to carry an
RPC user identity. The receiving system (an RPC server) then
replaces the RPC user, as carried in the RPC header credential and
verifier fields in each RPC request within the TLS session, with the
user identity specified in the certificate used to authenticate that
session.</t>
      <section anchor="server-processing-of-othername-fields">
        <name>Server Processing of otherName Fields</name>
        <t>When an RPC server receives a client certificate containing a
SubjectAltName extension, it <bcp14>MUST</bcp14> process the otherName fields as
follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>The server <bcp14>MUST</bcp14> examine all otherName entries in the SubjectAltName
extension.</t>
          </li>
          <li>
            <t>If the server finds an otherName with a type-id that matches one of
the identity squashing OIDs defined in this document (id-on-rpcAuthSys,
id-on-gssExportedName, or id-on-nfsv4Principal), it <bcp14>SHOULD</bcp14> extract
and validate the identity information from that otherName.</t>
          </li>
          <li>
            <t>If multiple identity squashing otherName fields are present in the
same SubjectAltName extension, the server <bcp14>MUST</bcp14> reject the certificate
to avoid ambiguity. See <xref target="sec-security-considerations"/> for details.</t>
          </li>
          <li>
            <t>If the server encounters otherName entries with type-id values it does
not recognize, it <bcp14>MUST</bcp14> ignore those entries and continue processing.
This ensures forward compatibility with future extensions.</t>
          </li>
          <li>
            <t>Other types of SubjectAltName entries (dNSName, iPAddress, etc.) are
processed independently and do not affect identity squashing behavior.</t>
          </li>
        </ol>
        <t>The server performs identity squashing only if it successfully validates
an identity squashing otherName field and authorizes its use for the
authenticated TLS peer.</t>
      </section>
      <section anchor="server-processing">
        <name>Server Processing</name>
        <t>This section provides a non-normative example of how an RPC server
implementation might process identity squashing otherName fields.
Implementers are free to use alternative approaches.</t>
        <t>A typical server processing flow might include these steps:</t>
        <ol spacing="normal" type="1"><li>
            <t>During TLS session establishment, extract and validate the client's
X.509 certificate according to <xref target="RFC5280"/> and <xref target="RFC9289"/>.</t>
          </li>
          <li>
            <t>If the certificate contains a SubjectAltName extension, examine each
otherName entry to determine if any contain identity squashing type-id
values (id-on-rpcAuthSys, id-on-gssExportedName, or id-on-nfsv4Principal).</t>
          </li>
          <li>
            <t>If exactly one identity squashing otherName is found, extract and parse
the identity information according to the ASN.1 definition for that type-id.
If parsing fails, reject the certificate.</t>
          </li>
          <li>
            <t>Perform authorization checks to determine whether the authenticated TLS
peer is permitted to use the specified identity. This might involve:
            </t>
            <ul spacing="normal">
              <li>
                <t>Consulting an access control list mapping certificate subjects to
allowed user identities</t>
              </li>
              <li>
                <t>Verifying that the requested UID/GID values are within acceptable ranges</t>
              </li>
              <li>
                <t>Validating that the user@domain string matches expected domain patterns</t>
              </li>
              <li>
                <t>Checking that the GSS-API mechanism is trusted and the principal is
authorized</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If authorization succeeds, associate the extracted identity with the TLS
session state.</t>
          </li>
          <li>
            <t>For each incoming RPC request on this TLS session, replace the credential
information in the RPC header with the identity extracted from the certificate.
The original credential information in the RPC header is ignored.</t>
          </li>
          <li>
            <t>Process the RPC request using the squashed identity for all authorization
and access control decisions.</t>
          </li>
        </ol>
        <t>Implementations should consider caching the parsed and validated identity
information at TLS session establishment time to avoid repeated parsing
for each RPC request.</t>
      </section>
      <section anchor="interoperability-with-non-supporting-servers">
        <name>Interoperability with Non-Supporting Servers</name>
        <t>RPC servers that do not implement this specification will not recognize
the otherName OIDs defined in this document. Such servers <bcp14>MUST</bcp14> ignore
unrecognized otherName entries per <xref section="4.2.1.6" sectionFormat="of" target="RFC5280"/>.
These servers will process RPC requests using the credential information
contained in the RPC header, subject to their normal authentication and
authorization policies. This ensures that clients presenting certificates
with identity squashing otherName fields can interoperate with servers
that do not support this specification, though without identity squashing.</t>
      </section>
      <section anchor="authsys-identities">
        <name>AUTH_SYS Identities</name>
        <section anchor="othername-oid-for-authsys">
          <name>otherName OID for AUTH_SYS</name>
          <t>The otherName OID for AUTH_SYS identities is id-on-rpcAuthSys,
defined in <xref target="sec-authsys-asn1"/>.</t>
        </section>
        <section anchor="format-of-the-othername-value">
          <name>Format of the otherName Value</name>
          <t>The otherName value for AUTH_SYS identities contains an RPCAuthSys
structure as defined in <xref target="sec-authsys-asn1"/>. This structure consists
of a 32-bit unsigned integer specifying a numeric UID, and a sequence
of 32-bit unsigned integers specifying numeric GIDs.</t>
          <t>The use of these integers is further explained in <xref target="RFC5531"/>.</t>
        </section>
      </section>
      <section anchor="gss-api-principals">
        <name>GSS-API Principals</name>
        <section anchor="othername-oid-for-gss-api-principals">
          <name>otherName OID for GSS-API Principals</name>
          <t>The otherName OID for GSS-API exported names is id-on-gssExportedName,
defined in <xref target="sec-gss-asn1"/>.</t>
        </section>
        <section anchor="format-of-the-othername-value-1">
          <name>Format of the otherName Value</name>
          <t>The otherName value contains a GSSExportedName structure as defined in
<xref target="sec-gss-asn1"/>, consisting of a GSS-API mechanism OID and a
mechanism-specific exported name value as described in <xref section="3.2" sectionFormat="of" target="RFC2743"/>.</t>
        </section>
      </section>
      <section anchor="nfsv4-user-domain-string-identities">
        <name>NFSv4 User @ Domain String Identities</name>
        <section anchor="othername-oid-for-string-identities">
          <name>otherName OID for String Identities</name>
          <t>The otherName OID for NFSv4 user@domain principals is id-on-nfsv4Principal,
defined in <xref target="sec-nfsv4-asn1"/>.</t>
        </section>
        <section anchor="format-of-the-othername-value-2">
          <name>Format of the otherName Value</name>
          <t>The otherName value contains an NFSv4Principal structure as defined in
<xref target="sec-nfsv4-asn1"/>, consisting of a UTF-8 encoded user name, the
literal "@" character, and a UTF-8 encoded domain name, as described in
<xref section="5.9" sectionFormat="of" target="RFC8881"/>.</t>
        </section>
      </section>
    </section>
    <section anchor="extending-this-mechanism">
      <name>Extending This Mechanism</name>
      <t>It is possible that in the future, RPC servers might implement other forms
of RPC user identity, such as Windows Security Identifiers.
This section describes how standards action can extend the mechanism
specified in this document to accommodate new forms of user identity.</t>
      <t>Here, we'll provide the base level of general requirements that must be
met, as instructions to future authors. These are to include:</t>
      <ul spacing="normal">
        <li>
          <t>New identity types must define an ASN.1 module</t>
        </li>
        <li>
          <t>Must request IANA OID allocation</t>
        </li>
        <li>
          <t>Should provide security considerations specific to that identity type</t>
        </li>
        <li>
          <t>Should provide examples and test vectors</t>
        </li>
      </ul>
    </section>
    <section anchor="client-certificate-generation">
      <name>Client Certificate Generation</name>
      <t>This section provides non-normative guidance for Certificate Authorities
and administrators who generate client certificates containing identity
squashing otherName fields.</t>
      <section anchor="choosing-an-identity-format">
        <name>Choosing an Identity Format</name>
        <t>The choice of which identity format to use depends on the deployment
environment:</t>
        <dl>
          <dt>RPCAuthSys</dt>
          <dd>
            <t>Appropriate for environments where numeric UIDs and GIDs are the primary
form of user identity, such as traditional UNIX/Linux systems. This format
is compact but requires that UID/GID mappings be consistent between the
certificate and the server's user database.</t>
          </dd>
          <dt>GSSExportedName</dt>
          <dd>
            <t>Suitable for environments using GSS-API mechanisms like Kerberos. This
format provides the strongest integration with existing enterprise
authentication infrastructure but requires that servers support the
specific GSS-API mechanism indicated by the nameType OID.</t>
          </dd>
          <dt>NFSv4Principal</dt>
          <dd>
            <t>Recommended for heterogeneous environments or when human-readable
identities are preferred. The user@domain format is familiar to
administrators and supports internationalization, but requires that
servers perform name-to-UID mapping similar to NFSv4 identity mapping.</t>
          </dd>
        </dl>
      </section>
      <section anchor="populating-identity-fields">
        <name>Populating Identity Fields</name>
        <t>When generating certificates, consider these guidelines:</t>
        <dl>
          <dt>UID/GID values</dt>
          <dd>
            <t>Ensure that the numeric values in RPCAuthSys correspond to valid entries
in the server's user database. Avoid using privileged UIDs (such as 0 for
root) unless there is a specific operational requirement and strong
authorization controls are in place.</t>
          </dd>
          <dt>GSS-API exported names</dt>
          <dd>
            <t>The nameValue field should contain a properly formatted exported name
token as defined by the specific GSS-API mechanism. For Kerberos, this
follows the format specified in <xref target="RFC4121"/>. Consult the mechanism
specification for proper encoding.</t>
          </dd>
          <dt>User@domain strings</dt>
          <dd>
            <t>Both the user and domain components should be UTF-8 encoded. Domain names
should typically match the DNS domain under which the server operates.
International domain names should be encoded in UTF-8, not in Punycode
(ACE) form.</t>
          </dd>
        </dl>
      </section>
      <section anchor="certificate-validity-period">
        <name>Certificate Validity Period</name>
        <t>Certificates containing identity squashing otherName fields grant access
to server resources under a specific user identity. Administrators should
consider appropriate validity periods based on their security requirements.
Shorter validity periods reduce the window of exposure if a certificate is
compromised, but may increase operational overhead for certificate renewal.</t>
        <t>The choice of validity period might also consider whether certificate
revocation checking (CRL or OCSP) is deployed and how quickly revocation
information propagates in the environment.</t>
      </section>
    </section>
    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <aside>
        <t>RFC Editor: This section is to be removed before publishing this document as an RFC.</t>
      </aside>
      <t>This section records the status of known implementations of the
protocol defined by this specification at the time of posting of this
Internet-Draft, and is based on a proposal described in
<xref target="RFC7942"/>. The description of implementations in this section is
intended to assist the IETF in its decision processes in progressing
drafts to RFCs.</t>
      <t>Please note that the listing of any individual implementation here
does not imply endorsement by the IETF. Furthermore, no effort has
been spent to verify the information presented here that was supplied
by IETF contributors. This is not intended as, and must not be
construed to be, a catalog of available implementations or their
features. Readers are advised to note that other implementations may
exist.</t>
      <section anchor="freebsd-nfs-server-and-client">
        <name>FreeBSD NFS Server and Client</name>
        <dl>
          <dt>Organization:</dt>
          <dd>
            <t>FreeBSD</t>
          </dd>
          <dt>URL:</dt>
          <dd>
            <t><eref target="https://www.freebsd.org">https://www.freebsd.org</eref></t>
          </dd>
          <dt>Maturity:</dt>
          <dd>
            <t>Complete.</t>
          </dd>
          <dt>Coverage:</dt>
          <dd>
            <t>The mechanism to represent user@domain strings has been implemented
using an OID from the FreeBSD arc.</t>
          </dd>
          <dt>Licensing:</dt>
          <dd>
            <t>BSD 3-clause</t>
          </dd>
          <dt>Implementation experience:</dt>
          <dd>
            <t>None to report</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="sec-security-considerations">
      <name>Security Considerations</name>
      <section anchor="general-security-considerations">
        <name>General Security Considerations</name>
        <t>The security considerations for RPC-with-TLS described in <xref section="8" sectionFormat="of" target="RFC9289"/>
apply to this specification. In particular, the discussion about certificate
validation, trust anchors, and the establishment of secure TLS sessions remains
relevant.</t>
      </section>
      <section anchor="identity-squashing-and-authorization">
        <name>Identity Squashing and Authorization</name>
        <t>This specification enables a client to request that all RPC operations within a
TLS session be executed under a single user identity specified in the client's
X.509 certificate. This "identity squashing" mechanism has several security
implications:</t>
        <section anchor="trust-in-the-certificate-authority">
          <name>Trust in the Certificate Authority</name>
          <t>The server <bcp14>MUST</bcp14> carefully consider which Certificate Authorities (CAs) it trusts
to issue certificates containing the otherName extensions defined in this document.
A compromised or malicious CA could issue certificates that allow unauthorized
access to server resources under arbitrary user identities.</t>
          <t>Servers <bcp14>SHOULD</bcp14> maintain separate trust anchors for certificates containing
identity squashing otherName fields versus certificates used solely for TLS
peer authentication. This allows administrators to tightly control which CAs
are authorized to assert user identities.</t>
        </section>
        <section anchor="authorization-decisions">
          <name>Authorization Decisions</name>
          <t>The presence of an otherName field specifying a user identity does not by itself
grant any authorization. Servers <bcp14>MUST</bcp14> perform their normal authorization checks
to determine whether the requested identity is permitted for the authenticated
TLS peer.</t>
          <t>For example, a server might maintain an access control list mapping certificate
subjects or distinguished names to the set of user identities they are permitted
to assume. Only if such authorization succeeds should the server execute RPC
operations under the specified identity.</t>
        </section>
        <section anchor="name-canonicalization">
          <name>Name Canonicalization</name>
          <section anchor="nfsv4-principals">
            <name>NFSv4 Principals</name>
            <t>When processing NFSv4Principal otherName values, servers <bcp14>MUST</bcp14> apply the same
name canonicalization and domain validation procedures described in
<xref section="5.9" sectionFormat="of" target="RFC8881"/>. In particular:</t>
            <ul spacing="normal">
              <li>
                <t>Domain names <bcp14>SHOULD</bcp14> be validated against expected domain suffixes</t>
              </li>
              <li>
                <t>Internationalized domain names <bcp14>MUST</bcp14> be properly normalized</t>
              </li>
              <li>
                <t>Case-sensitivity rules for usernames and domains <bcp14>MUST</bcp14> be consistently applied</t>
              </li>
            </ul>
          </section>
          <section anchor="gss-api-exported-names">
            <name>GSS-API Exported Names</name>
            <t>When processing GSSExportedName otherName values, servers <bcp14>MUST</bcp14> verify that:</t>
            <ul spacing="normal">
              <li>
                <t>The mechanism OID in the nameType field corresponds to a GSS-API mechanism
the server supports and trusts</t>
              </li>
              <li>
                <t>The nameValue field conforms to the exported name format defined by that
specific GSS-API mechanism</t>
              </li>
              <li>
                <t>The mechanism-specific name validation and canonicalization procedures are
followed</t>
              </li>
            </ul>
            <t>Servers <bcp14>SHOULD NOT</bcp14> accept exported names from GSS-API mechanisms they do not
fully support, as improper name handling could lead to authorization bypass
vulnerabilities.</t>
          </section>
          <section anchor="authsys-credentials">
            <name>AUTH_SYS Credentials</name>
            <t>When processing RPCAuthSys otherName values, servers <bcp14>MUST</bcp14>:</t>
            <ul spacing="normal">
              <li>
                <t>Validate that the UID and GIDs fall within acceptable ranges for the local
system's user database</t>
              </li>
              <li>
                <t>Verify that the UID corresponds to a valid user account</t>
              </li>
              <li>
                <t>Confirm that the GIDs represent valid groups and that the user is authorized
to be a member of those groups</t>
              </li>
            </ul>
            <t>Servers <bcp14>SHOULD</bcp14> reject certificates containing UID 0 (root) or other privileged
UIDs unless there is an explicit and well-justified operational requirement,
and additional strong authorization controls are in place.</t>
          </section>
        </section>
      </section>
      <section anchor="session-binding">
        <name>Session Binding</name>
        <t>All RPC operations within a TLS session containing an identity squashing otherName
execute under the same user identity. Servers <bcp14>MUST</bcp14> ensure that session state
cannot be hijacked or transferred between different TLS sessions, as this could
allow an attacker to gain the privileges associated with the squashed identity.</t>
      </section>
      <section anchor="revocation">
        <name>Revocation</name>
        <t>Servers <bcp14>SHOULD</bcp14> support certificate revocation checking (via CRL, OCSP, or similar
mechanisms) for certificates containing identity squashing otherName fields.
Since these certificates grant user-level access to server resources, timely
revocation is critical when a certificate is compromised or a user's access
should be terminated.</t>
      </section>
      <section anchor="privacy-considerations">
        <name>Privacy Considerations</name>
        <t>The otherName fields defined in this specification reveal user identity information
in the client's X.509 certificate. This information is transmitted during the TLS
handshake and may be visible to network observers if the handshake is not properly
protected.</t>
        <t>While TLS 1.3 encrypts most of the handshake including certificates, earlier TLS
versions may expose this information. Deployments concerned about privacy <bcp14>SHOULD</bcp14>
use TLS 1.3 or later.</t>
      </section>
      <section anchor="multiple-identity-formats">
        <name>Multiple Identity Formats</name>
        <t>Implementations <bcp14>MUST NOT</bcp14> allow multiple identity squashing otherName fields to be
present simultaneously in the same SubjectAltName extension. If multiple such
fields are present (e.g., both RPCAuthSys and NFSv4Principal), the server <bcp14>MUST</bcp14>
reject the certificate to avoid ambiguity about which identity should be used.</t>
      </section>
    </section>
    <section anchor="sec-iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="smi-security-for-pkix-module-identifier">
        <name>SMI Security for PKIX Module Identifier</name>
        <t>IANA is requested to assign three object identifiers for the ASN.1 modules
specified in this document in the "SMI Security for PKIX Module Identifier"
registry (1.3.6.1.5.5.7.0):</t>
        <table>
          <thead>
            <tr>
              <th align="left">Decimal</th>
              <th align="left">Description</th>
              <th align="left">References</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD1</td>
              <td align="left">id-mod-rpc-auth-sys</td>
              <td align="left">RFC-TBD</td>
            </tr>
            <tr>
              <td align="left">TBD2</td>
              <td align="left">id-mod-gss-exported-name</td>
              <td align="left">RFC-TBD</td>
            </tr>
            <tr>
              <td align="left">TBD3</td>
              <td align="left">id-mod-nfsv4-principal</td>
              <td align="left">RFC-TBD</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="smi-security-for-pkix-other-name-forms">
        <name>SMI Security for PKIX Other Name Forms</name>
        <t>IANA is requested to assign three object identifiers for the otherName
types specified in this document in the "SMI Security for PKIX Other
Name Forms" registry (1.3.6.1.5.5.7.8):</t>
        <table>
          <thead>
            <tr>
              <th align="left">Decimal</th>
              <th align="left">Description</th>
              <th align="left">References</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD4</td>
              <td align="left">id-on-rpcAuthSys</td>
              <td align="left">RFC-TBD</td>
            </tr>
            <tr>
              <td align="left">TBD5</td>
              <td align="left">id-on-gssExportedName</td>
              <td align="left">RFC-TBD</td>
            </tr>
            <tr>
              <td align="left">TBD6</td>
              <td align="left">id-on-nfsv4Principal</td>
              <td align="left">RFC-TBD</td>
            </tr>
          </tbody>
        </table>
        <t>These otherName identifiers are used in the SubjectAltName extension
of X.509 certificates to carry RPC user identity information for the
purpose of identity squashing as described in this document.</t>
        <t>"RFC-TBD" is to be replaced with the actual RFC number when this
document is published.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC9289">
          <front>
            <title>Towards Remote Procedure Call Encryption by Default</title>
            <author fullname="T. Myklebust" initials="T." surname="Myklebust"/>
            <author fullname="C. Lever" initials="C." role="editor" surname="Lever"/>
            <date month="September" year="2022"/>
            <abstract>
              <t>This document describes a mechanism that, through the use of opportunistic Transport Layer Security (TLS), enables encryption of Remote Procedure Call (RPC) transactions while they are in transit. The proposed mechanism interoperates with Open Network Computing (ONC) RPC implementations that do not support it. This document updates RFC 5531.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9289"/>
          <seriesInfo name="DOI" value="10.17487/RFC9289"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC5280">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
        <reference anchor="RFC7942">
          <front>
            <title>Improving Awareness of Running Code: The Implementation Status Section</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
              <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="205"/>
          <seriesInfo name="RFC" value="7942"/>
          <seriesInfo name="DOI" value="10.17487/RFC7942"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC5531">
          <front>
            <title>RPC: Remote Procedure Call Protocol Specification Version 2</title>
            <author fullname="R. Thurlow" initials="R." surname="Thurlow"/>
            <date month="May" year="2009"/>
            <abstract>
              <t>This document describes the Open Network Computing (ONC) Remote Procedure Call (RPC) version 2 protocol as it is currently deployed and accepted. This document obsoletes RFC 1831. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5531"/>
          <seriesInfo name="DOI" value="10.17487/RFC5531"/>
        </reference>
        <reference anchor="RFC8881">
          <front>
            <title>Network File System (NFS) Version 4 Minor Version 1 Protocol</title>
            <author fullname="D. Noveck" initials="D." role="editor" surname="Noveck"/>
            <author fullname="C. Lever" initials="C." surname="Lever"/>
            <date month="August" year="2020"/>
            <abstract>
              <t>This document describes the Network File System (NFS) version 4 minor version 1, including features retained from the base protocol (NFS version 4 minor version 0, which is specified in RFC 7530) and protocol extensions made subsequently. The later minor version has no dependencies on NFS version 4 minor version 0, and is considered a separate protocol.</t>
              <t>This document obsoletes RFC 5661. It substantially revises the treatment of features relating to multi-server namespace, superseding the description of those features appearing in RFC 5661.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8881"/>
          <seriesInfo name="DOI" value="10.17487/RFC8881"/>
        </reference>
        <reference anchor="RFC2743">
          <front>
            <title>Generic Security Service Application Program Interface Version 2, Update 1</title>
            <author fullname="J. Linn" initials="J." surname="Linn"/>
            <date month="January" year="2000"/>
            <abstract>
              <t>This memo obsoletes [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2743"/>
          <seriesInfo name="DOI" value="10.17487/RFC2743"/>
        </reference>
        <reference anchor="RFC4121">
          <front>
            <title>The Kerberos Version 5 Generic Security Service Application Program Interface (GSS-API) Mechanism: Version 2</title>
            <author fullname="L. Zhu" initials="L." surname="Zhu"/>
            <author fullname="K. Jaganathan" initials="K." surname="Jaganathan"/>
            <author fullname="S. Hartman" initials="S." surname="Hartman"/>
            <date month="July" year="2005"/>
            <abstract>
              <t>This document defines protocols, procedures, and conventions to be employed by peers implementing the Generic Security Service Application Program Interface (GSS-API) when using the Kerberos Version 5 mechanism.</t>
              <t>RFC 1964 is updated and incremental changes are proposed in response to recent developments such as the introduction of Kerberos cryptosystem framework. These changes support the inclusion of new cryptosystems, by defining new per-message tokens along with their encryption and checksum algorithms based on the cryptosystem profiles. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4121"/>
          <seriesInfo name="DOI" value="10.17487/RFC4121"/>
        </reference>
        <reference anchor="RFC5912">
          <front>
            <title>New ASN.1 Modules for the Public Key Infrastructure Using X.509 (PKIX)</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="June" year="2010"/>
            <abstract>
              <t>The Public Key Infrastructure using X.509 (PKIX) certificate format, and many associated formats, are expressed using ASN.1. The current ASN.1 modules conform to the 1988 version of ASN.1. This document updates those ASN.1 modules to conform to the 2002 version of ASN.1. There are no bits-on-the-wire changes to any of the formats; this is simply a change to the syntax. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5912"/>
          <seriesInfo name="DOI" value="10.17487/RFC5912"/>
        </reference>
      </references>
    </references>
    <?line 551?>

<section anchor="asn1-modules">
      <name>ASN.1 Modules</name>
      <t>The following ASN.1 modules normatively specify the structure of
the new otherName values described in this document.
This specification uses the ASN.1 definitions from
<xref target="RFC5912"/> with the 2002 ASN.1 notation used in that document.
<xref target="RFC5912"/> updates normative documents using older ASN.1 notation.</t>
      <section anchor="sec-authsys-asn1">
        <name>The RpcAuthSysUser</name>
        <sourcecode type="asn.1"><![CDATA[
RPCAuthSysCertExtn
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-rpc-auth-sys(TBD) }

DEFINITIONS IMPLICIT TAGS ::=
BEGIN

IMPORTS
    OTHER-NAME
    FROM PKIX1Implicit-2009
        { iso(1) identified-organization(3) dod(6) internet(1)
          security(5) mechanisms(5) pkix(7) id-mod(0)
          id-mod-pkix1-implicit-02(59) } ;

-- Object Identifier Arc
id-pkix OBJECT IDENTIFIER ::=
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) }

id-on OBJECT IDENTIFIER ::= { id-pkix 8 }  -- other names

-- OID for RPC AUTH_SYS credentials in otherName
id-on-rpcAuthSys OBJECT IDENTIFIER ::= { id-on TBD }

-- RPC AUTH_SYS Credentials Structure
-- UID and GID list as used in RPC AUTH_SYS authentication flavor
-- See RFC 5531 (ONC RPC) and related specifications
RPCAuthSys ::= SEQUENCE {
    uid        INTEGER (0..4294967295),  -- 32-bit UID
    gids       SEQUENCE OF INTEGER (0..4294967295)  -- List of 32-bit GIDs
}

-- For use in SubjectAltName otherName
rpcAuthSys OTHER-NAME ::= {
    RPCAuthSys IDENTIFIED BY id-on-rpcAuthSys
}

END
]]></sourcecode>
      </section>
      <section anchor="sec-gss-asn1">
        <name>The RpcGssUser</name>
        <sourcecode type="asn.1"><![CDATA[
GSSAPIPrincipalCertExtn
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-gss-exported-name(TBD) }

DEFINITIONS IMPLICIT TAGS ::=
BEGIN

IMPORTS
    OTHER-NAME
    FROM PKIX1Implicit-2009
        { iso(1) identified-organization(3) dod(6) internet(1)
          security(5) mechanisms(5) pkix(7) id-mod(0)
          id-mod-pkix1-implicit-02(59) } ;

-- Object Identifier Arc
id-pkix OBJECT IDENTIFIER ::=
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) }

id-on OBJECT IDENTIFIER ::= { id-pkix 8 }  -- other names

-- OID for GSS-API Exported Name in otherName
id-on-gssExportedName OBJECT IDENTIFIER ::= { id-on TBD }

-- GSS-API Exported Name Structure
-- As defined in RFC 2743 Section 3.2
GSSExportedName ::= SEQUENCE {
    nameType   OBJECT IDENTIFIER,  -- GSS-API mechanism OID
    nameValue  OCTET STRING        -- Mechanism-specific exported name
}

-- For use in SubjectAltName otherName
gssExportedName OTHER-NAME ::= {
    GSSExportedName IDENTIFIED BY id-on-gssExportedName
}

END
]]></sourcecode>
      </section>
      <section anchor="sec-nfsv4-asn1">
        <name>The RpcNfsv4User</name>
        <sourcecode type="asn.1"><![CDATA[
NFSv4PrincipalCertExtn
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-nfsv4-principal(TBD) }

DEFINITIONS IMPLICIT TAGS ::=
BEGIN

IMPORTS
    OTHER-NAME
    FROM PKIX1Implicit-2009
        { iso(1) identified-organization(3) dod(6) internet(1)
          security(5) mechanisms(5) pkix(7) id-mod(0)
          id-mod-pkix1-implicit-02(59) } ;

-- Object Identifier Arc
id-pkix OBJECT IDENTIFIER ::=
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) }

id-on OBJECT IDENTIFIER ::= { id-pkix 8 }  -- other names

-- OID for NFSv4 user@domain principal in otherName
id-on-nfsv4Principal OBJECT IDENTIFIER ::= { id-on TBD }

-- NFSv4 User@Domain Principal Structure
-- As defined in RFC 8881 Section 5.9
NFSv4Principal ::= SEQUENCE {
    user       UTF8String,
    atSign     IA5String (SIZE (1)) (FROM ("@")),
    domain     UTF8String  -- Supports internationalized domain names
}

-- For use in SubjectAltName otherName
nfsv4Principal OTHER-NAME ::= {
    NFSv4Principal IDENTIFIED BY id-on-nfsv4Principal
}

END
]]></sourcecode>
      </section>
    </section>
    <section anchor="sec-certificate-examples">
      <name>Certificate Examples</name>
      <t>This appendix provides examples of X.509 certificates containing the
otherName extensions defined in this document. These examples are
provided in both human-readable notation and hexadecimal DER encoding
to assist implementers in verifying their implementations.</t>
      <section anchor="nfsv4-principal-example">
        <name>NFSv4 Principal Example</name>
        <t>This example shows a certificate for user "alice" at domain "nfs.example.com":</t>
        <sourcecode type="asn.1"><![CDATA[
SubjectAltName ::= SEQUENCE {
    otherName [0] IMPLICIT SEQUENCE {
        type-id OBJECT IDENTIFIER ::= id-on-nfsv4Principal,
        value [0] EXPLICIT NFSv4Principal ::= {
            user "alice",
            atSign "@",
            domain "nfs.example.com"
        }
    }
}
]]></sourcecode>
        <t>DER encoding (hexadecimal):</t>
        <artwork><![CDATA[
30 2B A0 29 06 08 2B 06 01 05 05 07 08 XX A0 1D
0C 05 61 6C 69 63 65 13 01 40 0C 0F 6E 66 73 2E
65 78 61 6D 70 6C 65 2E 63 6F 6D
]]></artwork>
        <t>Note: XX represents the TBD value for id-on-nfsv4Principal.</t>
      </section>
      <section anchor="gss-api-exported-name-example">
        <name>GSS-API Exported Name Example</name>
        <t>This example shows a certificate containing a Kerberos V5 principal
for "bob@EXAMPLE.COM":</t>
        <sourcecode type="asn.1"><![CDATA[
SubjectAltName ::= SEQUENCE {
    otherName [0] IMPLICIT SEQUENCE {
        type-id OBJECT IDENTIFIER ::= id-on-gssExportedName,
        value [0] EXPLICIT GSSExportedName ::= {
            nameType 1.2.840.113554.1.2.2,  -- Kerberos V5
            nameValue '04 01 00 0B 06 09 2A 86 48 86 F7 12 01 02 02
                       00 00 00 11 62 6F 62 40 45 58 41 4D 50 4C 45
                       2E 43 4F 4D'H
        }
    }
}
]]></sourcecode>
        <t>DER encoding (hexadecimal):</t>
        <artwork><![CDATA[
30 47 A0 45 06 08 2B 06 01 05 05 07 08 YY A0 39
30 37 06 09 2A 86 48 86 F7 12 01 02 02 04 2A 04
01 00 0B 06 09 2A 86 48 86 F7 12 01 02 02 00 00
00 11 62 6F 62 40 45 58 41 4D 50 4C 45 2E 43 4F
4D
]]></artwork>
        <t>Note: YY represents the TBD value for id-on-gssExportedName.</t>
        <t>The nameValue field contains the GSS-API exported name token format
as defined by the Kerberos V5 mechanism. The first four bytes
(04 01 00 0B) are the token ID and length fields defined in
<xref section="3.2" sectionFormat="of" target="RFC2743"/>.</t>
      </section>
      <section anchor="rpc-authsys-example">
        <name>RPC AUTH_SYS Example</name>
        <t>This example shows a certificate containing UID 1000 and GIDs
1000, 10, and 100:</t>
        <sourcecode type="asn.1"><![CDATA[
SubjectAltName ::= SEQUENCE {
    otherName [0] IMPLICIT SEQUENCE {
        type-id OBJECT IDENTIFIER ::= id-on-rpcAuthSys,
        value [0] EXPLICIT RPCAuthSys ::= {
            uid 1000,
            gids { 1000, 10, 100 }
        }
    }
}
]]></sourcecode>
        <t>DER encoding (hexadecimal):</t>
        <artwork><![CDATA[
30 20 A0 1E 06 08 2B 06 01 05 05 07 08 ZZ A0 12
30 10 02 02 03 E8 30 0A 02 02 03 E8 02 01 0A 02
01 64
]]></artwork>
        <t>Note: ZZ represents the TBD value for id-on-rpcAuthSys.</t>
        <t>Breaking down the encoding:
- 02 02 03 E8: INTEGER 1000 (UID)
- 30 0A: SEQUENCE OF (GIDs)
  - 02 02 03 E8: INTEGER 1000
  - 02 01 0A: INTEGER 10
  - 02 01 64: INTEGER 100</t>
      </section>
      <section anchor="complete-certificate-example">
        <name>Complete Certificate Example</name>
        <t>This example shows a minimal self-signed certificate containing an
NFSv4Principal otherName. Line breaks and whitespace have been added
for readability:</t>
        <artwork><![CDATA[
-----BEGIN CERTIFICATE-----
MIICXzCCAcigAwIBAgIUAbCdEfG7KH0FjLbI8N9cJQqQoLwwDQYJKoZIhvcNAQEL
BQAwRDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExDzANBgNVBAcM
BklydmluZTEPMA0GA1UECgwGT3JhY2xlMB4XDTI1MDEwMTAwMDAwMFoXDTI2MDEw
MTAwMDAwMFowRDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExDzAN
BgNVBAcMBklydmluZTEPMA0GA1UECgwGT3JhY2xlMIGfMA0GCSqGSIb3DQEBAQUA
A4GNADCBiQKBgQC7VJTUt9Us8cKjMzEfYyjiWA4R4ypbHqGC0H0+tG3hGbN3MYHa
... [additional base64-encoded certificate data] ...
oxUwEwYDVR0lBAwwCgYIKwYBBQUHAwEwKwYDVR0RBCQwIqAfBggrBgEFBQcIAKAT
DBVhbGljZUBuZnMuZXhhbXBsZS5jb20wDQYJKoZIhvcNAQELBQADgYEAk3+...
-----END CERTIFICATE-----
]]></artwork>
        <t>The SubjectAltName extension in this certificate is encoded at the
position indicated by the bytes following the Extended Key Usage
extension.</t>
      </section>
      <section anchor="internationalized-domain-name-example">
        <name>Internationalized Domain Name Example</name>
        <t>This example shows an NFSv4Principal with internationalized characters:</t>
        <sourcecode type="asn.1"><![CDATA[
SubjectAltName ::= SEQUENCE {
    otherName [0] IMPLICIT SEQUENCE {
        type-id OBJECT IDENTIFIER ::= id-on-nfsv4Principal,
        value [0] EXPLICIT NFSv4Principal ::= {
            user "用户",        -- Chinese characters for "user"
            atSign "@",
            domain "例え.jp"    -- Japanese IDN
        }
    }
}
]]></sourcecode>
        <t>DER encoding (hexadecimal):</t>
        <artwork><![CDATA[
30 2D A0 2B 06 08 2B 06 01 05 05 07 08 XX A0 1F
0C 06 E7 94 A8 E6 88 B7 13 01 40 0C 0C E4 BE 8B
E3 81 88 2E 6A 70
]]></artwork>
        <t>Note: The UTF-8 encoding of the Chinese characters "用户" is
E7 94 A8 E6 88 B7, and the Japanese text "例え" is E4 BE 8B E3 81 88.</t>
      </section>
      <section anchor="test-vectors">
        <name>Test Vectors</name>
        <t>This section provides test vectors for validating implementations.
Each test case includes the input values, expected ASN.1 structure,
and expected DER encoding.</t>
        <section anchor="valid-nfsv4principal-test-cases">
          <name>Valid NFSv4Principal Test Cases</name>
          <t>Test Case 1: Simple ASCII user and domain</t>
          <t>Input:</t>
          <ul spacing="normal">
            <li>
              <t>user: "bob"</t>
            </li>
            <li>
              <t>domain: "example.org"</t>
            </li>
          </ul>
          <t>Expected DER encoding:</t>
          <artwork><![CDATA[
30 22 A0 20 06 08 2B 06 01 05 05 07 08 XX A0 14
0C 03 62 6F 62 13 01 40 0C 0B 65 78 61 6D 70 6C
65 2E 6F 72 67
]]></artwork>
          <t>Test Case 2: User with numbers and domain with subdomain</t>
          <t>Input:</t>
          <ul spacing="normal">
            <li>
              <t>user: "user123"</t>
            </li>
            <li>
              <t>domain: "nfs.lab.example.com"</t>
            </li>
          </ul>
          <t>Expected DER encoding:</t>
          <artwork><![CDATA[
30 2F A0 2D 06 08 2B 06 01 05 05 07 08 XX A0 21
0C 07 75 73 65 72 31 32 33 13 01 40 0C 14 6E 66
73 2E 6C 61 62 2E 65 78 61 6D 70 6C 65 2E 63 6F
6D
]]></artwork>
        </section>
        <section anchor="valid-rpcauthsys-test-cases">
          <name>Valid RPCAuthSys Test Cases</name>
          <t>Test Case 1: Single user, single group</t>
          <t>Input:</t>
          <ul spacing="normal">
            <li>
              <t>uid: 1000</t>
            </li>
            <li>
              <t>gids: { 1000 }</t>
            </li>
          </ul>
          <t>Expected DER encoding:</t>
          <artwork><![CDATA[
30 13 A0 11 06 08 2B 06 01 05 05 07 08 ZZ A0 05
30 08 02 02 03 E8 30 04 02 02 03 E8
]]></artwork>
          <t>Test Case 2: User with empty group list</t>
          <t>Input:</t>
          <ul spacing="normal">
            <li>
              <t>uid: 500</t>
            </li>
            <li>
              <t>gids: (empty)</t>
            </li>
          </ul>
          <t>Expected DER encoding:</t>
          <artwork><![CDATA[
30 0F A0 0D 06 08 2B 06 01 05 05 07 08 ZZ A0 01
30 06 02 02 01 F4 30 00
]]></artwork>
          <t>Test Case 3: User with maximum 32-bit UID and multiple groups</t>
          <t>Input:</t>
          <ul spacing="normal">
            <li>
              <t>uid: 4294967295</t>
            </li>
            <li>
              <t>gids: { 1, 10, 100, 1000 }</t>
            </li>
          </ul>
          <t>Expected DER encoding:</t>
          <artwork><![CDATA[
30 24 A0 22 06 08 2B 06 01 05 05 07 08 ZZ A0 16
30 14 02 05 00 FF FF FF FF 30 0B 02 01 01 02 01
0A 02 01 64 02 02 03 E8
]]></artwork>
        </section>
        <section anchor="invalid-test-cases">
          <name>Invalid Test Cases</name>
          <t>These test cases should be rejected by conforming implementations:</t>
          <t>Test Case 1: NFSv4Principal with missing atSign field</t>
          <t>Input (malformed):</t>
          <ul spacing="normal">
            <li>
              <t>user: "alice"</t>
            </li>
            <li>
              <t>atSign: "" (empty)</t>
            </li>
            <li>
              <t>domain: "example.com"</t>
            </li>
          </ul>
          <t>Expected result: Parsing failure</t>
          <t>Test Case 2: RPCAuthSys with UID exceeding 32-bit range</t>
          <t>Input (malformed):</t>
          <ul spacing="normal">
            <li>
              <t>uid: 4294967296 (2^32)</t>
            </li>
            <li>
              <t>gids: { 1000 }</t>
            </li>
          </ul>
          <t>Expected result: Encoding failure or rejection</t>
          <t>Test Case 3: Certificate with multiple identity squashing otherNames</t>
          <t>Input (malformed):
SubjectAltName containing both:
- id-on-nfsv4Principal with user "alice@example.com"
- id-on-rpcAuthSys with uid 1000</t>
          <t>Expected result: Certificate rejection per Security Considerations</t>
        </section>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors are grateful to
Jeff Layton,
Greg Marsden,
and
Martin Thomson
for their input and support.</t>
      <t>Special thanks to
Area Director
Gorry Fairhurst,
NFSV4 Working Group Chairs
Brian Pawlowski
and
Christopher Inacio,
and
NFSV4 Working Group Secretary
Thomas Haynes
for their guidance and oversight.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
