One document matched: draft-josefsson-sasl-external-channel-02.xml
<?xml version="1.0"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc compact="yes"?>
<?rfc toc="yes"?>
<?rfc symrefs="yes"?>
<rfc category="std" ipr="pre5378Trust200902"
docName="draft-josefsson-sasl-external-channel-02">
<front>
<title abbrev="EXTERNAL-*">
SASL Mechanism Family for External Authentication: EXTERNAL-*
</title>
<author initials="S." surname="Josefsson" fullname="Simon Josefsson">
<organization>SJD AB</organization>
<address>
<email>simon@josefsson.org</email>
</address>
</author>
<date month="April" year="2009"/>
<abstract>
<t>This document describes a way to perform client authentication in
the Simple Authentication and Security Layer (SASL) framework by
referring to the end-user authentication provided by an external
security layer. We specify a SASL mechanism family EXTERNAL-* and
one instance EXTERNAL-TLS that rely on the Transport Layer
Security (TLS) protocol. This mechanism differs to the existing
EXTERNAL mechanism by alleviating the a priori assumptions that
servers and clients needs somehow negotiate out of band which
secure channel that is intended. This document also discuss the
implementation of authorization decisions.</t>
<t>See <http://josefsson.org/external-channel/> for more
information.</t>
</abstract>
</front>
<middle>
<section title="Introduction">
<t>The EXTERNAL mechanism, described in Appendix A of
<xref target="RFC4422" /> allows a client to request the server to
use credentials established by means external to the mechanism to
authenticate the client. The external means may be, for instance,
<xref target="RFC5246">TLS</xref> or <xref target="RFC4301">IP
Security</xref> services.</t>
<t>The EXTERNAL mechanism requires some a prior agreement between
the client and the server regarding which external channel, and
consequently which external credentials, should be used for
authentication. In practice this has often meant that the
EXTERNAL mechanism is only used when there is tight out of band
interaction between the server administration and client user.
This has impacted the interoperability of the EXTERNAL
mechanism.</t>
<t>The EXTERNAL-* mechanism family, specified in this document, is
similar to the EXTERNAL mechanism in that it relies on an external
channel to perform the user authentication. However, EXTERNAL-*
provides a way for the client to provide an identifier of the
external channel that is intended to provide the user credentials.
The intention is that the server need not rely on a priori
arrangement to identify the secure channel that was used, but can
automatically find the intended channel and re-use its credentials
for the SASL authentication. Further, upon successful
authentication, the client knows that the server used credentials
from the indicated security channel.</t>
<t>In the EXTERNAL-* mechanism family, the external channel is
identified through the SASL mechanism name.</t>
</section>
<section title="Specification of EXTERNAL-* Mechanism Family">
<t>The name of the mechanism family is "EXTERNAL-".</t>
<t>The mechanism family does not provide a security layer. It
provides similar functionality by relying on an external
channel.</t>
<t>The mechanism is capable of transferring an authorization
identity string. If the authorization identity string is empty,
the client is requesting to act as the identity the server has
associated with the client's credentials. If the authorization
identity string is non-empty, the client is requesting to act as
the identity represented by the string.</t>
<t>The client is expected to send data first in the authentication
exchange. Where the client does not provide an initial response
data in its request to initiate the authentication exchange, the
server is to respond to the request with an empty initial
challenge and then the client is to provide its initial
response.</t>
<t>The client sends the initial response containing
a <xref target="RFC3629">UTF-8</xref> encoding of the requested
authorization identity string.</t>
<t>The authorization identity is non-empty when the client is
requesting to act as the identity represented by the (non-empty)
string. The authorization identity is empty when the client is
requesting to act as the identity the server associates with the
external authentication credentials.</t>
<t>The syntax of the initial response is specified as a value of the
<extern-initial-resp> production detailed below using the
<xref target="RFC5234">Augmented Backus-Naur Form (ABNF)</xref>
notation.</t>
<figure>
<artwork type="abnf">
external-initial-resp = authz-id-string
authz-id-string = *( UTF8-char-no-nul )
UTF8-char-no-nul = UTF8-1-no-nul / UTF8-2 / UTF8-3 / UTF8-4
;; where the UTF8-2, UTF8-3, and UTF8-4 productions are
;; as defined in RFC 3629.
UTF8-1-no-nul = %x01-7F
</artwork>
</figure>
<t>There are no additional challenges and responses.</t>
<t>Hence, the server is to return the outcome of the authentication
exchange.</t>
<t>The external security channel to use is implied by the SASL
mechanism name.</t>
<t>The exchange fails if</t>
<t>- the client has not established its credentials via the
indicated external channel,</t>
<t>- the client's credentials are inadequate,</t>
<t>- the client provided an empty authorization identity string and
the server is unwilling or unable to associate an authorization
identity with the client's credentials,</t>
<t>- the client provided a non-empty authorization identity string
that is invalid per the syntax requirements of the applicable
application protocol specification,</t>
<t>- the client provided a non-empty authorization identity string
representing an identity that the client is not allowed to act as,
or</t>
<t>- the server is unwilling or unable to provide service to the
client for any other reason.</t>
<t>Otherwise the exchange is successful. When indicating a
successful outcome, additional data is not provided.</t>
</section>
<section title="Specification of EXTERNAL-TLS Mechanism">
<t>The EXTERNAL-TLS mechanism uses client credentials established by
the outer <xref target="RFC5246">TLS</xref> channel. Only the
inner-most TLS channel is intended. For example, if an
application opens up a TLS channel and starts SASL negotiation,
and if that communication happens to be sent over a TLS-based VPN,
the credentials for the TLS-based VPN is not considered.</t>
<t>The server MUST NOT advertise the EXTERNAL-TLS mechanism if the
client did not provided any supported form of client-side
authentication in the TLS channel, e.g., X.509 client certificate,
<xref target="RFC5081">OpenPGP client key</xref>,
or <xref target="RFC5054">SRP</xref>. The client MUST only
request the EXTERNAL-TLS if it wishes to re-use the TLS client
credentials for the SASL application.</t>
</section>
<section title="Making Authorization Decisions">
<t>The server may use any mechanism to make authorization decisions.
For illustration, we want to give some ideas on how this may work
in practice. This section is not normative.</t>
<t>Typically external channels will not use authentication
identities that can be used by the application protocol that uses
an instance of the SASL EXTERNAL-* mechanism. Thus, a mapping is
normally required. There may be mappings from the external
credential to a set of permitted identifiers, and a "default"
identifier can be provided in the mapping table if the client do
not specify a particular authorization identity.</t>
<t>For example, when mapping from X.509 credentials used in TLS
connections to simple usernames, a table stored on the server can
contain hex-encoded hashes of client X.509 certificates and a set
of usernames.</t>
<figure>
<artwork>
aef3a7835277a28da831005c2ae3b919e2076a62 simon jas admin
d2fc512490a15036460b5489401439d6da5407fa joe
</artwork>
</figure>
<t>The server could extract a successfully authenticated X.509
client certificate from the TLS stack, hash it and look it up in
the mapping table. Each of the usernames given would be permitted
authorization identities. The first username given may be the
default username if the client does not provide an authorization
identity.</t>
<t>When mapping from <xref target="RFC5081">OpenPGP credentials used
in TLS</xref>, the mapping table could consist of verified OpenPGP
fingerprints and a set of permitted usernames, such as the
following table.</t>
<figure>
<artwork>
0424D4EE81A0E3D119C6F835EDA21E94B565716F simon jas admin
A4D94E92B0986AB5EE9DCD755DE249965B0358A2 werner
90A79E2FC6F4AAB5B604974FE15DD857B15C37D1 nikos
</artwork>
</figure>
<t>When <xref target="RFC5054">SRP authentication with TLS</xref> is
used, the username provided may be the same as the application
username, and no mapping would be necessary.</t>
</section>
<section title="Examples">
<t>This section provides examples of EXTERNAL-TLS authentication
exchanges. The examples are intended to help the readers
understand the above text. The examples are not definitive. The
<xref target="RFC2244">Application Configuration Access Protocol
(ACAP)</xref> is used in the examples because ACAP sends the SASL
tokens without additional encoding.</t>
<t>The first example shows use of EXTERNAL-TLS with an empty
authorization identity. In this example, the initial response is
not sent in the client's request to initiate the authentication
exchange.</t>
<figure>
<artwork>
S: * ACAP (SASL "GSSAPI")
C: a001 STARTTLS
S: a001 OK "Begin TLS negotiation now"
<TLS negotiation, further commands are under TLS layer>
S: * ACAP (SASL "GSSAPI" "PLAIN" "EXTERNAL-TLS")
C: a002 AUTHENTICATE "EXTERNAL-TLS"
S: + ""
C: + ""
S: a002 OK "Authenticated"
</artwork>
</figure>
<t>The second example shows use of EXTERNAL-TLS with an
authorization identity of "simon". In this example, the initial
response is sent with the client's request to initiate the
authentication exchange. This saves a round-trip.</t>
<figure>
<artwork>
S: * ACAP (SASL "GSSAPI")
C: a001 STARTTLS
S: a001 OK "Begin TLS negotiation now"
<TLS negotiation, further commands are under TLS layer>
S: * ACAP (SASL "GSSAPI" "PLAIN" "EXTERNAL-TLS")
C: a002 AUTHENTICATE "EXTERNAL-TLS" {5+}
C: simon
S: a002 NO "Cannot assume requested authorization identity"
</artwork>
</figure>
<t>Note how the server rejects the authentication attempt with an
authorization-related error message. Presumably the client
credentials presented in the TLS session does not give the client
authority to assume the identity of "simon".</t>
</section>
<section title="IANA Considerations">
<t>The IANA is request to add to the SASL mechanisms registry the
following entry.</t>
<figure>
<artwork>
Subject: Registration of SASL mechanism family EXTERNAL-*
SASL family name (or prefix for the family): EXTERNAL-
Security considerations: [THIS-DOC]
Published specification (recommended): [THIS-DOC]
Person & email address to contact for further information:
Simon Josefsson <simon@josefsson.org>
Intended usage: COMMON
Owner/Change controller: Simon Josefsson <simon@josefsson.org>
</artwork>
</figure>
</section>
<section title="Security Considerations">
<t>The security of external channel is critical to the security of
this mechanism. It is important that the client authentication
that occurs in the outer security channel is cryptographically
bound to the confidentiality or integrity services that protects
the security channel.</t>
<t>The EXTERNAL-* mechanism family does not authenticate users
itself, it relies on implementation to perform the authentication
as part of the external channel. Care must be taken to ensure
that the client credential has been authenticated, rather than
just blindly accepted as part of a leap-of-faith setup.</t>
</section>
<section title="Acknowledgements">
<t>The EXTERNAL-* mechanism family, and significant amount of text
in this document, is based on the EXTERNAL mechanism in Appendix A
of <xref target="RFC4422">SASL</xref>.</t>
</section>
</middle>
<back>
<references title="Normative References">
<?rfc include="reference.RFC.3629.xml"?>
<?rfc include="reference.RFC.4422.xml"?>
<?rfc include="reference.RFC.5234.xml"?>
</references>
<references title="Informative References">
<?rfc include="reference.RFC.2244.xml"?>
<?rfc include="reference.RFC.4301.xml"?>
<?rfc include="reference.RFC.5246.xml"?>
<?rfc include="reference.RFC.5054.xml"?>
<?rfc include="reference.RFC.5081.xml"?>
</references>
</back>
</rfc>
| PAFTECH AB 2003-2026 | 2026-04-21 18:26:30 |