draft-ietf-tls-rfc4366-bis-12.txt | rfc6066.txt | |||
---|---|---|---|---|
TLS Working Group Donald Eastlake 3rd | Internet Engineering Task Force (IETF) D. Eastlake 3rd | |||
INTERNET-DRAFT Stellar Switches | Request for Comments: 6066 Huawei | |||
Obsoletes: 4366 | Obsoletes: 4366 January 2011 | |||
Intended status: Proposed Standard | Category: Standards Track | |||
Expires: March 19, 2011 September 20, 2010 | ISSN: 2070-1721 | |||
Transport Layer Security (TLS) Extensions: Extension Definitions | Transport Layer Security (TLS) Extensions: Extension Definitions | |||
<draft-ietf-tls-rfc4366-bis-12.txt> | ||||
Abstract | Abstract | |||
This document provides specifications for existing TLS extensions. It | This document provides specifications for existing TLS extensions. | |||
is a companion document for RFC 5246, "The Transport Layer Security | It is a companion document for RFC 5246, "The Transport Layer | |||
(TLS) Protocol Version 1.2". The extensions specified are | Security (TLS) Protocol Version 1.2". The extensions specified are | |||
server_name, max_fragment_length, client_certificate_url, | server_name, max_fragment_length, client_certificate_url, | |||
trusted_ca_keys, truncated_hmac, and status_request. | trusted_ca_keys, truncated_hmac, and status_request. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. 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. | ||||
Distribution of this document is unlimited. Comments should be sent | ||||
to the TLS working group mailing list <tls@ietf.org>. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF), its areas, and its working groups. Note that | ||||
other groups may also distribute working documents as Internet- | ||||
Drafts. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 5741. | ||||
The list of current Internet-Drafts can be accessed at | Information about the current status of this document, any errata, | |||
http://www.ietf.org/1id-abstracts.html | and how to provide feedback on it may be obtained at | |||
http://www.rfc-editor.org/info/rfc6066. | ||||
The list of Internet-Draft Shadow Directories can be accessed at | Copyright Notice | |||
http://www.ietf.org/shadow.html | ||||
INTERNET-DRAFT TLS Extension Definitions | Copyright (c) 2011 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | ||||
Acknowledgements | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | ||||
(http://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 Simplified BSD License text as described in Section 4.e of | ||||
the Trust Legal Provisions and are provided without warranty as | ||||
described in the Simplified BSD License. | ||||
This draft is based on material from RFC 4366 for which the authors | This document may contain material from IETF Documents or IETF | |||
were S. Blake-Wilson, M. Nystron, D. Hopwood, J. Mikkelsen, and T. | Contributions published or made publicly available before November | |||
Wright. Other contributors include Joseph Salowey, and Alexey | 10, 2008. The person(s) controlling the copyright in some of this | |||
Melnikov, Peter Saint-Andre, and Adrian Farrel. | 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............................................3 | 1. Introduction ....................................................3 | |||
1.1 Specific Extensions Covered............................3 | 1.1. Specific Extensions Covered ................................3 | |||
1.2 Conventions Used in This Document......................5 | 1.2. Conventions Used in This Document ..........................5 | |||
2. Extensions to the Handshake Protocol ............................5 | ||||
2. Extensions to the Handshake Protocol....................6 | 3. Server Name Indication ..........................................6 | |||
3. Server Name Indication..................................7 | 4. Maximum Fragment Length Negotiation .............................8 | |||
4. Maximum Fragment Length Negotiation.....................9 | 5. Client Certificate URLs .........................................9 | |||
5. Client Certificate URLs................................11 | 6. Trusted CA Indication ..........................................12 | |||
6. Trusted CA Indication..................................14 | 7. Truncated HMAC .................................................13 | |||
7. Truncated HMAC.........................................16 | 8. Certificate Status Request .....................................14 | |||
8. Certificate Status Request.............................17 | 9. Error Alerts ...................................................16 | |||
9. Error Alerts...........................................19 | 10. IANA Considerations ...........................................17 | |||
10.1. pkipath MIME Type Registration ...........................17 | ||||
10. IANA Considerations...................................20 | 10.2. Reference for TLS Alerts, TLS HandshakeTypes, and | |||
10.1 pkipath MIME Type Registration.......................20 | ExtensionTypes ...........................................19 | |||
11. Security Considerations .......................................19 | ||||
11. Security Considerations...............................22 | 11.1. Security Considerations for server_name ..................19 | |||
11.1 Security Considerations for server_name..............22 | 11.2. Security Considerations for max_fragment_length ..........20 | |||
11.2 Security Considerations for max_fragment_length......22 | 11.3. Security Considerations for client_certificate_url .......20 | |||
11.3 Security Considerations for client_certificate_url...22 | 11.4. Security Considerations for trusted_ca_keys ..............21 | |||
11.4 Security Considerations for trusted_ca_keys..........24 | 11.5. Security Considerations for truncated_hmac ...............21 | |||
11.5 Security Considerations for truncated_hmac...........24 | 11.6. Security Considerations for status_request ...............22 | |||
11.6 Security Considerations for status_request...........24 | 12. Normative References ..........................................22 | |||
13. Informative References ........................................23 | ||||
12. Normative References..................................25 | Appendix A. Changes from RFC 4366 .................................24 | |||
13. Informative References................................25 | Appendix B. Acknowledgements ......................................25 | |||
Annex A: Changes from RFC 4366............................27 | ||||
INTERNET-DRAFT TLS Extension Definitions | ||||
1. Introduction | 1. Introduction | |||
The TLS (Transport Layer Security) Protocol Version 1.2 is specified | The Transport Layer Security (TLS) Protocol Version 1.2 is specified | |||
in [RFC5246]. That specification includes the framework for | in [RFC5246]. That specification includes the framework for | |||
extensions to TLS, considerations in designing such extensions (see | extensions to TLS, considerations in designing such extensions (see | |||
Section 7.4.1.4 of [RFC5246]), and IANA Considerations for the | Section 7.4.1.4 of [RFC5246]), and IANA Considerations for the | |||
allocation of new extension code points; however, it does not specify | allocation of new extension code points; however, it does not specify | |||
any particular extensions other than Signature Algorithms (see | any particular extensions other than Signature Algorithms (see | |||
Section 7.4.1.4.1 of [RFC5246]). | Section 7.4.1.4.1 of [RFC5246]). | |||
This document provides the specifications for existing TLS | This document provides the specifications for existing TLS | |||
extensions. It is, for the most part, the adaptation and editing of | extensions. It is, for the most part, the adaptation and editing of | |||
material from RFC 4366, which covered TLS extensions for TLS 1.0 (RFC | material from RFC 4366, which covered TLS extensions for TLS 1.0 (RFC | |||
2246) and TLS 1.1 (RFC 4346). | 2246) and TLS 1.1 (RFC 4346). | |||
1.1 Specific Extensions Covered | 1.1. Specific Extensions Covered | |||
The extensions described here focus on extending the functionality | The extensions described here focus on extending the functionality | |||
provided by the TLS protocol message formats. Other issues, such as | provided by the TLS protocol message formats. Other issues, such as | |||
the addition of new cipher suites, are deferred. | the addition of new cipher suites, are deferred. | |||
The extension types defined in this document are: | The extension types defined in this document are: | |||
enum { | enum { | |||
server_name(0), max_fragment_length(1), | server_name(0), max_fragment_length(1), | |||
client_certificate_url(2), trusted_ca_keys(3), | client_certificate_url(2), trusted_ca_keys(3), | |||
truncated_hmac(4), status_request(5), (65535) | truncated_hmac(4), status_request(5), (65535) | |||
} ExtensionType; | } ExtensionType; | |||
Specifically, the extensions described in this document: | Specifically, the extensions described in this document: | |||
- Allow TLS clients to provide to the TLS server the name of the | - Allow TLS clients to provide to the TLS server the name of the | |||
server they are contacting. This functionality is desirable in | server they are contacting. This functionality is desirable in | |||
order to facilitate secure connections to servers that host | order to facilitate secure connections to servers that host | |||
multiple 'virtual' servers at a single underlying network address. | multiple 'virtual' servers at a single underlying network address. | |||
- Allow TLS clients and servers to negotiate the maximum fragment | - Allow TLS clients and servers to negotiate the maximum fragment | |||
length to be sent. This functionality is desirable as a result of | length to be sent. This functionality is desirable as a result of | |||
memory constraints among some clients, and bandwidth constraints | memory constraints among some clients, and bandwidth constraints | |||
among some access networks. | among some access networks. | |||
- Allow TLS clients and servers to negotiate the use of client | - Allow TLS clients and servers to negotiate the use of client | |||
certificate URLs. This functionality is desirable in order to | certificate URLs. This functionality is desirable in order to | |||
conserve memory on constrained clients. | conserve memory on constrained clients. | |||
- Allow TLS clients to indicate to TLS servers which CA root keys | - Allow TLS clients to indicate to TLS servers which certification | |||
they possess. This functionality is desirable in order to prevent | authority (CA) root keys they possess. This functionality is | |||
multiple handshake failures involving TLS clients that are only | desirable in order to prevent multiple handshake failures | |||
involving TLS clients that are only able to store a small number | ||||
INTERNET-DRAFT TLS Extension Definitions | of CA root keys due to memory limitations. | |||
able to store a small number of CA root keys due to memory | ||||
limitations. | ||||
- Allow TLS clients and servers to negotiate the use of truncated | - Allow TLS clients and servers to negotiate the use of truncated | |||
MACs. This functionality is desirable in order to conserve | Message Authentication Codes (MACs). This functionality is | |||
bandwidth in constrained access networks. | desirable in order to conserve bandwidth in constrained access | |||
networks. | ||||
- Allow TLS clients and servers to negotiate that the server sends | - Allow TLS clients and servers to negotiate that the server sends | |||
the client certificate status information (e.g., an Online | the client certificate status information (e.g., an Online | |||
Certificate Status Protocol (OCSP) [RFC2560] response) during a | Certificate Status Protocol (OCSP) [RFC2560] response) during a | |||
TLS handshake. This functionality is desirable in order to avoid | TLS handshake. This functionality is desirable in order to avoid | |||
sending a Certificate Revocation List (CRL) over a constrained | sending a Certificate Revocation List (CRL) over a constrained | |||
access network and therefore save bandwidth. | access network and therefore saving bandwidth. | |||
TLS clients and servers may use the extensions described in this | TLS clients and servers may use the extensions described in this | |||
document. The extensions are designed to be backwards compatible, | document. The extensions are designed to be backwards compatible, | |||
meaning that TLS clients that support the extensions can talk to TLS | meaning that TLS clients that support the extensions can talk to TLS | |||
servers that do not support the extensions, and vice versa. | servers that do not support the extensions, and vice versa. | |||
Note that any messages associated with these extensions that are sent | Note that any messages associated with these extensions that are sent | |||
during the TLS handshake MUST be included in the hash calculations | during the TLS handshake MUST be included in the hash calculations | |||
involved in "Finished" messages. | involved in "Finished" messages. | |||
Note also that all the extensions defined in this document are | Note also that all the extensions defined in this document are | |||
relevant only when a session is initiated. A client that requests | relevant only when a session is initiated. A client that requests | |||
session resumption does not in general know whether the server will | session resumption does not in general know whether the server will | |||
accept this request, and therefore it SHOULD send the same extensions | accept this request, and therefore it SHOULD send the same extensions | |||
as it would send if it were not attempting resumption. When a client | as it would send if it were not attempting resumption. When a client | |||
includes one or more of the defined extension types in an extended | includes one or more of the defined extension types in an extended | |||
client hello while requesting session resumption: | client hello while requesting session resumption: | |||
- The server name indication extension MAY be used by the server | - The server name indication extension MAY be used by the server | |||
when deciding whether or not to resume a session as described | when deciding whether or not to resume a session as described in | |||
in section 3. | Section 3. | |||
- If the resumption request is denied, the use of the extensions | ||||
is negotiated as normal. | ||||
- If, on the other hand, the older session is resumed, then the | - If the resumption request is denied, the use of the extensions is | |||
server MUST ignore the extensions and send a server hello | negotiated as normal. | |||
containing none of the extension types. In this case, the | ||||
functionality of these extensions negotiated during the | ||||
original session initiation is applied to the resumed session. | ||||
INTERNET-DRAFT TLS Extension Definitions | - If, on the other hand, the older session is resumed, then the | |||
server MUST ignore the extensions and send a server hello | ||||
containing none of the extension types. In this case, the | ||||
functionality of these extensions negotiated during the original | ||||
session initiation is applied to the resumed session. | ||||
1.2 Conventions Used in This Document | 1.2. Conventions Used in This Document | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
[RFC2119]. | [RFC2119]. | |||
INTERNET-DRAFT TLS Extension Definitions | 2. Extensions to the Handshake Protocol | |||
2. Extensions to the Handshake Protocol | ||||
This document specifies the use of two new handshake messages, | This document specifies the use of two new handshake messages, | |||
"CertificateURL" and "CertificateStatus". These messages are | "CertificateURL" and "CertificateStatus". These messages are | |||
described in Section 5 and Section 8, respectively. The new | described in Sections 5 and 8, respectively. The new handshake | |||
handshake message structure therefore becomes: | message structure therefore becomes: | |||
enum { | ||||
hello_request(0), client_hello(1), server_hello(2), | ||||
certificate(11), server_key_exchange (12), | ||||
certificate_request(13), server_hello_done(14), | ||||
certificate_verify(15), client_key_exchange(16), | ||||
finished(20), certificate_url(21), certificate_status(22), | ||||
(255) | ||||
} HandshakeType; | ||||
struct { | enum { | |||
HandshakeType msg_type; /* handshake type */ | hello_request(0), client_hello(1), server_hello(2), | |||
uint24 length; /* bytes in message */ | certificate(11), server_key_exchange (12), | |||
select (HandshakeType) { | certificate_request(13), server_hello_done(14), | |||
case hello_request: HelloRequest; | certificate_verify(15), client_key_exchange(16), | |||
case client_hello: ClientHello; | finished(20), certificate_url(21), certificate_status(22), | |||
case server_hello: ServerHello; | (255) | |||
case certificate: Certificate; | } HandshakeType; | |||
case server_key_exchange: ServerKeyExchange; | ||||
case certificate_request: CertificateRequest; | ||||
case server_hello_done: ServerHelloDone; | ||||
case certificate_verify: CertificateVerify; | ||||
case client_key_exchange: ClientKeyExchange; | ||||
case finished: Finished; | ||||
case certificate_url: CertificateURL; | ||||
case certificate_status: CertificateStatus; | ||||
} body; | ||||
} Handshake; | ||||
INTERNET-DRAFT TLS Extension Definitions | struct { | |||
HandshakeType msg_type; /* handshake type */ | ||||
uint24 length; /* bytes in message */ | ||||
select (HandshakeType) { | ||||
case hello_request: HelloRequest; | ||||
case client_hello: ClientHello; | ||||
case server_hello: ServerHello; | ||||
case certificate: Certificate; | ||||
case server_key_exchange: ServerKeyExchange; | ||||
case certificate_request: CertificateRequest; | ||||
case server_hello_done: ServerHelloDone; | ||||
case certificate_verify: CertificateVerify; | ||||
case client_key_exchange: ClientKeyExchange; | ||||
case finished: Finished; | ||||
case certificate_url: CertificateURL; | ||||
case certificate_status: CertificateStatus; | ||||
} body; | ||||
} Handshake; | ||||
3. Server Name Indication | 3. Server Name Indication | |||
TLS does not provide a mechanism for a client to tell a server the | TLS does not provide a mechanism for a client to tell a server the | |||
name of the server it is contacting. It may be desirable for clients | name of the server it is contacting. It may be desirable for clients | |||
to provide this information to facilitate secure connections to | to provide this information to facilitate secure connections to | |||
servers that host multiple 'virtual' servers at a single underlying | servers that host multiple 'virtual' servers at a single underlying | |||
network address. | network address. | |||
In order to provide any of the server names, clients MAY include an | In order to provide any of the server names, clients MAY include an | |||
extension of type "server_name" in the (extended) client hello. The | extension of type "server_name" in the (extended) client hello. The | |||
"extension_data" field of this extension SHALL contain | "extension_data" field of this extension SHALL contain | |||
"ServerNameList" where: | "ServerNameList" where: | |||
struct { | struct { | |||
NameType name_type; | NameType name_type; | |||
select (name_type) { | select (name_type) { | |||
case host_name: HostName; | case host_name: HostName; | |||
} name; | } name; | |||
} ServerName; | } ServerName; | |||
skipping to change at page 7, line 41 | skipping to change at page 6, line 39 | |||
opaque HostName<1..2^16-1>; | opaque HostName<1..2^16-1>; | |||
struct { | struct { | |||
ServerName server_name_list<1..2^16-1> | ServerName server_name_list<1..2^16-1> | |||
} ServerNameList; | } ServerNameList; | |||
The ServerNameList MUST NOT contain more than one name of the same | The ServerNameList MUST NOT contain more than one name of the same | |||
name_type. If the server understood the ClientHello extension but | name_type. If the server understood the ClientHello extension but | |||
does not recognize the server name, the server SHOULD take one of two | does not recognize the server name, the server SHOULD take one of two | |||
actions: either abort the handshake by sending a fatal-level | actions: either abort the handshake by sending a fatal-level | |||
unrecognized_name(112) alert, or continue the handshake. It is NOT | unrecognized_name(112) alert or continue the handshake. It is NOT | |||
RECOMMENDED to send a warning-level unrecognized_name(112) alert, | RECOMMENDED to send a warning-level unrecognized_name(112) alert, | |||
because the client's behavior in response to warning-level alerts is | because the client's behavior in response to warning-level alerts is | |||
unpredictable. If there is a mismatch between the server name used by | unpredictable. If there is a mismatch between the server name used | |||
the client application and the server name of the credential chosen | by the client application and the server name of the credential | |||
by the server, this mismatch will become apparent when the client | chosen by the server, this mismatch will become apparent when the | |||
application performs the server endpoint identification, at which | client application performs the server endpoint identification, at | |||
point the client application will have to decide whether to proceed | which point the client application will have to decide whether to | |||
with the communication. TLS implementations are encouraged to make | proceed with the communication. TLS implementations are encouraged | |||
information available to application callers about warning-level | to make information available to application callers about warning- | |||
alerts that were received or sent during a TLS handshake. Such | level alerts that were received or sent during a TLS handshake. Such | |||
information can be useful for diagnostic purposes.. | information can be useful for diagnostic purposes. | |||
Note: Earlier versions of this specification permitted multiple | Note: Earlier versions of this specification permitted multiple | |||
names of the same name_type. In practice, current client | names of the same name_type. In practice, current client | |||
implementations only send one name, and the client cannot | implementations only send one name, and the client cannot | |||
necessarily find out which name the server selected. Multiple | ||||
INTERNET-DRAFT TLS Extension Definitions | ||||
necessarily find out which name the server selected. Multiple | ||||
names of the same name_type are therefore now prohibited. | names of the same name_type are therefore now prohibited. | |||
Currently, the only server names supported are DNS hostnames; | Currently, the only server names supported are DNS hostnames; | |||
however, this does not imply any dependency of TLS on DNS, and other | however, this does not imply any dependency of TLS on DNS, and other | |||
name types may be added in the future (by an RFC that updates this | name types may be added in the future (by an RFC that updates this | |||
document). The data structure associated with the host_name NameType | document). The data structure associated with the host_name NameType | |||
is a variable-length vector that begins with a 16-bit length. For | is a variable-length vector that begins with a 16-bit length. For | |||
backward compatibility, all future data structures associated with | backward compatibility, all future data structures associated with | |||
new NameTypes MUST begin with a 16-bit length field. TLS MAY treat | new NameTypes MUST begin with a 16-bit length field. TLS MAY treat | |||
provided server names as opaque data and pass the names and types to | provided server names as opaque data and pass the names and types to | |||
the application. | the application. | |||
"HostName" contains the fully qualified DNS hostname of the server, | "HostName" contains the fully qualified DNS hostname of the server, | |||
as understood by the client. The hostname is represented as a byte | as understood by the client. The hostname is represented as a byte | |||
string using ASCII encoding without a trailing dot. This allows the | string using ASCII encoding without a trailing dot. This allows the | |||
support of internationalized domain names through the use of A-labels | support of internationalized domain names through the use of A-labels | |||
defined in [RFC5890]. | defined in [RFC5890]. DNS hostnames are case-insensitive. The | |||
algorithm to compare hostnames is described in [RFC5890], Section | ||||
2.3.2.4. | ||||
Literal IPv4 and IPv6 addresses are not permitted in "HostName". | Literal IPv4 and IPv6 addresses are not permitted in "HostName". | |||
It is RECOMMENDED that clients include an extension of type | It is RECOMMENDED that clients include an extension of type | |||
"server_name" in the client hello whenever they locate a server by a | "server_name" in the client hello whenever they locate a server by a | |||
supported name type. | supported name type. | |||
A server that receives a client hello containing the "server_name" | A server that receives a client hello containing the "server_name" | |||
extension MAY use the information contained in the extension to guide | extension MAY use the information contained in the extension to guide | |||
its selection of an appropriate certificate to return to the client, | its selection of an appropriate certificate to return to the client, | |||
and/or other aspects of security policy. In this event, the server | and/or other aspects of security policy. In this event, the server | |||
SHALL include an extension of type "server_name" in the (extended) | SHALL include an extension of type "server_name" in the (extended) | |||
server hello. The "extension_data" field of this extension SHALL be | server hello. The "extension_data" field of this extension SHALL be | |||
empty. | empty. | |||
When the server is deciding whether or not to accept a request to | When the server is deciding whether or not to accept a request to | |||
resume a session, the contents of a server_name extension MAY be used | resume a session, the contents of a server_name extension MAY be used | |||
in the lookup of the session in the session cache. The client SHOULD | in the lookup of the session in the session cache. The client SHOULD | |||
include the same server_name extension in session resumption request | include the same server_name extension in the session resumption | |||
as it did in the full handshake that established the session. A | request as it did in the full handshake that established the session. | |||
server that implements this extension MUST NOT accept the request to | A server that implements this extension MUST NOT accept the request | |||
resume the session if the server_name extension contains a different | to resume the session if the server_name extension contains a | |||
name. Instead, it proceeds with a full handshake to establish a new | different name. Instead, it proceeds with a full handshake to | |||
session. When resuming a session, the server MUST NOT include a | establish a new session. When resuming a session, the server MUST | |||
server_name extension in the server hello. | NOT include a server_name extension in the server hello. | |||
If an application negotiates a server name using an application | If an application negotiates a server name using an application | |||
protocol and then upgrades to TLS, and if a server_name extension is | protocol and then upgrades to TLS, and if a server_name extension is | |||
sent, then the extension SHOULD contain the same name that was | sent, then the extension SHOULD contain the same name that was | |||
negotiated in the application protocol. If the server_name is | negotiated in the application protocol. If the server_name is | |||
established in the TLS session handshake, the client SHOULD NOT | established in the TLS session handshake, the client SHOULD NOT | |||
attempt to request a different server name at the application layer. | attempt to request a different server name at the application layer. | |||
INTERNET-DRAFT TLS Extension Definitions | 4. Maximum Fragment Length Negotiation | |||
4. Maximum Fragment Length Negotiation | ||||
Without this extension, TLS specifies a fixed maximum plaintext | Without this extension, TLS specifies a fixed maximum plaintext | |||
fragment length of 2^14 bytes. It may be desirable for constrained | fragment length of 2^14 bytes. It may be desirable for constrained | |||
clients to negotiate a smaller maximum fragment length due to memory | clients to negotiate a smaller maximum fragment length due to memory | |||
limitations or bandwidth limitations. | limitations or bandwidth limitations. | |||
In order to negotiate smaller maximum fragment lengths, clients MAY | In order to negotiate smaller maximum fragment lengths, clients MAY | |||
include an extension of type "max_fragment_length" in the (extended) | include an extension of type "max_fragment_length" in the (extended) | |||
client hello. The "extension_data" field of this extension SHALL | client hello. The "extension_data" field of this extension SHALL | |||
contain: | contain: | |||
enum{ | enum{ | |||
2^9(1), 2^10(2), 2^11(3), 2^12(4), (255) | 2^9(1), 2^10(2), 2^11(3), 2^12(4), (255) | |||
} MaxFragmentLength; | } MaxFragmentLength; | |||
whose value is the desired maximum fragment length. The allowed | whose value is the desired maximum fragment length. The allowed | |||
values for this field are: 2^9, 2^10, 2^11, and 2^12. | values for this field are: 2^9, 2^10, 2^11, and 2^12. | |||
Servers that receive an extended client hello containing a | Servers that receive an extended client hello containing a | |||
"max_fragment_length" extension MAY accept the requested maximum | "max_fragment_length" extension MAY accept the requested maximum | |||
fragment length by including an extension of type | fragment length by including an extension of type | |||
"max_fragment_length" in the (extended) server hello. The | "max_fragment_length" in the (extended) server hello. The | |||
"extension_data" field of this extension SHALL contain a | "extension_data" field of this extension SHALL contain a | |||
"MaxFragmentLength" whose value is the same as the requested maximum | "MaxFragmentLength" whose value is the same as the requested maximum | |||
fragment length. | fragment length. | |||
If a server receives a maximum fragment length negotiation request | If a server receives a maximum fragment length negotiation request | |||
for a value other than the allowed values, it MUST abort the | for a value other than the allowed values, it MUST abort the | |||
handshake with an "illegal_parameter" alert. Similarly, if a client | handshake with an "illegal_parameter" alert. Similarly, if a client | |||
receives a maximum fragment length negotiation response that differs | receives a maximum fragment length negotiation response that differs | |||
from the length it requested, it MUST also abort the handshake with | from the length it requested, it MUST also abort the handshake with | |||
an "illegal_parameter" alert. | an "illegal_parameter" alert. | |||
Once a maximum fragment length other than 2^14 has been successfully | Once a maximum fragment length other than 2^14 has been successfully | |||
negotiated, the client and server MUST immediately begin fragmenting | negotiated, the client and server MUST immediately begin fragmenting | |||
messages (including handshake messages), to ensure that no fragment | messages (including handshake messages) to ensure that no fragment | |||
larger than the negotiated length is sent. Note that TLS already | larger than the negotiated length is sent. Note that TLS already | |||
requires clients and servers to support fragmentation of handshake | requires clients and servers to support fragmentation of handshake | |||
messages. | messages. | |||
The negotiated length applies for the duration of the session | The negotiated length applies for the duration of the session | |||
including session resumptions. | including session resumptions. | |||
The negotiated length limits the input that the record layer may | The negotiated length limits the input that the record layer may | |||
process without fragmentation (that is, the maximum value of | process without fragmentation (that is, the maximum value of | |||
TLSPlaintext.length; see [RFC5246], Section 6.2.1). Note that the | TLSPlaintext.length; see [RFC5246], Section 6.2.1). Note that the | |||
output of the record layer may be larger. For example, if the | output of the record layer may be larger. For example, if the | |||
negotiated length is 2^9=512, then for currently defined cipher | negotiated length is 2^9=512, then, when using currently defined | |||
suites (those defined in [RFC5246] and [RFC2712]), and when null | cipher suites (those defined in [RFC5246] and [RFC2712]) and null | |||
compression, the record-layer output can be at most 805 bytes: 5 | ||||
INTERNET-DRAFT TLS Extension Definitions | bytes of headers, 512 bytes of application data, 256 bytes of | |||
padding, and 32 bytes of MAC. This means that in this event a TLS | ||||
compression is used, the record layer output can be at most 805 | record-layer peer receiving a TLS record-layer message larger than | |||
bytes: 5 bytes of headers, 512 bytes of application data, 256 bytes | ||||
of padding, and 32 bytes of MAC. This means that in this event a TLS | ||||
record layer peer receiving a TLS record layer message larger than | ||||
805 bytes MUST discard the message and send a "record_overflow" | 805 bytes MUST discard the message and send a "record_overflow" | |||
alert, without decrypting the message. When this extension is used | alert, without decrypting the message. When this extension is used | |||
with DTLS implementations SHOULD NOT generate record_overflow alerts | with Datagram Transport Layer Security (DTLS), implementations SHOULD | |||
unless the packet passes message authentication. | NOT generate record_overflow alerts unless the packet passes message | |||
authentication. | ||||
INTERNET-DRAFT TLS Extension Definitions | ||||
5. Client Certificate URLs | 5. Client Certificate URLs | |||
Without this extension, TLS specifies that when client authentication | Without this extension, TLS specifies that when client authentication | |||
is performed, client certificates are sent by clients to servers | is performed, client certificates are sent by clients to servers | |||
during the TLS handshake. It may be desirable for constrained clients | during the TLS handshake. It may be desirable for constrained | |||
to send certificate URLs in place of certificates, so that they do | clients to send certificate URLs in place of certificates, so that | |||
not need to store their certificates and can therefore save memory. | they do not need to store their certificates and can therefore save | |||
memory. | ||||
In order to negotiate sending certificate URLs to a server, clients | In order to negotiate sending certificate URLs to a server, clients | |||
MAY include an extension of type "client_certificate_url" in the | MAY include an extension of type "client_certificate_url" in the | |||
(extended) client hello. The "extension_data" field of this extension | (extended) client hello. The "extension_data" field of this | |||
SHALL be empty. | extension SHALL be empty. | |||
(Note that it is necessary to negotiate use of client certificate | (Note that it is necessary to negotiate the use of client certificate | |||
URLs in order to avoid "breaking" existing TLS servers.) | URLs in order to avoid "breaking" existing TLS servers.) | |||
Servers that receive an extended client hello containing a | Servers that receive an extended client hello containing a | |||
"client_certificate_url" extension MAY indicate that they are willing | "client_certificate_url" extension MAY indicate that they are willing | |||
to accept certificate URLs by including an extension of type | to accept certificate URLs by including an extension of type | |||
"client_certificate_url" in the (extended) server hello. The | "client_certificate_url" in the (extended) server hello. The | |||
"extension_data" field of this extension SHALL be empty. | "extension_data" field of this extension SHALL be empty. | |||
After negotiation of the use of client certificate URLs has been | After negotiation of the use of client certificate URLs has been | |||
successfully completed (by exchanging hellos including | successfully completed (by exchanging hellos including | |||
"client_certificate_url" extensions), clients MAY send a | "client_certificate_url" extensions), clients MAY send a | |||
"CertificateURL" message in place of a "Certificate" message as | "CertificateURL" message in place of a "Certificate" message as | |||
follows (see also Section 2): | follows (see also Section 2): | |||
enum { | enum { | |||
individual_certs(0), pkipath(1), (255) | individual_certs(0), pkipath(1), (255) | |||
skipping to change at page 11, line 50 | skipping to change at page 10, line 20 | |||
CertChainType type; | CertChainType type; | |||
URLAndHash url_and_hash_list<1..2^16-1>; | URLAndHash url_and_hash_list<1..2^16-1>; | |||
} CertificateURL; | } CertificateURL; | |||
struct { | struct { | |||
opaque url<1..2^16-1>; | opaque url<1..2^16-1>; | |||
unint8 padding; | unint8 padding; | |||
opaque SHA1Hash[20]; | opaque SHA1Hash[20]; | |||
} URLAndHash; | } URLAndHash; | |||
Here "url_and_hash_list" contains a sequence of URLs and hashes. | Here, "url_and_hash_list" contains a sequence of URLs and hashes. | |||
Each "url" MUST be an absolute URI reference according to [RFC3986] | Each "url" MUST be an absolute URI reference according to [RFC3986] | |||
that can be immediately used to fetch the certificate(s). | that can be immediately used to fetch the certificate(s). | |||
When X.509 certificates are used, there are two possibilities: | When X.509 certificates are used, there are two possibilities: | |||
- If CertificateURL.type is "individual_certs", each URL refers to a | - If CertificateURL.type is "individual_certs", each URL refers to a | |||
single DER-encoded X.509v3 certificate, with the URL for the | ||||
INTERNET-DRAFT TLS Extension Definitions | client's certificate first. | |||
single DER-encoded X.509v3 certificate, with the URL for the client's | ||||
certificate first. | ||||
- If CertificateURL.type is "pkipath", the list contains a single | - If CertificateURL.type is "pkipath", the list contains a single | |||
URL referring to a DER-encoded certificate chain, using the type | URL referring to a DER-encoded certificate chain, using the type | |||
PkiPath described in Section 10.1. | PkiPath described in Section 10.1. | |||
When any other certificate format is used, the specification that | When any other certificate format is used, the specification that | |||
describes use of that format in TLS should define the encoding format | describes use of that format in TLS should define the encoding format | |||
of certificates or certificate chains, and any constraint on their | of certificates or certificate chains, and any constraint on their | |||
ordering. | ordering. | |||
The "padding" byte MUST be 0x01. It is present to make the structure | The "padding" byte MUST be 0x01. It is present to make the structure | |||
backwards compatible. | backwards compatible. | |||
The hash corresponding to each URL is the SHA-1 hash of the | The hash corresponding to each URL is the SHA-1 hash of the | |||
certificate or certificate chain (in the case of X.509 certificates, | certificate or certificate chain (in the case of X.509 certificates, | |||
the DER-encoded certificate or the DER-encoded PkiPath). | the DER-encoded certificate or the DER-encoded PkiPath). | |||
Note that when a list of URLs for X.509 certificates is used, the | Note that when a list of URLs for X.509 certificates is used, the | |||
ordering of URLs is the same as that used in the TLS Certificate | ordering of URLs is the same as that used in the TLS Certificate | |||
message (see [RFC5246], Section 7.4.2), but opposite to the order in | message (see [RFC5246], Section 7.4.2), but opposite to the order in | |||
which certificates are encoded in PkiPath. In either case, the self- | which certificates are encoded in PkiPath. In either case, the self- | |||
signed root certificate MAY be omitted from the chain, under the | signed root certificate MAY be omitted from the chain, under the | |||
assumption that the server must already possess it in order to | assumption that the server must already possess it in order to | |||
validate it. | validate it. | |||
Servers receiving "CertificateURL" SHALL attempt to retrieve the | Servers receiving "CertificateURL" SHALL attempt to retrieve the | |||
client's certificate chain from the URLs and then process the | client's certificate chain from the URLs and then process the | |||
certificate chain as usual. A cached copy of the content of any URL | certificate chain as usual. A cached copy of the content of any URL | |||
in the chain MAY be used, provided that the SHA-1 hash matches the | in the chain MAY be used, provided that the SHA-1 hash matches the | |||
hash of the cached copy. | hash of the cached copy. | |||
Servers that support this extension MUST support the 'http' URI | Servers that support this extension MUST support the 'http' URI | |||
scheme for certificate URLs, and MAY support other schemes. Use of | scheme for certificate URLs and MAY support other schemes. Use of | |||
other schemes than 'http', 'https', or 'ftp' may create unexpected | other schemes than 'http', 'https', or 'ftp' may create unexpected | |||
problems. | problems. | |||
If the protocol used is HTTP, then the HTTP server can be configured | If the protocol used is HTTP, then the HTTP server can be configured | |||
to use the Cache-Control and Expires directives described in | to use the Cache-Control and Expires directives described in | |||
[RFC2616] to specify whether and for how long certificates or | [RFC2616] to specify whether and for how long certificates or | |||
certificate chains should be cached. | certificate chains should be cached. | |||
The TLS server MUST NOT follow HTTP redirects when retrieving the | The TLS server MUST NOT follow HTTP redirects when retrieving the | |||
certificates or certificate chain. The URLs used in this extension | certificates or certificate chain. The URLs used in this extension | |||
MUST NOT be chosen to depend on such redirects. | MUST NOT be chosen to depend on such redirects. | |||
If the protocol used to retrieve certificates or certificate chains | If the protocol used to retrieve certificates or certificate chains | |||
returns a MIME-formatted response (as HTTP does), then the following | returns a MIME-formatted response (as HTTP does), then the following | |||
MIME Content-Types SHALL be used: when a single X.509v3 certificate | MIME Content-Types SHALL be used: when a single X.509v3 certificate | |||
INTERNET-DRAFT TLS Extension Definitions | ||||
is returned, the Content-Type is "application/pkix-cert" [RFC2585], | is returned, the Content-Type is "application/pkix-cert" [RFC2585], | |||
and when a chain of X.509v3 certificates is returned, the Content- | and when a chain of X.509v3 certificates is returned, the Content- | |||
Type is "application/pkix-pkipath" Section 10.1. | Type is "application/pkix-pkipath" (Section 10.1). | |||
The server MUST check that the SHA-1 hash of the contents of the | The server MUST check that the SHA-1 hash of the contents of the | |||
object retrieved from that URL (after decoding any MIME Content- | object retrieved from that URL (after decoding any MIME Content- | |||
Transfer-Encoding) matches the given hash. If any retrieved object | Transfer-Encoding) matches the given hash. If any retrieved object | |||
does not have the correct SHA-1 hash, the server MUST abort the | does not have the correct SHA-1 hash, the server MUST abort the | |||
handshake with a bad_certificate_hash_value(114) alert. This alert is | handshake with a bad_certificate_hash_value(114) alert. This alert | |||
always fatal. | is always fatal. | |||
Clients may choose to send either "Certificate" or "CertificateURL" | Clients may choose to send either "Certificate" or "CertificateURL" | |||
after successfully negotiating the option to send certificate URLs. | after successfully negotiating the option to send certificate URLs. | |||
The option to send a certificate is included to provide flexibility | The option to send a certificate is included to provide flexibility | |||
to clients possessing multiple certificates. | to clients possessing multiple certificates. | |||
If a server is unable to obtain certificates in a given | If a server is unable to obtain certificates in a given | |||
CertificateURL, it MUST send a fatal certificate_unobtainable(111) | CertificateURL, it MUST send a fatal certificate_unobtainable(111) | |||
alert if it requires the certificates to complete the handshake. If | alert if it requires the certificates to complete the handshake. If | |||
the server does not require the certificates then the server | the server does not require the certificates, then the server | |||
continues the handshake. The server MAY send a warning level alert in | continues the handshake. The server MAY send a warning-level alert | |||
this case. Clients receiving such an alert SHOULD log the alert and | in this case. Clients receiving such an alert SHOULD log the alert | |||
continue with the handshake if possible | and continue with the handshake if possible. | |||
INTERNET-DRAFT TLS Extension Definitions | ||||
6. Trusted CA Indication | 6. Trusted CA Indication | |||
Constrained clients that, due to memory limitations, possess only a | Constrained clients that, due to memory limitations, possess only a | |||
small number of CA root keys may wish to indicate to servers which | small number of CA root keys may wish to indicate to servers which | |||
root keys they possess, in order to avoid repeated handshake | root keys they possess, in order to avoid repeated handshake | |||
failures. | failures. | |||
In order to indicate which CA root keys they possess, clients MAY | In order to indicate which CA root keys they possess, clients MAY | |||
include an extension of type "trusted_ca_keys" in the (extended) | include an extension of type "trusted_ca_keys" in the (extended) | |||
client hello. The "extension_data" field of this extension SHALL | client hello. The "extension_data" field of this extension SHALL | |||
contain "TrustedAuthorities" where: | contain "TrustedAuthorities" where: | |||
struct { | struct { | |||
TrustedAuthority trusted_authorities_list<0..2^16-1>; | TrustedAuthority trusted_authorities_list<0..2^16-1>; | |||
} TrustedAuthorities; | } TrustedAuthorities; | |||
struct { | struct { | |||
IdentifierType identifier_type; | IdentifierType identifier_type; | |||
select (identifier_type) { | select (identifier_type) { | |||
case pre_agreed: struct {}; | case pre_agreed: struct {}; | |||
skipping to change at page 14, line 40 | skipping to change at page 12, line 38 | |||
} identifier; | } identifier; | |||
} TrustedAuthority; | } TrustedAuthority; | |||
enum { | enum { | |||
pre_agreed(0), key_sha1_hash(1), x509_name(2), | pre_agreed(0), key_sha1_hash(1), x509_name(2), | |||
cert_sha1_hash(3), (255) | cert_sha1_hash(3), (255) | |||
} IdentifierType; | } IdentifierType; | |||
opaque DistinguishedName<1..2^16-1>; | opaque DistinguishedName<1..2^16-1>; | |||
Here "TrustedAuthorities" provides a list of CA root key identifiers | Here, "TrustedAuthorities" provides a list of CA root key identifiers | |||
that the client possesses. Each CA root key is identified via either: | that the client possesses. Each CA root key is identified via | |||
either: | ||||
- "pre_agreed": no CA root key identity supplied. | - "pre_agreed": no CA root key identity supplied. | |||
- "key_sha1_hash": contains the SHA-1 hash of the CA root key. For | - "key_sha1_hash": contains the SHA-1 hash of the CA root key. For | |||
Digital Signature Algorithm (DSA) and Elliptic Curve Digital | Digital Signature Algorithm (DSA) and Elliptic Curve Digital | |||
Signature Algorithm (ECDSA) keys, this is the hash of the | Signature Algorithm (ECDSA) keys, this is the hash of the | |||
"subjectPublicKey" value. For RSA keys, the hash is of the big- | "subjectPublicKey" value. For RSA keys, the hash is of the big- | |||
endian byte string representation of the modulus without any | endian byte string representation of the modulus without any | |||
initial 0-valued bytes. (This copies the key hash formats deployed | initial zero-valued bytes. (This copies the key hash formats | |||
in other environments.) | deployed in other environments.) | |||
- "x509_name": contains the DER-encoded X.509 DistinguishedName of | - "x509_name": contains the DER-encoded X.509 DistinguishedName of | |||
the CA. | the CA. | |||
INTERNET-DRAFT TLS Extension Definitions | ||||
- "cert_sha1_hash": contains the SHA-1 hash of a DER-encoded | - "cert_sha1_hash": contains the SHA-1 hash of a DER-encoded | |||
Certificate containing the CA root key. | Certificate containing the CA root key. | |||
Note that clients may include none, some, or all of the CA root keys | Note that clients may include none, some, or all of the CA root keys | |||
they possess in this extension. | they possess in this extension. | |||
Note also that it is possible that a key hash or a Distinguished Name | Note also that it is possible that a key hash or a Distinguished Name | |||
alone may not uniquely identify a certificate issuer (for example, if | alone may not uniquely identify a certificate issuer (for example, if | |||
a particular CA has multiple key pairs). However, here we assume this | a particular CA has multiple key pairs). However, here we assume | |||
is the case following the use of Distinguished Names to identify | this is the case following the use of Distinguished Names to identify | |||
certificate issuers in TLS. | certificate issuers in TLS. | |||
The option to include no CA root keys is included to allow the client | The option to include no CA root keys is included to allow the client | |||
to indicate possession of some pre-defined set of CA root keys. | to indicate possession of some pre-defined set of CA root keys. | |||
Servers that receive a client hello containing the "trusted_ca_keys" | Servers that receive a client hello containing the "trusted_ca_keys" | |||
extension MAY use the information contained in the extension to guide | extension MAY use the information contained in the extension to guide | |||
their selection of an appropriate certificate chain to return to the | their selection of an appropriate certificate chain to return to the | |||
client. In this event, the server SHALL include an extension of type | client. In this event, the server SHALL include an extension of type | |||
"trusted_ca_keys" in the (extended) server hello. The | "trusted_ca_keys" in the (extended) server hello. The | |||
"extension_data" field of this extension SHALL be empty. | "extension_data" field of this extension SHALL be empty. | |||
INTERNET-DRAFT TLS Extension Definitions | 7. Truncated HMAC | |||
7. Truncated HMAC | ||||
Currently defined TLS cipher suites use the MAC construction HMAC | Currently defined TLS cipher suites use the MAC construction HMAC | |||
[RFC2104] to authenticate record layer communications. In TLS, the | [RFC2104] to authenticate record-layer communications. In TLS, the | |||
entire output of the hash function is used as the MAC tag. However, | entire output of the hash function is used as the MAC tag. However, | |||
it may be desirable in constrained environments to save bandwidth by | it may be desirable in constrained environments to save bandwidth by | |||
truncating the output of the hash function to 80 bits when forming | truncating the output of the hash function to 80 bits when forming | |||
MAC tags. | MAC tags. | |||
In order to negotiate the use of 80-bit truncated HMAC, clients MAY | In order to negotiate the use of 80-bit truncated HMAC, clients MAY | |||
include an extension of type "truncated_hmac" in the extended client | include an extension of type "truncated_hmac" in the extended client | |||
hello. The "extension_data" field of this extension SHALL be empty. | hello. The "extension_data" field of this extension SHALL be empty. | |||
Servers that receive an extended hello containing a "truncated_hmac" | Servers that receive an extended hello containing a "truncated_hmac" | |||
extension MAY agree to use a truncated HMAC by including an extension | extension MAY agree to use a truncated HMAC by including an extension | |||
of type "truncated_hmac", with empty "extension_data", in the | of type "truncated_hmac", with empty "extension_data", in the | |||
extended server hello. | extended server hello. | |||
Note that if new cipher suites are added that do not use HMAC, and | Note that if new cipher suites are added that do not use HMAC, and | |||
the session negotiates one of these cipher suites, this extension | the session negotiates one of these cipher suites, this extension | |||
will have no effect. It is strongly recommended that any new cipher | will have no effect. It is strongly recommended that any new cipher | |||
suites using other MACs consider the MAC size an integral part of the | suites using other MACs consider the MAC size an integral part of the | |||
cipher suite definition, taking into account both security and | cipher suite definition, taking into account both security and | |||
bandwidth considerations. | bandwidth considerations. | |||
If HMAC truncation has been successfully negotiated during a TLS | If HMAC truncation has been successfully negotiated during a TLS | |||
handshake, and the negotiated cipher suite uses HMAC, both the client | handshake, and the negotiated cipher suite uses HMAC, both the client | |||
and the server pass this fact to the TLS record layer along with the | and the server pass this fact to the TLS record layer along with the | |||
other negotiated security parameters. Subsequently during the | other negotiated security parameters. Subsequently during the | |||
session, clients and servers MUST use truncated HMACs, calculated as | session, clients and servers MUST use truncated HMACs, calculated as | |||
specified in [RFC2104]. That is, SecurityParameters.mac_length is 10 | specified in [RFC2104]. That is, SecurityParameters.mac_length is 10 | |||
bytes, and only the first 10 bytes of the HMAC output are transmitted | bytes, and only the first 10 bytes of the HMAC output are transmitted | |||
and checked. Note that this extension does not affect the calculation | and checked. Note that this extension does not affect the | |||
of the pseudo-random function (PRF) as part of handshaking or key | calculation of the pseudo-random function (PRF) as part of | |||
derivation. | handshaking or key derivation. | |||
The negotiated HMAC truncation size applies for the duration of the | The negotiated HMAC truncation size applies for the duration of the | |||
session including session resumptions. | session including session resumptions. | |||
INTERNET-DRAFT TLS Extension Definitions | 8. Certificate Status Request | |||
8. Certificate Status Request | ||||
Constrained clients may wish to use a certificate-status protocol | Constrained clients may wish to use a certificate-status protocol | |||
such as OCSP [RFC2560] to check the validity of server certificates, | such as OCSP [RFC2560] to check the validity of server certificates, | |||
in order to avoid transmission of CRLs and therefore save bandwidth | in order to avoid transmission of CRLs and therefore save bandwidth | |||
on constrained networks. This extension allows for such information | on constrained networks. This extension allows for such information | |||
to be sent in the TLS handshake, saving roundtrips and resources. | to be sent in the TLS handshake, saving roundtrips and resources. | |||
In order to indicate their desire to receive certificate status | In order to indicate their desire to receive certificate status | |||
information, clients MAY include an extension of type | information, clients MAY include an extension of type | |||
"status_request" in the (extended) client hello. The "extension_data" | "status_request" in the (extended) client hello. The | |||
field of this extension SHALL contain "CertificateStatusRequest" | "extension_data" field of this extension SHALL contain | |||
where: | "CertificateStatusRequest" where: | |||
struct { | struct { | |||
CertificateStatusType status_type; | CertificateStatusType status_type; | |||
select (status_type) { | select (status_type) { | |||
case ocsp: OCSPStatusRequest; | case ocsp: OCSPStatusRequest; | |||
} request; | } request; | |||
} CertificateStatusRequest; | } CertificateStatusRequest; | |||
enum { ocsp(1), (255) } CertificateStatusType; | enum { ocsp(1), (255) } CertificateStatusType; | |||
struct { | struct { | |||
ResponderID responder_id_list<0..2^16-1>; | ResponderID responder_id_list<0..2^16-1>; | |||
Extensions request_extensions; | Extensions request_extensions; | |||
} OCSPStatusRequest; | } OCSPStatusRequest; | |||
opaque ResponderID<1..2^16-1>; | opaque ResponderID<1..2^16-1>; | |||
opaque Extensions<0..2^16-1>; | opaque Extensions<0..2^16-1>; | |||
In the OCSPStatusRequest, the "ResponderIDs" provides a list of OCSP | In the OCSPStatusRequest, the "ResponderIDs" provides a list of OCSP | |||
responders that the client trusts. A zero-length "responder_id_list" | responders that the client trusts. A zero-length "responder_id_list" | |||
sequence has the special meaning that the responders are implicitly | sequence has the special meaning that the responders are implicitly | |||
known to the server, e.g., by prior arrangement. "Extensions" is a | known to the server, e.g., by prior arrangement. "Extensions" is a | |||
DER encoding of OCSP request extensions. | DER encoding of OCSP request extensions. | |||
Both "ResponderID" and "Extensions" are DER-encoded ASN.1 types as | Both "ResponderID" and "Extensions" are DER-encoded ASN.1 types as | |||
defined in [RFC2560]. "Extensions" is imported from [RFC5280]. A | defined in [RFC2560]. "Extensions" is imported from [RFC5280]. A | |||
zero-length "request_extensions" value means that there are no | zero-length "request_extensions" value means that there are no | |||
extensions (as opposed to a zero-length ASN.1 SEQUENCE, which is not | extensions (as opposed to a zero-length ASN.1 SEQUENCE, which is not | |||
valid for the "Extensions" type). | valid for the "Extensions" type). | |||
In the case of the "id-pkix-ocsp-nonce" OCSP extension, [RFC2560] is | In the case of the "id-pkix-ocsp-nonce" OCSP extension, [RFC2560] is | |||
unclear about its encoding; for clarification, the nonce MUST be a | unclear about its encoding; for clarification, the nonce MUST be a | |||
DER-encoded OCTET STRING, which is encapsulated as another OCTET | DER-encoded OCTET STRING, which is encapsulated as another OCTET | |||
STRING (note that implementations based on an existing OCSP client | STRING (note that implementations based on an existing OCSP client | |||
will need to be checked for conformance to this requirement). | will need to be checked for conformance to this requirement). | |||
Servers that receive a client hello containing the "status_request" | Servers that receive a client hello containing the "status_request" | |||
INTERNET-DRAFT TLS Extension Definitions | ||||
extension MAY return a suitable certificate status response to the | extension MAY return a suitable certificate status response to the | |||
client along with their certificate. If OCSP is requested, they | client along with their certificate. If OCSP is requested, they | |||
SHOULD use the information contained in the extension when selecting | SHOULD use the information contained in the extension when selecting | |||
an OCSP responder and SHOULD include request_extensions in the OCSP | an OCSP responder and SHOULD include request_extensions in the OCSP | |||
request. | request. | |||
Servers return a certificate response along with their certificate by | Servers return a certificate response along with their certificate by | |||
sending a "CertificateStatus" message immediately after the | sending a "CertificateStatus" message immediately after the | |||
"Certificate" message (and before any "ServerKeyExchange" or | "Certificate" message (and before any "ServerKeyExchange" or | |||
"CertificateRequest" messages). If a server returns a | "CertificateRequest" messages). If a server returns a | |||
"CertificateStatus" message, then the server MUST have included an | "CertificateStatus" message, then the server MUST have included an | |||
extension of type "status_request" with empty "extension_data" in the | extension of type "status_request" with empty "extension_data" in the | |||
extended server hello. The "CertificateStatus" message is conveyed | extended server hello. The "CertificateStatus" message is conveyed | |||
using the handshake message type "certificate_status" as follows (see | using the handshake message type "certificate_status" as follows (see | |||
also Section 2): | also Section 2): | |||
struct { | struct { | |||
CertificateStatusType status_type; | CertificateStatusType status_type; | |||
select (status_type) { | select (status_type) { | |||
case ocsp: OCSPResponse; | case ocsp: OCSPResponse; | |||
} response; | } response; | |||
} CertificateStatus; | } CertificateStatus; | |||
skipping to change at page 18, line 49 | skipping to change at page 16, line 18 | |||
server hello message. | server hello message. | |||
Note in addition that a server MUST NOT send the "CertificateStatus" | Note in addition that a server MUST NOT send the "CertificateStatus" | |||
message unless it received a "status_request" extension in the client | message unless it received a "status_request" extension in the client | |||
hello message and sent a "status_request" extension in the server | hello message and sent a "status_request" extension in the server | |||
hello message. | hello message. | |||
Clients requesting an OCSP response and receiving an OCSP response in | Clients requesting an OCSP response and receiving an OCSP response in | |||
a "CertificateStatus" message MUST check the OCSP response and abort | a "CertificateStatus" message MUST check the OCSP response and abort | |||
the handshake if the response is not satisfactory with | the handshake if the response is not satisfactory with | |||
bad_certificate_status_response(113) alert. This alert is always | bad_certificate_status_response(113) alert. This alert is always | |||
fatal. | fatal. | |||
INTERNET-DRAFT TLS Extension Definitions | 9. Error Alerts | |||
9. Error Alerts | ||||
Four new error alerts are defined for use with the TLS extensions | Four new error alerts are defined for use with the TLS extensions | |||
defined in this document. To avoid "breaking" existing clients and | defined in this document. To avoid "breaking" existing clients and | |||
servers, these alerts MUST NOT be sent unless the sending party has | servers, these alerts MUST NOT be sent unless the sending party has | |||
received an extended hello message from the party they are | received an extended hello message from the party they are | |||
communicating with. These error alerts are conveyed using the | communicating with. These error alerts are conveyed using the | |||
following syntax. The new alerts are the last four, as indicated by | following syntax. The new alerts are the last four, as indicated by | |||
the comments on the same line as the error alert number. | the comments on the same line as the error alert number. | |||
enum { | enum { | |||
close_notify(0), | close_notify(0), | |||
unexpected_message(10), | unexpected_message(10), | |||
bad_record_mac(20), | bad_record_mac(20), | |||
decryption_failed(21), | decryption_failed(21), | |||
record_overflow(22), | record_overflow(22), | |||
decompression_failure(30), | decompression_failure(30), | |||
handshake_failure(40), | handshake_failure(40), | |||
skipping to change at page 20, line 5 | skipping to change at page 17, line 20 | |||
bad_certificate_status_response(113), /* new */ | bad_certificate_status_response(113), /* new */ | |||
bad_certificate_hash_value(114), /* new */ | bad_certificate_hash_value(114), /* new */ | |||
(255) | (255) | |||
} AlertDescription; | } AlertDescription; | |||
"certificate_unobtainable" is described in Section 5. | "certificate_unobtainable" is described in Section 5. | |||
"unrecognized_name" is described in Section 3. | "unrecognized_name" is described in Section 3. | |||
"bad_certificate_status_response" is described in Section 8. | "bad_certificate_status_response" is described in Section 8. | |||
"bad_certificate_hash_value" is described in Section 5. | "bad_certificate_hash_value" is described in Section 5. | |||
INTERNET-DRAFT TLS Extension Definitions | 10. IANA Considerations | |||
10. IANA Considerations | ||||
IANA Considerations for TLS Extensions and the creation of a Registry | IANA Considerations for TLS extensions and the creation of a registry | |||
therefore are covered in Section 12 of [RFC5246] except for the | are covered in Section 12 of [RFC5246] except for the registration of | |||
registration of MIME type application/pkix-pkipath which appears | MIME type application/pkix-pkipath, which appears below. | |||
below. | ||||
The IANA TLS extensions and MIME type application/pkix-pkipath | The IANA TLS extensions and MIME type application/pkix-pkipath | |||
registry entries that reference RFC 4366 should be updated to | registry entries that reference RFC 4366 have been updated to | |||
reference this document on its publication as an RFC. | reference this document. | |||
10.1 pkipath MIME Type Registration | 10.1. pkipath MIME Type Registration | |||
MIME media type name: application | MIME media type name: application | |||
MIME subtype name: pkix-pkipath | MIME subtype name: pkix-pkipath | |||
Required parameters: none | Required parameters: none | |||
Optional parameters: version (default value is "1") | Optional parameters: version (default value is "1") | |||
Encoding considerations: | Encoding considerations: | |||
Binary; this MIME type is a DER encoding of the ASN.1 type | Binary; this MIME type is a DER encoding of the ASN.1 type | |||
PkiPath, defined as follows: | PkiPath, defined as follows: | |||
skipping to change at page 21, line 5 | skipping to change at page 18, line 17 | |||
carefully.) | carefully.) | |||
DER (as opposed to BER) encoding MUST be used. If this type is | DER (as opposed to BER) encoding MUST be used. If this type is | |||
sent over a 7-bit transport, base64 encoding SHOULD be used. | sent over a 7-bit transport, base64 encoding SHOULD be used. | |||
Security considerations: | Security considerations: | |||
The security considerations of [X509-4th] and [RFC5280] (or any | The security considerations of [X509-4th] and [RFC5280] (or any | |||
updates to them) apply, as well as those of any protocol that uses | updates to them) apply, as well as those of any protocol that uses | |||
this type (e.g., TLS). | this type (e.g., TLS). | |||
INTERNET-DRAFT TLS Extension Definitions | ||||
Note that this type only specifies a certificate chain that can be | Note that this type only specifies a certificate chain that can be | |||
assessed for validity according to the relying party's existing | assessed for validity according to the relying party's existing | |||
configuration of trusted CAs; it is not intended to be used to | configuration of trusted CAs; it is not intended to be used to | |||
specify any change to that configuration. | specify any change to that configuration. | |||
Interoperability considerations: | Interoperability considerations: | |||
No specific interoperability problems are known with this type, | No specific interoperability problems are known with this type, | |||
but for recommendations relating to X.509 certificates in general, | but for recommendations relating to X.509 certificates in general, | |||
see [RFC5280]. | see [RFC5280]. | |||
Published specification: This document and [RFC5280]. | Published specification: This document and [RFC5280]. | |||
Applications which use this media type: TLS. It may also be used by | Applications that use this media type: | |||
other protocols, or for general interchange of PKIX certificate | TLS. It may also be used by other protocols or for general | |||
chains. | interchange of PKIX certificate chains. | |||
Additional information: | Additional information: | |||
Magic number(s): DER-encoded ASN.1 can be easily recognized. | Magic number(s): DER-encoded ASN.1 can be easily recognized. | |||
Further parsing is required to distinguish it from other ASN.1 | Further parsing is required to distinguish it from other ASN.1 | |||
types. | types. | |||
File extension(s): .pkipath | File extension(s): .pkipath | |||
Macintosh File Type Code(s): not specified | Macintosh File Type Code(s): not specified | |||
Person & email address to contact for further information: | Person & email address to contact for further information: | |||
Magnus Nystrom <mnystrom@microsoft.com> | Magnus Nystrom <mnystrom@microsoft.com> | |||
Intended usage: COMMON | Intended usage: COMMON | |||
Change controller: IESG <iesg@ietf.org> | Change controller: IESG <iesg@ietf.org> | |||
INTERNET-DRAFT TLS Extension Definitions | 10.2. Reference for TLS Alerts, TLS HandshakeTypes, and ExtensionTypes | |||
11. Security Considerations | The following values in the TLS Alert Registry have been updated to | |||
reference this document: | ||||
General Security Considerations for TLS Extensions are covered in | 111 certificate_unobtainable | |||
[RFC5246]. Security Considerations for particular extensions | 112 unrecognized_name | |||
113 bad_certificate_status_response | ||||
114 bad_certificate_hash_value | ||||
The following values in the TLS HandshakeType Registry have been | ||||
updated to reference this document: | ||||
21 certificate_url | ||||
22 certificate_status | ||||
The following ExtensionType values have been updated to reference | ||||
this document: | ||||
0 server_name | ||||
1 max_fragment_length | ||||
2 client_certificate_url | ||||
3 trusted_ca_keys | ||||
4 truncated_hmac | ||||
5 status_request | ||||
11. Security Considerations | ||||
General security considerations for TLS extensions are covered in | ||||
[RFC5246]. Security Considerations for particular extensions | ||||
specified in this document are given below. | specified in this document are given below. | |||
In general, implementers should continue to monitor the state of the | In general, implementers should continue to monitor the state of the | |||
art and address any weaknesses identified. | art and address any weaknesses identified. | |||
11.1 Security Considerations for server_name | 11.1. Security Considerations for server_name | |||
If a single server hosts several domains, then clearly it is | If a single server hosts several domains, then clearly it is | |||
necessary for the owners of each domain to ensure that this satisfies | necessary for the owners of each domain to ensure that this satisfies | |||
their security needs. Apart from this, server_name does not appear to | their security needs. Apart from this, server_name does not appear | |||
introduce significant security issues. | to introduce significant security issues. | |||
Since it is possible for a client to present a different server_name | Since it is possible for a client to present a different server_name | |||
in the application protocol, application server implementations that | in the application protocol, application server implementations that | |||
rely upon these names being the same MUST check to make sure the | rely upon these names being the same MUST check to make sure the | |||
client did not present a different name in the application protocol. | client did not present a different name in the application protocol. | |||
Implementations MUST ensure that a buffer overflow does not occur, | Implementations MUST ensure that a buffer overflow does not occur, | |||
whatever the values of the length fields in server_name. | whatever the values of the length fields in server_name. | |||
11.2 Security Considerations for max_fragment_length | 11.2. Security Considerations for max_fragment_length | |||
The maximum fragment length takes effect immediately, including for | The maximum fragment length takes effect immediately, including for | |||
handshake messages. However, that does not introduce any security | handshake messages. However, that does not introduce any security | |||
complications that are not already present in TLS, since TLS requires | complications that are not already present in TLS, since TLS requires | |||
implementations to be able to handle fragmented handshake messages. | implementations to be able to handle fragmented handshake messages. | |||
Note that as described in Section 4, once a non-null cipher suite has | Note that, as described in Section 4, once a non-null cipher suite | |||
been activated, the effective maximum fragment length depends on the | has been activated, the effective maximum fragment length depends on | |||
cipher suite and compression method, as well as on the negotiated | the cipher suite and compression method, as well as on the negotiated | |||
max_fragment_length. This must be taken into account when sizing | max_fragment_length. This must be taken into account when sizing | |||
buffers, and checking for buffer overflow. | buffers and checking for buffer overflow. | |||
11.3 Security Considerations for client_certificate_url | 11.3. Security Considerations for client_certificate_url | |||
Support for client_certificate_url involves the server's acting as a | Support for client_certificate_url involves the server's acting as a | |||
client in another URI scheme dependent protocol. The server | client in another URI-scheme-dependent protocol. The server | |||
therefore becomes subject to many of the same security concerns that | therefore becomes subject to many of the same security concerns that | |||
clients of the URI scheme are subject to, with the added concern that | clients of the URI scheme are subject to, with the added concern that | |||
INTERNET-DRAFT TLS Extension Definitions | ||||
the client can attempt to prompt the server to connect to some | the client can attempt to prompt the server to connect to some | |||
(possibly weird-looking) URL. | (possibly weird-looking) URL. | |||
In general, this issue means that an attacker might use the server to | In general, this issue means that an attacker might use the server to | |||
indirectly attack another host that is vulnerable to some security | indirectly attack another host that is vulnerable to some security | |||
flaw. It also introduces the possibility of denial of service attacks | flaw. It also introduces the possibility of denial-of-service | |||
in which an attacker makes many connections to the server, each of | attacks in which an attacker makes many connections to the server, | |||
which results in the server's attempting a connection to the target | each of which results in the server's attempting a connection to the | |||
of the attack. | target of the attack. | |||
Note that the server may be behind a firewall or otherwise able to | Note that the server may be behind a firewall or otherwise able to | |||
access hosts that would not be directly accessible from the public | access hosts that would not be directly accessible from the public | |||
Internet. This could exacerbate the potential security and denial of | Internet. This could exacerbate the potential security and denial- | |||
service problems described above, as well as allow the existence of | of-service problems described above, as well as allow the existence | |||
internal hosts to be confirmed when they would otherwise be hidden. | of internal hosts to be confirmed when they would otherwise be | |||
hidden. | ||||
The detailed security concerns involved will depend on the URI | The detailed security concerns involved will depend on the URI | |||
schemes supported by the server. In the case of HTTP, the concerns | schemes supported by the server. In the case of HTTP, the concerns | |||
are similar to those that apply to a publicly accessible HTTP proxy | are similar to those that apply to a publicly accessible HTTP proxy | |||
server. In the case of HTTPS, loops and deadlocks may be created, and | server. In the case of HTTPS, loops and deadlocks may be created, | |||
this should be addressed. In the case of FTP, attacks arise that are | and this should be addressed. In the case of FTP, attacks arise that | |||
similar to FTP bounce attacks. | are similar to FTP bounce attacks. | |||
As a result of this issue, it is RECOMMENDED that the | As a result of this issue, it is RECOMMENDED that the | |||
client_certificate_url extension should have to be specifically | client_certificate_url extension should have to be specifically | |||
enabled by a server administrator, rather than be enabled by default. | enabled by a server administrator, rather than be enabled by default. | |||
It is also RECOMMENDED that URI schemes be enabled by the | It is also RECOMMENDED that URI schemes be enabled by the | |||
administrator individually, and only a minimal set of schemes be | administrator individually, and only a minimal set of schemes be | |||
enabled. Unusual protocols that offer limited security or whose | enabled. Unusual protocols that offer limited security or whose | |||
security is not well understood SHOULD be avoided. | security is not well understood SHOULD be avoided. | |||
As discussed in [RFC3986], URLs that specify ports other than the | As discussed in [RFC3986], URLs that specify ports other than the | |||
default may cause problems, as may very long URLs (which are more | default may cause problems, as may very long URLs (which are more | |||
likely to be useful in exploiting buffer overflow bugs). | likely to be useful in exploiting buffer overflow bugs). | |||
This extension continues to use SHA-1 (as in RFC 4366) and does not | This extension continues to use SHA-1 (as in RFC 4366) and does not | |||
provide algorithm agility. The property required of SHA-1 in this | provide algorithm agility. The property required of SHA-1 in this | |||
case is second pre-image resistance, not collision resistance. | case is second pre-image resistance, not collision resistance. | |||
Furthermore, even if second pre-image attacks against SHA-1 are found | Furthermore, even if second pre-image attacks against SHA-1 are found | |||
in the future, an attack against client_certificate_url would require | in the future, an attack against client_certificate_url would require | |||
a second pre-image that is accepted as a valid certificate by the | a second pre-image that is accepted as a valid certificate by the | |||
server, and contains the same public key. | server and contains the same public key. | |||
Also note that HTTP caching proxies are common on the Internet, and | Also note that HTTP caching proxies are common on the Internet, and | |||
some proxies do not check for the latest version of an object | some proxies do not check for the latest version of an object | |||
correctly. If a request using HTTP (or another caching protocol) goes | correctly. If a request using HTTP (or another caching protocol) | |||
through a misconfigured or otherwise broken proxy, the proxy may | goes through a misconfigured or otherwise broken proxy, the proxy may | |||
return an out-of-date response. | return an out-of-date response. | |||
INTERNET-DRAFT TLS Extension Definitions | 11.4. Security Considerations for trusted_ca_keys | |||
11.4 Security Considerations for trusted_ca_keys | ||||
It is possible that which CA root keys a client possesses could be | Potentially, the CA root keys a client possesses could be regarded as | |||
regarded as confidential information. As a result, the CA root key | confidential information. As a result, the CA root key indication | |||
indication extension should be used with care. | extension should be used with care. | |||
The use of the SHA-1 certificate hash alternative ensures that each | The use of the SHA-1 certificate hash alternative ensures that each | |||
certificate is specified unambiguously. This context does not require | certificate is specified unambiguously. This context does not | |||
a cryptographic hash function, so the use of SHA-1 is considered | require a cryptographic hash function, so the use of SHA-1 is | |||
acceptable, and no algorithm agility is provided. | considered acceptable, and no algorithm agility is provided. | |||
11.5 Security Considerations for truncated_hmac | 11.5. Security Considerations for truncated_hmac | |||
It is possible that truncated MACs are weaker than "un-truncated" | It is possible that truncated MACs are weaker than "un-truncated" | |||
MACs. However, no significant weaknesses are currently known or | MACs. However, no significant weaknesses are currently known or | |||
expected to exist for HMAC with MD5 or SHA-1, truncated to 80 bits. | expected to exist for HMAC with MD5 or SHA-1, truncated to 80 bits. | |||
Note that the output length of a MAC need not be as long as the | Note that the output length of a MAC need not be as long as the | |||
length of a symmetric cipher key, since forging of MAC values cannot | length of a symmetric cipher key, since forging of MAC values cannot | |||
be done off-line: in TLS, a single failed MAC guess will cause the | be done off-line: in TLS, a single failed MAC guess will cause the | |||
immediate termination of the TLS session. | immediate termination of the TLS session. | |||
Since the MAC algorithm only takes effect after all handshake | Since the MAC algorithm only takes effect after all handshake | |||
messages that affect extension parameters have been authenticated by | messages that affect extension parameters have been authenticated by | |||
the hashes in the Finished messages, it is not possible for an active | the hashes in the Finished messages, it is not possible for an active | |||
attacker to force negotiation of the truncated HMAC extension where | attacker to force negotiation of the truncated HMAC extension where | |||
it would not otherwise be used (to the extent that the handshake | it would not otherwise be used (to the extent that the handshake | |||
authentication is secure). Therefore, in the event that any security | authentication is secure). Therefore, in the event that any security | |||
problem were found with truncated HMAC in the future, if either the | problems were found with truncated HMAC in the future, if either the | |||
client or the server for a given session were updated to take the | client or the server for a given session were updated to take the | |||
problem into account, it would be able to veto use of this extension. | problem into account, it would be able to veto use of this extension. | |||
11.6 Security Considerations for status_request | 11.6. Security Considerations for status_request | |||
If a client requests an OCSP response, it must take into account that | If a client requests an OCSP response, it must take into account that | |||
an attacker's server using a compromised key could (and probably | an attacker's server using a compromised key could (and probably | |||
would) pretend not to support the extension. In this case, a client | would) pretend not to support the extension. In this case, a client | |||
that requires OCSP validation of certificates SHOULD either contact | that requires OCSP validation of certificates SHOULD either contact | |||
the OCSP server directly or abort the handshake. | the OCSP server directly or abort the handshake. | |||
Use of the OCSP nonce request extension (id-pkix-ocsp-nonce) may | Use of the OCSP nonce request extension (id-pkix-ocsp-nonce) may | |||
improve security against attacks that attempt to replay OCSP | improve security against attacks that attempt to replay OCSP | |||
responses; see Section 4.4.1 of [RFC2560] for further details. | responses; see Section 4.4.1 of [RFC2560] for further details. | |||
INTERNET-DRAFT TLS Extension Definitions | 12. Normative References | |||
12. Normative References | ||||
[RFC2104] Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed- | ||||
Hashing for Message Authentication", RFC 2104, February 1997. | ||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2104] Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: | |||
Requirement Levels", BCP 14, RFC 2119, March 1997. | Keyed-Hashing for Message Authentication", RFC 2104, | |||
February 1997. | ||||
[RFC2560] Myers, M., Ankney, R., Malpani, A., Galperin, S., and C. | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Adams, "X.509 Internet Public Key Infrastructure Online | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
Certificate Status Protocol - OCSP", RFC 2560, June 1999. | ||||
[RFC2585] Housley, R. and P. Hoffman, "Internet X.509 Public Key | [RFC2560] Myers, M., Ankney, R., Malpani, A., Galperin, S., and | |||
Infrastructure Operational Protocols: FTP and HTTP", RFC 2585, | C. Adams, "X.509 Internet Public Key Infrastructure | |||
May 1999. | Online Certificate Status Protocol - OCSP", RFC 2560, | |||
June 1999. | ||||
[RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, | [RFC2585] Housley, R. and P. Hoffman, "Internet X.509 Public Key | |||
L., Leach, P., and T. Berners-Lee, "Hypertext Transfer Protocol | Infrastructure Operational Protocols: FTP and HTTP", | |||
-- HTTP/1.1", RFC 2616, June 1999. | RFC 2585, May 1999. | |||
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., | |||
Resource Identifier (URI): Generic Syntax", STD 66, RFC 3986, | Masinter, L., Leach, P., and T. Berners-Lee, | |||
January 2005. | "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2616, | |||
June 1999. | ||||
[RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, | |||
(TLS) Protocol Version 1.2", RFC 5246, August 2008. | "Uniform Resource Identifier (URI): Generic Syntax", | |||
STD 66, RFC 3986, January 2005. | ||||
[RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., | [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer | |||
Housley, R., and W. Polk, "Internet X.509 Public Key | Security (TLS) Protocol Version 1.2", RFC 5246, August | |||
Infrastructure Certificate and Certificate Revocation List | 2008. | |||
(CRL) Profile", RFC 5280, May 2008 | ||||
[RFC5890] Klensin, J., "Internationalized Domain Names for | [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., | |||
Applications (IDNA): Definitions and Document Framework", RFC | Housley, R., and W. Polk, "Internet X.509 Public Key | |||
5890, August 2010. | Infrastructure Certificate and Certificate Revocation | |||
List (CRL) Profile", RFC 5280, May 2008. | ||||
13. Informative References | [RFC5890] Klensin, J., "Internationalized Domain Names for | |||
Applications (IDNA): Definitions and Document | ||||
Framework", RFC 5890, August 2010. | ||||
[RFC2712] Medvinsky, A. and M. Hur, "Addition of Kerberos Cipher | 13. Informative References | |||
Suites to Transport Layer Security (TLS)", RFC 2712, October | ||||
1999. | ||||
[X509-4th] ITU-T Recommendation X.509 (2000) | ISO/IEC 9594-8:2001, | [RFC2712] Medvinsky, A. and M. Hur, "Addition of Kerberos Cipher | |||
"Information Systems - Open Systems Interconnection - The | Suites to Transport Layer Security (TLS)", RFC 2712, | |||
Directory: Public key and attribute certificate frameworks." | October 1999. | |||
INTERNET-DRAFT TLS Extension Definitions | [X509-4th] ITU-T Recommendation X.509 (2000) | ISO/IEC | |||
9594-8:2001, "Information Systems - Open Systems | ||||
Interconnection - The Directory: Public key and | ||||
attribute certificate frameworks". | ||||
[X509-4th-TC1] ITU-T Recommendation X.509(2000) Corrigendum 1(2001) | | [X509-4th-TC1] ITU-T Recommendation X.509(2000) Corrigendum 1(2001) | | |||
ISO/IEC 9594-8:2001/Cor.1:2002, Technical Corrigendum 1 to | ISO/IEC 9594-8:2001/Cor.1:2002, Technical Corrigendum | |||
ISO/IEC 9594:8:2001. | 1 to ISO/IEC 9594:8:2001. | |||
INTERNET-DRAFT TLS Extension Definitions | ||||
Annex A: Changes from RFC 4366 | Appendix A. Changes from RFC 4366 | |||
The significant changes between RFC 4366 and this document are | The significant changes between RFC 4366 and this document are | |||
described below. | described below. | |||
RFC 4366 described both general extension mechanisms (for the TLS | RFC 4366 described both general extension mechanisms (for the TLS | |||
handshake and client and server hellos) as well as specific | handshake and client and server hellos) as well as specific | |||
extensions. RFC 4366 was associated with RFC 4346, TLS 1.1. The | extensions. RFC 4366 was associated with RFC 4346, TLS 1.1. The | |||
client and server Hello extension mechanisms have been moved into RFC | client and server hello extension mechanisms have been moved into RFC | |||
5246, TLS 1.2, so this document, which is associated with RFC 5246, | 5246, TLS 1.2, so this document, which is associated with RFC 5246, | |||
includes only the handshake extension mechanisms and the specific | includes only the handshake extension mechanisms and the specific | |||
extensions from RFC 4366. RFC 5246 also specifies the unknown | extensions from RFC 4366. RFC 5246 also specifies the unknown | |||
extension error and new extension specification considerations so | extension error and new extension specification considerations, so | |||
that material has been removed from this document. | that material has been removed from this document. | |||
The Server Name extension now specifies only ASCII representation, | The Server Name extension now specifies only ASCII representation, | |||
eliminating UTF-8. It is provided that the ServerNameList can contain | eliminating UTF-8. It is provided that the ServerNameList can | |||
more only one name of any particular name_type. If a server name is | contain more than only one name of any particular name_type. If a | |||
provided but not recognized, the server should either continue the | server name is provided but not recognized, the server should either | |||
handshake without an error or send a fatal error. Sending a warning | continue the handshake without an error or send a fatal error. | |||
level message is not recommended because client behavior will be | Sending a warning-level message is not recommended because client | |||
unpredictable. Provision was added for the user using the server_name | behavior will be unpredictable. Provision was added for the user | |||
extension in deciding whether or not to resume a session. | using the server_name extension in deciding whether or not to resume | |||
Furthermores, this extension should be the same in a session | a session. Furthermore, this extension should be the same in a | |||
resumption request as it was in the full handshake that established | session resumption request as it was in the full handshake that | |||
the session. Such a resumption request must not be accepted if the | established the session. Such a resumption request must not be | |||
server_name extension is different but instead a full handshake must | accepted if the server_name extension is different, but instead a | |||
be done to possibly establish a new session. | full handshake must be done to possibly establish a new session. | |||
The Client Certificate URLs extension has been changed to make the | The Client Certificate URLs extension has been changed to make the | |||
presence of a hash mandatory. | presence of a hash mandatory. | |||
For the case of DTLS, the requirement to report an overflow of the | For the case of DTLS, the requirement to report an overflow of the | |||
negotiated maximum fragment length is made conditional on passing | negotiated maximum fragment length is made conditional on passing | |||
authentication. | authentication. | |||
TLS servers are now prohibited from following HTTP redirects when | TLS servers are now prohibited from following HTTP redirects when | |||
retrieving certificates. | retrieving certificates. | |||
The material was also re-organized in minor ways. For example, | The material was also re-organized in minor ways. For example, | |||
information as to which errors are fatal is moved from the one "Error | information as to which errors are fatal is moved from the "Error | |||
Alerts" section to the individual extension specifications. | Alerts" section to the individual extension specifications. | |||
INTERNET-DRAFT TLS Extension Definitions | Appendix B. Acknowledgements | |||
This document is based on material from RFC 4366 for which the | ||||
authors were S. Blake-Wilson, M. Nystrom, D. Hopwood, J. Mikkelsen, | ||||
and T. Wright. Other contributors include Joseph Salowey, Alexey | ||||
Melnikov, Peter Saint-Andre, and Adrian Farrel. | ||||
Author's Address | Author's Address | |||
Donald Eastlake 3rd | Donald Eastlake 3rd | |||
Stellar Switches, Inc. | Huawei | |||
155 Beaver Street | 155 Beaver Street | |||
Milford, MA 01757 USA | Milford, MA 01757 USA | |||
Tel: +1-508-333-2270 | Phone: +1-508-333-2270 | |||
Email: d3e3e3@gmail.com | EMail: d3e3e3@gmail.com | |||
INTERNET-DRAFT TLS Extension Definitions | ||||
Copyright and IPR Provisions | ||||
Copyright (c) 2010 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 | ||||
(http://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 Simplified BSD License text as described in Section 4.e of | ||||
the Trust Legal Provisions and are provided without warranty as | ||||
described in the BSD License. The definitive version of an IETF | ||||
Document is that published by, or under the auspices of, the IETF. | ||||
Versions of IETF Documents that are published by third parties, | ||||
including those that are translated into other languages, should not | ||||
be considered to be definitive versions of IETF Documents. The | ||||
definitive version of these Legal Provisions is that published by, or | ||||
under the auspices of, the IETF. Versions of these Legal Provisions | ||||
that are published by third parties, including those that are | ||||
translated into other languages, should not be considered to be | ||||
definitive versions of these Legal Provisions. For the avoidance of | ||||
doubt, each Contributor to the IETF Standards Process licenses each | ||||
Contribution that he or she makes as part of the IETF Standards | ||||
Process to the IETF Trust pursuant to the provisions of RFC 5378. No | ||||
language to the contrary, or terms, conditions or rights that differ | ||||
from or are inconsistent with the rights and licenses granted under | ||||
RFC 5378, shall have any effect and shall be null and void, whether | ||||
published or posted by such Contributor, or included with or in such | ||||
Contribution. | ||||
End of changes. 158 change blocks. | ||||
408 lines changed or deleted | 388 lines changed or added | |||
This html diff was produced by rfcdiff 1.40. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |