RFC 6818

Updates to the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile

πŸ“… published January 2013, from ietf

Request for Comments: 6818 πŸ’–

Title: Updates to the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile πŸŽ€ Author: P. Yee, AKAYLA πŸ‘‘ Date: January 2013 πŸ“… Category: Standards Track ✨ Updates: RFC 5280 πŸ”₯ ISSN: 2070-1721 🌈

Okay bestie, so this RFC is basically a patch note for RFC 5280, the big X.509 certificate and CRL profile. It was published by the IETF (Internet Engineering Task Force) in January 2013 and it's on the Standards Track, so people are actually supposed to implement this stuff 😭. The vibe is "we're tightening some things up," and the fixes are kinda iconic πŸ’….

Abstract

Okay, the abstract is the TL;DR. This document updates RFC 5280 πŸ¦‹. It changes which encoding methods are allowed for the explicitText field of the user notice policy qualifier 🌸. It also makes the rules for turning internationalized domain name labels into ASCII way clearer 🧚. On top of that, it gives some clarifications about self-signed certificates and trust anchors, plus some updated Security Considerations πŸ”.

Status of This Memo

Here's the official status stuff, no cap. This is an Internet Standards Track document πŸ’œ.

This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). If you want more info on Internet Standards, check out Section 2 of RFC 5741 πŸ“.

For the current status of this doc, any errata, and how to send feedback, go to http://www.rfc-editor.org/info/rfc6818 ✨.

Copyright (c) 2013 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) as they were in effect on the date this document was published. Please actually read these, because they spell out your rights and restrictions for this document πŸ™ˆ. Code Components pulled out of this document must include Simplified BSD License text, as described in Section 4.e of the Trust Legal Provisions, and they come without warranty, as described in the Simplified BSD License 🫢.

Table of Contents

   1. Introduction ....................................................2
      1.1. Terminology ................................................3
   2. Update to RFC 5280, Section 3.2: "Certification Paths and Trust" 3
   3. Update to RFC 5280, Section 4.2.1.4: "Certificate Policies" .....3
   4. Update to RFC 5280, Section 6.2: "Using the Path Validation
      Algorithm" ......................................................4
   5. Update to RFC 5280, Section 7.3: "Internationalized
      Domain Names in Distinguished Names" ............................5
   6. Security Considerations .........................................5
   7. Update to RFC 5280, Section 11.1: "Normative References" ........7
   8. Update to RFC 5280, Section 11.2: "Informative References" ......7
   9. References ......................................................7
      9.1. Normative References .......................................7
      9.2. Informative References .....................................7
  10. Acknowledgements ................................................8

1. Introduction ✨

This document updates the "Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile" [RFC5280] πŸ¦‹.

It makes a recommendation that self-signed certificates used to convey trust anchor data be marked as certificate authority (CA) certificates. Honestly, that's not always current practice, so this is a bit of a nudge 🌸.

Next, the use of self-signed certificates as trust anchors in Section 6.2 of [RFC5280] gets clarified 🧚. It's optional to use extra info in these certificates during path validation, and [RFC5937] is noted as the guidance on that πŸ’….

The acceptable and unacceptable encodings for the explicitText field of the user notice policy qualifier get updated too, so they match what people are already doing in the wild πŸŽ€.

The rules in Section 7.3 of [RFC5280] for ASCII encoding of Internationalized Domain Names (IDNs) as Distinguished Names are lined up with the rules in Section 7.2 of that document, which cover IDN encoding as GeneralNames πŸ‘‘.

Because of some observed attacks [Prins], the Security Considerations section now goes deeper into what happens when a CA's key gets compromised 😭. It also points out that collision resistance is not a required property of one-way hash functions when they're used to generate key identifiers πŸ”₯.

Finally, this doc adds normative and informative references for Trust Anchor formats and how they can be used to initialize the path validation inputs 🌈. These are needed because of the changes made in Section 4 of this document ⭐.

1.1. Terminology πŸ’œ

Here's the key word part, and it's serious business πŸ™ˆ. 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 RFC 2119 [RFC2119] 🫢.

2. Update to RFC 5280, Section 3.2: "Certification Paths and Trust" πŸ“

Okay, so this section just adds a new paragraph to the very end of RFC 5280, Section 3.2. Here's the exact text you tack on:

Consistent with Section 3.4.61 of X.509 (11/2008) [X.509], we note
that use of self-issued certificates and self-signed certificates
issued by entities other than CAs are outside the scope of this
specification.  Thus, for example, a web server or client might
generate a self-signed certificate to identify itself.  These
certificates and how a relying party uses them to authenticate
asserted identities are both outside the scope of RFC 5280.

Basically, self-issued certs, and self-signed certs issued by anyone who isn't a CA, are outside what this spec covers 🧚. Your web server making its own cert to identify itself is a real example, and how a relying party uses those to authenticate identities is also outside RFC 5280 ✨.

