|Network Working Group||H. Landau|
|Internet-Draft||November 17, 2015|
|Intended status: Informational|
|Expires: May 20, 2016|
Strict Mode for HTTP Public Key Pinning
The HTTP Public Key Pinning Extension permits a User Agent to forego Pin Validation for policy reasons, for example when a server’s certificate chain terminates at a user-defined trust anchor. This facilitates “corporate” man-in-the-middle attacks which website operators may not wish to facilitate.
This specification specifies an extension to the HTTP Public Key Pinning specification allowing website operators to request that User Agents impose Denial of Service in relation to that website when a “policy” man-in-the-middle attack is detected. This allows such website operators to, by virtue of their plurality multiplied by their userbase, discourage the use of “policy” man-in-the-middle attacks.
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."
This Internet-Draft will expire on May 20, 2016.
Copyright (c) 2015 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 Simplified BSD License.
The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in [RFC2119].
The “strict” keyword is introduced to the Public-Key-Pinning and Public-Key-Pinning-Report-Only HTTP headers specified in [RFC7469].
Where the “strict” keyword appears, a User Agent shall record this fact. Where a User Agent attempts connection to a website which has a pin set recorded incorporating the “strict” keyword, a User Agent MUST perform Pin Validation as specified in [RFC7469], and MUST NOT skip Pin Validation for policy reasons as is otherwise permitted by [RFC7469] section 2.6.
Ordinarily, a pin set is not recorded if the connection it is delivered over would not pass Pin Validation in relation to that pin set. When the “strict” keyword is used, a pin set is recorded even if it would not pass Pin Validation. Since there is not necessarily any way of distinguishing between a man-in-the-middle attack performed for policy reasons and a website misconfiguration, this allows website operators to cause total Denial of Service on their websites. Thus the “strict” keyword has a mandatory parameter which acts as a max-age value for the “strict” keyword only. This allows the potential auto-DoS period due to a misconfiguration to be limited.
Because each page load will renew a pin with the “strict” keyword, even a short “strict” max-age value of e.g. 10 minutes will have the effect of making a site unusable for victims of “policy” man-in-the-middle attacks.
The parameter value for the “strict” keyword MUST be included.
Entities performing man-in-the-middle attacks may trivially strip Public-Key-Pinning headers, defeating this mechanism. Many such entities may neglect to perform this practice, or may not have the operational expertise to configure such measures. The use of preload lists bundled with User Agents could ensure that strict mode is effective even in the face of such measures.
|[RFC2119]||Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997.|
|[RFC7469]||Evans, C., Palmer, C. and R. Sleevi, "Public Key Pinning Extension for HTTP", RFC 7469, DOI 10.17487/RFC7469, April 2015.|
The following shows an example pinning header, which also enables strict mode for an hour.
Public-Key-Pins: max-age=2592000; pin-sha256="E9CZ9INDbd+2eRQozYqqbQ2yXLVKB9+xcprMF+44U1g="; pin-sha256="LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ="; strict=3600