| draft-ietf-sasl-gs2-17.txt | draft-ietf-sasl-gs2-18.txt | |||
|---|---|---|---|---|
| Network Working Group S. Josefsson | Network Working Group S. Josefsson | |||
| Internet-Draft SJD AB | Internet-Draft SJD AB | |||
| Intended status: Standards Track N. Williams | Intended status: Standards Track N. Williams | |||
| Expires: March 13, 2010 Sun Microsystems | Expires: May 13, 2010 Sun Microsystems | |||
| September 9, 2009 | November 9, 2009 | |||
| Using GSS-API Mechanisms in SASL: The GS2 Mechanism Family | Using GSS-API Mechanisms in SASL: The GS2 Mechanism Family | |||
| draft-ietf-sasl-gs2-17 | draft-ietf-sasl-gs2-18 | |||
| Abstract | ||||
| This document describes how to use a Generic Security Service | ||||
| Application Program Interface (GSS-API) mechanism in the the Simple | ||||
| Authentication and Security Layer (SASL) framework. This is done by | ||||
| defining a new SASL mechanism family, called GS2. This mechanism | ||||
| family offers a number of improvements over the previous "SASL/ | ||||
| GSSAPI" mechanism: it is more general, uses fewer messages for the | ||||
| authentication phase in some cases, and supports negotiable use of | ||||
| channel binding. Only GSS-API mechanisms that support channel | ||||
| binding are supported. | ||||
| See <http://josefsson.org/sasl-gs2-*/> for more information. | ||||
| Status of this Memo | Status of this Memo | |||
| This Internet-Draft is submitted to IETF in full conformance with the | This Internet-Draft is submitted to IETF in full conformance with the | |||
| provisions of BCP 78 and BCP 79. This document may contain material | provisions of BCP 78 and BCP 79. | |||
| from IETF Documents or IETF Contributions published or made publicly | ||||
| available before November 10, 2008. The person(s) controlling the | ||||
| copyright in some of this material may not have granted the IETF | ||||
| Trust the right to allow modifications of such material outside the | ||||
| IETF Standards Process. Without obtaining an adequate license from | ||||
| the person(s) controlling the copyright in such materials, this | ||||
| document may not be modified outside the IETF Standards Process, and | ||||
| derivative works of it may not be created outside the IETF Standards | ||||
| Process, except to format it for publication as an RFC or to | ||||
| translate it into languages other than English. | ||||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF), its areas, and its working groups. Note that | Task Force (IETF), its areas, and its working groups. Note that | |||
| other groups may also distribute working documents as Internet- | other groups may also distribute working documents as Internet- | |||
| Drafts. | Drafts. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| The list of current Internet-Drafts can be accessed at | The list of current Internet-Drafts can be accessed at | |||
| http://www.ietf.org/ietf/1id-abstracts.txt. | http://www.ietf.org/ietf/1id-abstracts.txt. | |||
| The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
| http://www.ietf.org/shadow.html. | http://www.ietf.org/shadow.html. | |||
| This Internet-Draft will expire on March 13, 2010. | This Internet-Draft will expire on May 13, 2010. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2009 IETF Trust and the persons identified as the | Copyright (c) 2009 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents in effect on the date of | Provisions Relating to IETF Documents | |||
| publication of this document (http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
| and restrictions with respect to this document. | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | ||||
| Abstract | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | ||||
| This document describes how to use a Generic Security Service | described in the BSD License. | |||
| Application Program Interface (GSS-API) mechanism in the the Simple | ||||
| Authentication and Security Layer (SASL) framework. This is done by | ||||
| defining a new SASL mechanism family, called GS2. This mechanism | ||||
| family offers a number of improvements over the previous "SASL/ | ||||
| GSSAPI" mechanism: it is more general, uses fewer messages for the | ||||
| authentication phase in some cases, and supports negotiable use of | ||||
| channel binding. Only GSS-API mechanisms that support channel | ||||
| binding are supported. | ||||
| See <http://josefsson.org/sasl-gs2-*/> for more information. | This document may contain material from IETF Documents or IETF | |||
| Contributions published or made publicly available before November | ||||
| 10, 2008. The person(s) controlling the copyright in some of this | ||||
| material may not have granted the IETF Trust the right to allow | ||||
| modifications of such material outside the IETF Standards Process. | ||||
| Without obtaining an adequate license from the person(s) controlling | ||||
| the copyright in such materials, this document may not be modified | ||||
| outside the IETF Standards Process, and derivative works of it may | ||||
| not be created outside the IETF Standards Process, except to format | ||||
| it for publication as an RFC or to translate it into languages other | ||||
| than English. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Conventions used in this document . . . . . . . . . . . . . . 5 | 2. Conventions used in this document . . . . . . . . . . . . . . 4 | |||
| 3. Mechanism name . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3. Mechanism name . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 3.1. Generating SASL mechanism names from GSS-API OIDs . . . . 5 | 3.1. Generating SASL mechanism names from GSS-API OIDs . . . . 4 | |||
| 3.2. Computing mechanism names manually . . . . . . . . . . . . 6 | 3.2. Computing mechanism names manually . . . . . . . . . . . . 5 | |||
| 3.3. Examples . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 3.3. Examples . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3.4. Grandfathered mechanism names . . . . . . . . . . . . . . 7 | 3.4. Grandfathered mechanism names . . . . . . . . . . . . . . 6 | |||
| 4. SASL Authentication Exchange Message Format . . . . . . . . . 7 | 4. SASL Authentication Exchange Message Format . . . . . . . . . 6 | |||
| 5. Channel Bindings . . . . . . . . . . . . . . . . . . . . . . . 9 | 5. Channel Bindings . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 5.1. Content of GSS-CHANNEL-BINDINGS structure . . . . . . . . 10 | 5.1. Content of GSS-CHANNEL-BINDINGS structure . . . . . . . . 10 | |||
| 5.2. Default Channel Binding . . . . . . . . . . . . . . . . . 10 | 5.2. Default Channel Binding . . . . . . . . . . . . . . . . . 10 | |||
| 6. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 6. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 7. Authentication Conditions . . . . . . . . . . . . . . . . . . 12 | 7. Authentication Conditions . . . . . . . . . . . . . . . . . . 12 | |||
| 8. GSS-API Parameters . . . . . . . . . . . . . . . . . . . . . . 13 | 8. GSS-API Parameters . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 9. Naming . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 9. Naming . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 10. GSS_Inquire_SASLname_for_mech call . . . . . . . . . . . . . . 13 | 10. GSS_Inquire_SASLname_for_mech call . . . . . . . . . . . . . . 13 | |||
| 10.1. gss_inquire_saslname_for_mech . . . . . . . . . . . . . . 15 | 10.1. gss_inquire_saslname_for_mech . . . . . . . . . . . . . . 15 | |||
| 11. GSS_Inquire_mech_for_SASLname call . . . . . . . . . . . . . . 15 | 11. GSS_Inquire_mech_for_SASLname call . . . . . . . . . . . . . . 15 | |||
| 11.1. gss_inquire_mech_for_saslname . . . . . . . . . . . . . . 17 | 11.1. gss_inquire_mech_for_saslname . . . . . . . . . . . . . . 17 | |||
| 12. Security Layers . . . . . . . . . . . . . . . . . . . . . . . 17 | 12. Security Layers . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 13. Interoperability with the SASL GSSAPI mechanism . . . . . . . 17 | 13. Interoperability with the SASL GSSAPI mechanism . . . . . . . 17 | |||
| 13.1. The interoperability problem . . . . . . . . . . . . . . . 17 | 13.1. The interoperability problem . . . . . . . . . . . . . . . 17 | |||
| skipping to change at page 8, line 26 | skipping to change at page 8, line 26 | |||
| o The [RFC2743] section 3.1 initial context token header MUST be | o The [RFC2743] section 3.1 initial context token header MUST be | |||
| removed if present. If the header is not present, the client MUST | removed if present. If the header is not present, the client MUST | |||
| send a "gs2-nonstd-flag" flag (see below). On the server side | send a "gs2-nonstd-flag" flag (see below). On the server side | |||
| this header MUST be recomputed and restored prior to passing the | this header MUST be recomputed and restored prior to passing the | |||
| token to GSS_Accept_sec_context, except when the "gs2-nonstd-flag" | token to GSS_Accept_sec_context, except when the "gs2-nonstd-flag" | |||
| is sent. | is sent. | |||
| o A GS2 header MUST be prefixed to the resulting initial context | o A GS2 header MUST be prefixed to the resulting initial context | |||
| token. This header has the form "gs2-header" given below in ABNF | token. This header has the form "gs2-header" given below in ABNF | |||
| [RFC5234]. | [RFC5234]. | |||
| The figure below describes the permissible attributes, their use, and | ||||
| the format of their values. All attribute names are single US-ASCII | ||||
| letters and are case-sensitive. | ||||
| UTF8-1-safe = %x01-2B / %x2D-3C / %x3E-7F | UTF8-1-safe = %x01-2B / %x2D-3C / %x3E-7F | |||
| ;; As UTF8-1 in RFC 3629 except | ;; As UTF8-1 in RFC 3629 except | |||
| ;; NUL, "=", and ",". | ;; NUL, "=", and ",". | |||
| UTF8-2 = <as defined in RFC 3629 (STD 63)> | UTF8-2 = <as defined in RFC 3629 (STD 63)> | |||
| UTF8-3 = <as defined in RFC 3629 (STD 63)> | UTF8-3 = <as defined in RFC 3629 (STD 63)> | |||
| UTF8-4 = <as defined in RFC 3629 (STD 63)> | UTF8-4 = <as defined in RFC 3629 (STD 63)> | |||
| UTF8-char-safe = UTF8-1-safe / UTF8-2 / UTF8-3 / UTF8-4 | UTF8-char-safe = UTF8-1-safe / UTF8-2 / UTF8-3 / UTF8-4 | |||
| saslname = 1*(UTF8-char-safe / "=2C" / "=3D") | saslname = 1*(UTF8-char-safe / "=2C" / "=3D") | |||
| gs2-authzid = "a=" saslname | gs2-authzid = "a=" saslname | |||
| ;; GS2 has to transport an authzid since | ;; GS2 has to transport an authzid since | |||
| ;; the GSS-API has no equivalent | ;; the GSS-API has no equivalent | |||
| gs2-nonstd-flag = "F" | gs2-nonstd-flag = "F" | |||
| ;; "F" means the mechanism is not a | ;; "F" means the mechanism is not a | |||
| ;; standard GSS-API mechanism in that the | ;; standard GSS-API mechanism in that the | |||
| ;; RFC2743 section 3.1 header was missing | ;; RFC2743 section 3.1 header was missing | |||
| cb-name = 1*(ALPHA / DIGIT / "." / "-") | cb-name = 1*(ALPHA / DIGIT / "." / "-") | |||
| ;; See RFC 5056 section 7 | ;; See RFC 5056 section 7 | |||
| gs2-cb-flag = "p=" cb-name / "n" / "y" | gs2-cb-flag = ("p=" cb-name) / "n" / "y" | |||
| ;; GS2 channel binding (CB) flag | ;; GS2 channel binding (CB) flag | |||
| ;; "p" -> client supports and used CB | ;; "p" -> client supports and used CB | |||
| ;; "n" -> client does not support CB | ;; "n" -> client does not support CB | |||
| ;; "y" -> client supports CB, thinks the server | ;; "y" -> client supports CB, thinks the server | |||
| ;; does not | ;; does not | |||
| gs2-header = [gs2-nonstd-flag ","] gs2-cb-flag "," [gs2-authzid] "," | gs2-header = [gs2-nonstd-flag ","] gs2-cb-flag "," [gs2-authzid] "," | |||
| ;; The GS2 header is gs2-header. | ;; The GS2 header is gs2-header. | |||
| When the "gs2-nonstd-flag" flag is present, the client did not find/ | When the "gs2-nonstd-flag" flag is present, the client did not find/ | |||
| remove a [RFC2743] section 3.1 token header from the initial token | remove a [RFC2743] section 3.1 token header from the initial token | |||
| skipping to change at page 13, line 28 | skipping to change at page 14, line 10 | |||
| GSS_Accept_sec_context) to requested authzid failed. | GSS_Accept_sec_context) to requested authzid failed. | |||
| o If the client is not authorized to the requested authzid or an | o If the client is not authorized to the requested authzid or an | |||
| authzid could not be derived from the client's initiator principal | authzid could not be derived from the client's initiator principal | |||
| name. | name. | |||
| 8. GSS-API Parameters | 8. GSS-API Parameters | |||
| GS2 does not use any GSS-API per-message tokens. Therefore the | GS2 does not use any GSS-API per-message tokens. Therefore the | |||
| setting of req_flags related to per-message tokens is irrelevant. | setting of req_flags related to per-message tokens is irrelevant. | |||
| The mutual_req_flag MUST be set. If channel binding is used then the | ||||
| client MUST check that the corresponding ret_flag is set when the | ||||
| context is fully establish, else authentication MUST fail. | ||||
| Use or non-use of deleg_req_flag and anon_req_flag is an | ||||
| implementation-specific detail. SASL and GS2 implementors are | ||||
| encouraged to provide programming interfaces by which clients may | ||||
| choose to delegate credentials and by which servers may receive them. | ||||
| SASL and GS2 implementors are encouraged to provide programming | ||||
| interfaces which provide a good mapping of GSS-API naming options. | ||||
| 9. Naming | 9. Naming | |||
| There's no requirement that any particular GSS-API name-types be | There's no requirement that any particular GSS-API name-types be | |||
| used. However, typically SASL servers will have host-based acceptor | used. However, typically SASL servers will have host-based acceptor | |||
| principal names (see [RFC2743] section 4.1) and clients will | principal names (see [RFC2743] section 4.1) and clients will | |||
| typically have username initiator principal names (see [RFC2743] | typically have username initiator principal names (see [RFC2743] | |||
| section 4.2). When a host-based acceptor principal name is used | section 4.2). When a host-based acceptor principal name is used | |||
| ("service@hostname"), "service" is the service name specified in the | ("service@hostname"), "service" is the service name specified in the | |||
| protocol's profile, and "hostname" is the fully qualified host name | protocol's profile, and "hostname" is the fully qualified host name | |||
| of the server. | of the server. | |||
| skipping to change at page 21, line 25 | skipping to change at page 22, line 25 | |||
| 17. Acknowledgements | 17. Acknowledgements | |||
| The history of GS2 can be traced to the "GSSAPI" mechanism originally | The history of GS2 can be traced to the "GSSAPI" mechanism originally | |||
| specified by RFC2222. This document was derived from | specified by RFC2222. This document was derived from | |||
| draft-ietf-sasl-gssapi-02 which was prepared by Alexey Melnikov with | draft-ietf-sasl-gssapi-02 which was prepared by Alexey Melnikov with | |||
| significant contributions from John G. Myers, although the majority | significant contributions from John G. Myers, although the majority | |||
| of this document has been rewritten by the current authors. | of this document has been rewritten by the current authors. | |||
| Contributions of many members of the SASL mailing list are gratefully | Contributions of many members of the SASL mailing list are gratefully | |||
| acknowledged. In particular, ideas and feedback from Sam Hartman, | acknowledged. In particular, ideas and feedback from Pasi Eronen, | |||
| Jeffrey Hutzelman, Alexey Melnikov, and Tom Yu improved the document | Sam Hartman, Jeffrey Hutzelman, Alexey Melnikov, and Tom Yu improved | |||
| and the protocol. | the document and the protocol. | |||
| 18. References | 18. References | |||
| 18.1. Normative References | 18.1. Normative References | |||
| [FIPS.180-1.1995] | [FIPS.180-1.1995] | |||
| National Institute of Standards and Technology, "Secure | National Institute of Standards and Technology, "Secure | |||
| Hash Standard", FIPS PUB 180-1, April 1995, | Hash Standard", FIPS PUB 180-1, April 1995, | |||
| <http://www.itl.nist.gov/fipspubs/fip180-1.htm>. | <http://www.itl.nist.gov/fipspubs/fip180-1.htm>. | |||
| skipping to change at page 23, line 20 | skipping to change at page 24, line 20 | |||
| RFC 4752, November 2006. | RFC 4752, November 2006. | |||
| [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | |||
| (TLS) Protocol Version 1.2", RFC 5246, August 2008. | (TLS) Protocol Version 1.2", RFC 5246, August 2008. | |||
| [RFC5587] Williams, N., "Extended Generic Security Service Mechanism | [RFC5587] Williams, N., "Extended Generic Security Service Mechanism | |||
| Inquiry APIs", RFC 5587, July 2009. | Inquiry APIs", RFC 5587, July 2009. | |||
| [I-D.ietf-sasl-scram] | [I-D.ietf-sasl-scram] | |||
| Menon-Sen, A., Melnikov, A., Newman, C., and N. Williams, | Menon-Sen, A., Melnikov, A., Newman, C., and N. Williams, | |||
| "Salted Challenge Response (SCRAM) SASL Mechanism", | "Salted Challenge Response (SCRAM) SASL and GSS-API | |||
| draft-ietf-sasl-scram-05 (work in progress), August 2009. | Mechanism", draft-ietf-sasl-scram-10 (work in progress), | |||
| October 2009. | ||||
| [I-D.altman-tls-channel-bindings] | [I-D.altman-tls-channel-bindings] | |||
| Altman, J., Williams, N., and L. Zhu, "Channel Bindings | Altman, J., Williams, N., and L. Zhu, "Channel Bindings | |||
| for TLS", draft-altman-tls-channel-bindings-06 (work in | for TLS", draft-altman-tls-channel-bindings-07 (work in | |||
| progress), August 2009. | progress), October 2009. | |||
| [mitm] Asokan, N., Niemi, V., and K. Nyberg, "Man-in-the-Middle | [mitm] Asokan, N., Niemi, V., and K. Nyberg, "Man-in-the-Middle | |||
| in Tunneled Authentication", | in Tunneled Authentication", | |||
| WWW http://www.saunalahti.fi/~asokan/research/mitm.html. | WWW http://www.saunalahti.fi/~asokan/research/mitm.html. | |||
| Authors' Addresses | Authors' Addresses | |||
| Simon Josefsson | Simon Josefsson | |||
| SJD AB | SJD AB | |||
| Hagagatan 24 | Hagagatan 24 | |||
| End of changes. 15 change blocks. | ||||
| 50 lines changed or deleted | 71 lines changed or added | |||
This html diff was produced by rfcdiff 1.29, available from http://www.levkowetz.com/ietf/tools/rfcdiff/ | ||||