3. Update to RFC 5280, Section 4.2.1.4: "Certificate Policies" πŸŽ€

This one is about the explicitText field. Here's what RFC 5280, Section 4.2.1.4 says in its tenth paragraph right now:

  An explicitText field includes the textual statement directly in
  the certificate.  The explicitText field is a string with a
  maximum size of 200 characters.  Conforming CAs SHOULD use the
| UTF8String encoding for explicitText, but MAY use IA5String.
| Conforming CAs MUST NOT encode explicitText as VisibleString or
| BMPString.  The explicitText string SHOULD NOT include any control
| characters (e.g., U+0000 to U+001F and U+007F to U+009F).  When
| the UTF8String encoding is used, all character sequences SHOULD be
  normalized according to Unicode normalization form C (NFC) [NFC].

That paragraph gets swapped out for this new one πŸ’…:

  An explicitText field includes the textual statement directly in
  the certificate.  The explicitText field is a string with a
  maximum size of 200 characters.  Conforming CAs SHOULD use the
| UTF8String encoding for explicitText.  VisibleString or BMPString
| are acceptable but less preferred alternatives.  Conforming CAs
| MUST NOT encode explicitText as IA5String.  The explicitText string
| SHOULD NOT include any control characters (e.g., U+0000 to U+001F
| and U+007F to U+009F).  When the UTF8String or BMPString encoding
  is used, all character sequences SHOULD be normalized according
  to Unicode normalization form C (NFC) [NFC].

So the big change is that UTF8String is still the one CAs SHOULD use 🌸. VisibleString and BMPString are now acceptable, just less preferred πŸ¦‹. IA5String is now the one that MUST NOT be used 😭. The control character rule stays the same, and normalization to NFC now applies when the encoding is UTF8String or BMPString 🌈.

4. Update to RFC 5280, Section 6.2: "Using the Path Validation Algorithm" 🧚

Next up is Section 6.2. Here's the third paragraph as it reads now:

  Where a CA distributes self-signed certificates to specify trust
  anchor information, certificate extensions can be used to specify
  recommended inputs to path validation.  For example, a policy
  constraints extension could be included in the self-signed
  certificate to indicate that paths beginning with this trust anchor
  should be trusted only for the specified policies.  Similarly, a name
  constraints extension could be included to indicate that paths
  beginning with this trust anchor should be trusted only for the
  specified name spaces.  The path validation algorithm presented in
  Section 6.1 does not assume that trust anchor information is provided
  in self-signed certificates and does not specify processing rules for
| additional information included in such certificates.
| Implementations that use self-signed certificates to specify trust
| anchor information are free to process or ignore such information.

Here's the replacement πŸ‘‘:

  Where a CA distributes self-signed certificates to specify trust
  anchor information, certificate extensions can be used to specify
  recommended inputs to path validation.  For example, a policy
  constraints extension could be included in the self-signed
  certificate to indicate that paths beginning with this trust anchor
  should be trusted only for the specified policies.  Similarly, a name
  constraints extension could be included to indicate that paths
  beginning with this trust anchor should be trusted only for the
  specified name spaces.  The path validation algorithm presented in
  Section 6.1 does not assume that trust anchor information is provided
| in self-signed certificates and does not specify processing rules for
| additional information included in such certificates.
| However, [RFC5914] defines several formats for representing trust
| anchor information, including self-signed certificates, and [RFC5937]
| provides an example of how such information may be used to initialize
| the path validation inputs.  Implementations are free to make use of
| any additional information that is included in a trust anchor
| representation, or to ignore such information.

So now the doc points at [RFC5914] for trust anchor formats and at [RFC5937] for an example of using that info to initialize path validation πŸ¦‹. Implementations can use any extra info in a trust anchor representation, or just ignore it, totally their call πŸ’–.

5. Update to RFC 5280, Section 7.3: "Internationalized Domain Names in Distinguished Names" 🌈

Last one for this part is Section 7.3. Here's the first paragraph right now:

  Domain Names may also be represented as distinguished names using
  domain components in the subject field, the issuer field, the
  subjectAltName extension, or the issuerAltName extension.  As with
  the dNSName in the GeneralName type, the value of this attribute is
  defined as an IA5String.  Each domainComponent attribute represents a
  single label.  To represent a label from an IDN in the distinguished
  name, the implementation MUST perform the "ToASCII" label conversion
| specified in Section 4.1 of RFC 3490.  The label SHALL be considered
| a "stored string".  That is, the AllowUnassigned flag SHALL NOT be
| set.

And here's the replacement ✨:

  Domain Names may also be represented as distinguished names using
  domain components in the subject field, the issuer field, the
  subjectAltName extension, or the issuerAltName extension.  As with
  the dNSName in the GeneralName type, the value of this attribute is
  defined as an IA5String.  Each domainComponent attribute represents a
  single label.  To represent a label from an IDN in the distinguished
  name, the implementation MUST perform the "ToASCII" label conversion
| specified in Section 4.1 of RFC 3490 with the UseSTD3ASCIIRules flag
| set.  The label SHALL be considered a "stored string".  That is, the
| AllowUnassigned flag SHALL NOT be set.  The conversion process is the
| same as is performed in step 4 in Section 7.2.

The new version says the ToASCII conversion has to run with the UseSTD3ASCIIRules flag set πŸ”₯. It also says the conversion process matches step 4 in Section 7.2 πŸŽ€. The "stored string" and AllowUnassigned rules are still there, same as before πŸ’œ.

6. Security Considerations 😭

This section changes the Security Considerations of RFC 5280, and it's honestly kinda serious πŸ™ˆ. Here's the fifth paragraph of RFC 5280's Security Considerations as it currently reads:

  The protection afforded private keys is a critical security factor.
  On a small scale, failure of users to protect their private keys will
  permit an attacker to masquerade as them or decrypt their personal
  information.  On a larger scale, compromise of a CA's private signing
| key may have a catastrophic effect.  If an attacker obtains the
| private key unnoticed, the attacker may issue bogus certificates and
| CRLs.  Existence of bogus certificates and CRLs will undermine
| confidence in the system.  If such a compromise is detected, all
| certificates issued to the compromised CA MUST be revoked, preventing
| services between its users and users of other CAs.  Rebuilding after
| such a compromise will be problematic, so CAs are advised to

Okay, so this is where part 1 wraps up, and the CA key compromise stuff is about to get even more intense 🌈. Part 2 is coming soon, so stay tuned πŸ’–βœ¨

implement a combination of strong technical measures (e.g., tamper-resistant cryptographic modules) and appropriate management procedures (e.g., separation of duties) to avoid such an incident. πŸ” bestie, this is the part where we lock everything down, no cap.

This paragraph gets swapped out for the new one below ✨:

The protection afforded private keys is a critical security factor. πŸ—οΈ On a small scale, failure of users to protect their private keys will permit an attacker to masquerade as them or decrypt their personal information. On a larger scale, compromise of a CA's private signing key may have a catastrophic effect. πŸ’€

If an attacker obtains the private key of a CA unnoticed, the attacker may issue bogus certificates and CRLs. πŸ™ˆ Even if an attacker is unable to obtain a copy of a CA's private key, the attacker may be able to issue bogus certificates and CRLs by making unauthorized use of the CA's workstation or of an RA's workstation. Such an attack may be the result of an attacker obtaining unauthorized access to the workstation, either locally or remotely, or may be the result of inappropriate activity by an insider. Existence of bogus certificates and CRLs will undermine confidence in the system. 😭 Among many other possible attacks, the attacker may issue bogus certificates that have the same subject names as legitimate certificates in order impersonate legitimate certificate subjects. This could include bogus CA certificates in which the subject names in the bogus certificates match the names under which legitimate CAs issue certificates and CRLs. This would allow the attacker to issue bogus certificates and CRLs that have the same issuer names, and possibly the same serial numbers, as certificates and CRLs issued by legitimate CAs.

Then this text gets tacked onto the very end of the Security Considerations section of RFC 5280 πŸŽ€:

One-way hash functions are commonly used to generate key identifier values (AKI and SKI), e.g., as described in Sections 4.1.1 and 4.1.2. However, none of the security properties of such functions are required for this context. 🧚


7. Update to RFC 5280, Section 11.1: "Normative References" 🌸

  • [RFC5914] Housley, R., Ashmore, S., and C. Wallace, "Trust Anchor Format", RFC 5914, June 2010.

8. Update to RFC 5280, Section 11.2: "Informative References" πŸ¦‹

  • [RFC5937] Ashmore, S. and C. Wallace, "Using Trust Anchor Constraints during Certification Path Processing", RFC 5937, August 2010.

9. References πŸ“š

9.1. Normative References

  • [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
  • [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., Housley, R., and W. Polk, "Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile", RFC 5280, May 2008.
  • [RFC5914] Housley, R., Ashmore, S., and C. Wallace, "Trust Anchor Format", RFC 5914, June 2010.
  • [X.509] ITU-T Recommendation X.509 (2008) | ISO/IEC 9594-8:2008, Information Technology - Open Systems Interconnection - The Directory: Public-key and attribute certificate frameworks.

9.2. Informative References

10. Acknowledgements 🫢

David Cooper is acknowledged for his fine work in editing previous versions of this document. He's a legend, fr fr. πŸ‘‘

Author's Address πŸ’œ

Peter E. Yee
AKAYLA
7150 Moorland Drive
Clarksville, MD 21029
USA
EMail: peter@akayla.com
πŸ“¦ where this page comes from