< draft-ietf-pkix-rfc3280bis | rfc5280.txt | |||
---|---|---|---|---|
Network Working Group D. Cooper | Network Working Group D. Cooper | |||
Internet-Draft NIST | Request for Comments: 5280 NIST | |||
Obsoletes: 3280, 4325, 4630 (if approved) S. Santesson | Obsoletes: 3280, 4325, 4630 S. Santesson | |||
Expires: August 2008 Microsoft | Category: Standards Track Microsoft | |||
S. Farrell | S. Farrell | |||
Trinity College Dublin | Trinity College Dublin | |||
S. Boeyen | S. Boeyen | |||
Entrust | Entrust | |||
R. Housley | R. Housley | |||
Vigil Security | Vigil Security | |||
W. Polk | W. Polk | |||
NIST | NIST | |||
February 4, 2008 | May 2008 | |||
Internet X.509 Public Key Infrastructure | ||||
Certificate and Certificate Revocation List (CRL) Profile | ||||
draft-ietf-pkix-rfc3280bis-11.txt | ||||
Status of this Memo | ||||
By submitting this Internet-Draft, each author represents that any | ||||
applicable patent or other IPR claims of which he or she is aware | ||||
have been or will be disclosed, and any of which he or she becomes | ||||
aware will be disclosed, in accordance with Section 6 of BCP 79. | ||||
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 | ||||
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." | ||||
The list of current Internet-Drafts can be accessed at | ||||
http://www.ietf.org/1id-abstracts.html. | ||||
The list of Internet-Draft Shadow Directories can be accessed at | Internet X.509 Public Key Infrastructure Certificate | |||
http://www.ietf.org/shadow.html. | and Certificate Revocation List (CRL) Profile | |||
Copyright Notice | Status of This Memo | |||
Copyright (C) The IETF Trust (2008). | This document specifies an Internet standards track protocol for the | |||
Internet community, and requests discussion and suggestions for | ||||
improvements. Please refer to the current edition of the "Internet | ||||
Official Protocol Standards" (STD 1) for the standardization state | ||||
and status of this protocol. Distribution of this memo is unlimited. | ||||
Abstract | Abstract | |||
This memo profiles the X.509 v3 certificate and X.509 v2 certificate | This memo profiles the X.509 v3 certificate and X.509 v2 certificate | |||
revocation list (CRL) for use in the Internet. An overview of this | revocation list (CRL) for use in the Internet. An overview of this | |||
approach and model are provided as an introduction. The X.509 v3 | approach and model is provided as an introduction. The X.509 v3 | |||
certificate format is described in detail, with additional | certificate format is described in detail, with additional | |||
information regarding the format and semantics of Internet name | information regarding the format and semantics of Internet name | |||
forms. Standard certificate extensions are described and two | forms. Standard certificate extensions are described and two | |||
Internet-specific extensions are defined. A set of required | Internet-specific extensions are defined. A set of required | |||
certificate extensions is specified. The X.509 v2 CRL format is | certificate extensions is specified. The X.509 v2 CRL format is | |||
described in detail along with standard and Internet-specific | described in detail along with standard and Internet-specific | |||
extensions. An algorithm for X.509 certification path validation is | extensions. An algorithm for X.509 certification path validation is | |||
described. An ASN.1 module and examples are provided in the | described. An ASN.1 module and examples are provided in the | |||
appendices. | appendices. | |||
Table of Contents | Table of Contents | |||
1 Introduction . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction ....................................................4 | |||
2 Requirements and Assumptions . . . . . . . . . . . . . . 6 | 2. Requirements and Assumptions ....................................6 | |||
2.1 Communication and Topology . . . . . . . . . . . . . . 7 | 2.1. Communication and Topology .................................7 | |||
2.2 Acceptability Criteria . . . . . . . . . . . . . . . . 7 | 2.2. Acceptability Criteria .....................................7 | |||
2.3 User Expectations . . . . . . . . . . . . . . . . . . . 8 | 2.3. User Expectations ..........................................7 | |||
2.4 Administrator Expectations . . . . . . . . . . . . . . 8 | 2.4. Administrator Expectations .................................8 | |||
3 Overview of Approach . . . . . . . . . . . . . . . . . . 8 | 3. Overview of Approach ............................................8 | |||
3.1 X.509 Version 3 Certificate . . . . . . . . . . . . . . 9 | 3.1. X.509 Version 3 Certificate ................................9 | |||
3.2 Certification Paths and Trust . . . . . . . . . . . . . 11 | 3.2. Certification Paths and Trust .............................10 | |||
3.3 Revocation . . . . . . . . . . . . . . . . . . . . . . 13 | 3.3. Revocation ................................................13 | |||
3.4 Operational Protocols . . . . . . . . . . . . . . . . . 14 | 3.4. Operational Protocols .....................................14 | |||
3.5 Management Protocols . . . . . . . . . . . . . . . . . 14 | 3.5. Management Protocols ......................................14 | |||
4 Certificate and Certificate Extensions Profile . . . . . 16 | 4. Certificate and Certificate Extensions Profile .................16 | |||
4.1 Basic Certificate Fields . . . . . . . . . . . . . . . 16 | 4.1. Basic Certificate Fields ..................................16 | |||
4.1.1 Certificate Fields . . . . . . . . . . . . . . . . . 17 | 4.1.1. Certificate Fields .................................17 | |||
4.1.1.1 tbsCertificate . . . . . . . . . . . . . . . . . . 17 | 4.1.1.1. tbsCertificate ............................18 | |||
4.1.1.2 signatureAlgorithm . . . . . . . . . . . . . . . . 18 | 4.1.1.2. signatureAlgorithm ........................18 | |||
4.1.1.3 signatureValue . . . . . . . . . . . . . . . . . . 18 | 4.1.1.3. signatureValue ............................18 | |||
4.1.2 TBSCertificate . . . . . . . . . . . . . . . . . . . 18 | 4.1.2. TBSCertificate .....................................18 | |||
4.1.2.1 Version . . . . . . . . . . . . . . . . . . . . . . 19 | 4.1.2.1. Version ...................................19 | |||
4.1.2.2 Serial number . . . . . . . . . . . . . . . . . . . 19 | 4.1.2.2. Serial Number .............................19 | |||
4.1.2.3 Signature . . . . . . . . . . . . . . . . . . . . . 19 | 4.1.2.3. Signature .................................19 | |||
4.1.2.4 Issuer . . . . . . . . . . . . . . . . . . . . . . 20 | 4.1.2.4. Issuer ....................................20 | |||
4.1.2.5 Validity . . . . . . . . . . . . . . . . . . . . . 22 | 4.1.2.5. Validity ..................................22 | |||
4.1.2.5.1 UTCTime . . . . . . . . . . . . . . . . . . . . . 23 | 4.1.2.5.1. UTCTime ........................23 | |||
4.1.2.5.2 GeneralizedTime . . . . . . . . . . . . . . . . . 23 | 4.1.2.5.2. GeneralizedTime ................23 | |||
4.1.2.6 Subject . . . . . . . . . . . . . . . . . . . . . . 23 | 4.1.2.6. Subject ...................................23 | |||
4.1.2.7 Subject Public Key Info . . . . . . . . . . . . . . 25 | 4.1.2.7. Subject Public Key Info ...................25 | |||
4.1.2.8 Unique Identifiers . . . . . . . . . . . . . . . . 25 | 4.1.2.8. Unique Identifiers ........................25 | |||
4.1.2.9 Extensions . . . . . . . . . . . . . . . . . . . . 25 | 4.1.2.9. Extensions ................................26 | |||
4.2 Certificate Extensions . . . . . . . . . . . . . . . . 26 | 4.2. Certificate Extensions ....................................26 | |||
4.2.1 Standard Extensions . . . . . . . . . . . . . . . . . 27 | 4.2.1. Standard Extensions ................................27 | |||
4.2.1.1 Authority Key Identifier . . . . . . . . . . . . . 27 | 4.2.1.1. Authority Key Identifier ..................27 | |||
4.2.1.2 Subject Key Identifier . . . . . . . . . . . . . . 28 | 4.2.1.2. Subject Key Identifier ....................28 | |||
4.2.1.3 Key Usage . . . . . . . . . . . . . . . . . . . . . 29 | 4.2.1.3. Key Usage .................................29 | |||
4.2.1.4 Certificate Policies . . . . . . . . . . . . . . . 31 | 4.2.1.4. Certificate Policies ......................32 | |||
4.2.1.5 Policy Mappings . . . . . . . . . . . . . . . . . . 34 | 4.2.1.5. Policy Mappings ...........................35 | |||
4.2.1.6 Subject Alternative Name . . . . . . . . . . . . . 35 | 4.2.1.6. Subject Alternative Name ..................35 | |||
4.2.1.7 Issuer Alternative Name . . . . . . . . . . . . . . 38 | 4.2.1.7. Issuer Alternative Name ...................38 | |||
4.2.1.8 Subject Directory Attributes . . . . . . . . . . . 38 | 4.2.1.8. Subject Directory Attributes ..............39 | |||
4.2.1.9 Basic Constraints . . . . . . . . . . . . . . . . . 38 | 4.2.1.9. Basic Constraints .........................39 | |||
4.2.1.10 Name Constraints . . . . . . . . . . . . . . . . . 39 | 4.2.1.10. Name Constraints .........................40 | |||
4.2.1.11 Policy Constraints . . . . . . . . . . . . . . . . 42 | 4.2.1.11. Policy Constraints .......................43 | |||
4.2.1.12 Extended Key Usage . . . . . . . . . . . . . . . . 43 | 4.2.1.12. Extended Key Usage .......................44 | |||
4.2.1.13 CRL Distribution Points . . . . . . . . . . . . . 45 | 4.2.1.13. CRL Distribution Points ..................45 | |||
4.2.1.14 Inhibit anyPolicy . . . . . . . . . . . . . . . . 47 | 4.2.1.14. Inhibit anyPolicy ........................48 | |||
4.2.1.15 Freshest CRL . . . . . . . . . . . . . . . . . . . 47 | 4.2.1.15. Freshest CRL (a.k.a. Delta CRL | |||
4.2.2 Private Internet Extensions . . . . . . . . . . . . . 48 | Distribution Point) ......................48 | |||
4.2.2.1 Authority Information Access . . . . . . . . . . . 48 | 4.2.2. Private Internet Extensions ........................49 | |||
4.2.2.2 Subject Information Access . . . . . . . . . . . . 51 | 4.2.2.1. Authority Information Access ..............49 | |||
5 CRL and CRL Extensions Profile . . . . . . . . . . . . . 53 | 4.2.2.2. Subject Information Access ................51 | |||
5.1 CRL Fields . . . . . . . . . . . . . . . . . . . . . . 54 | 5. CRL and CRL Extensions Profile .................................54 | |||
5.1.1 CertificateList Fields . . . . . . . . . . . . . . . 55 | 5.1. CRL Fields ................................................55 | |||
5.1.1.1 tbsCertList . . . . . . . . . . . . . . . . . . . . 55 | 5.1.1. CertificateList Fields .............................56 | |||
5.1.1.2 signatureAlgorithm . . . . . . . . . . . . . . . . 56 | 5.1.1.1. tbsCertList ...............................56 | |||
5.1.1.3 signatureValue . . . . . . . . . . . . . . . . . . 56 | 5.1.1.2. signatureAlgorithm ........................57 | |||
5.1.2 Certificate List "To Be Signed" . . . . . . . . . . . 56 | 5.1.1.3. signatureValue ............................57 | |||
5.1.2.1 Version . . . . . . . . . . . . . . . . . . . . . . 57 | 5.1.2. Certificate List "To Be Signed" ....................58 | |||
5.1.2.2 Signature . . . . . . . . . . . . . . . . . . . . . 57 | 5.1.2.1. Version ...................................58 | |||
5.1.2.3 Issuer Name . . . . . . . . . . . . . . . . . . . . 57 | 5.1.2.2. Signature .................................58 | |||
5.1.2.4 This Update . . . . . . . . . . . . . . . . . . . . 57 | 5.1.2.3. Issuer Name ...............................58 | |||
5.1.2.5 Next Update . . . . . . . . . . . . . . . . . . . . 58 | 5.1.2.4. This Update ...............................58 | |||
5.1.2.6 Revoked Certificates . . . . . . . . . . . . . . . 58 | 5.1.2.5. Next Update ...............................59 | |||
5.1.2.7 Extensions . . . . . . . . . . . . . . . . . . . . 58 | 5.1.2.6. Revoked Certificates ......................59 | |||
5.2 CRL Extensions . . . . . . . . . . . . . . . . . . . . 59 | 5.1.2.7. Extensions ................................60 | |||
5.2.1 Authority Key Identifier . . . . . . . . . . . . . . 59 | 5.2. CRL Extensions ............................................60 | |||
5.2.2 Issuer Alternative Name . . . . . . . . . . . . . . . 59 | 5.2.1. Authority Key Identifier ...........................60 | |||
5.2.3 CRL Number . . . . . . . . . . . . . . . . . . . . . 60 | 5.2.2. Issuer Alternative Name ............................60 | |||
5.2.4 Delta CRL Indicator . . . . . . . . . . . . . . . . . 60 | 5.2.3. CRL Number .........................................61 | |||
5.2.5 Issuing Distribution Point . . . . . . . . . . . . . 63 | 5.2.4. Delta CRL Indicator ................................62 | |||
5.2.6 Freshest CRL . . . . . . . . . . . . . . . . . . . . 65 | 5.2.5. Issuing Distribution Point .........................65 | |||
5.2.7 Authority Information Access . . . . . . . . . . . . 66 | 5.2.6. Freshest CRL (a.k.a. Delta CRL Distribution | |||
5.3 CRL Entry Extensions . . . . . . . . . . . . . . . . . 67 | Point) .............................................67 | |||
5.3.1 Reason Code . . . . . . . . . . . . . . . . . . . . . 68 | 5.2.7. Authority Information Access .......................67 | |||
5.3.2 Invalidity Date . . . . . . . . . . . . . . . . . . . 68 | 5.3. CRL Entry Extensions ......................................69 | |||
5.3.3 Certificate Issuer . . . . . . . . . . . . . . . . . 69 | 5.3.1. Reason Code ........................................69 | |||
6 Certification Path Validation . . . . . . . . . . . . . . 69 | 5.3.2. Invalidity Date ....................................70 | |||
6.1 Basic Path Validation . . . . . . . . . . . . . . . . . 70 | 5.3.3. Certificate Issuer .................................70 | |||
6.1.1 Inputs . . . . . . . . . . . . . . . . . . . . . . . 73 | 6. Certification Path Validation ..................................71 | |||
6.1.2 Initialization . . . . . . . . . . . . . . . . . . . 75 | 6.1. Basic Path Validation .....................................72 | |||
6.1.3 Basic Certificate Processing . . . . . . . . . . . . 77 | 6.1.1. Inputs .............................................75 | |||
6.1.4 Preparation for Certificate i+1 . . . . . . . . . . . 82 | 6.1.2. Initialization .....................................77 | |||
6.1.5 Wrap-up procedure . . . . . . . . . . . . . . . . . . 85 | 6.1.3. Basic Certificate Processing .......................80 | |||
6.1.6 Outputs . . . . . . . . . . . . . . . . . . . . . . . 87 | 6.1.4. Preparation for Certificate i+1 ....................84 | |||
6.2 Using the Path Validation Algorithm . . . . . . . . . . 87 | 6.1.5. Wrap-Up Procedure ..................................87 | |||
6.3 CRL Validation . . . . . . . . . . . . . . . . . . . . 88 | 6.1.6. Outputs ............................................89 | |||
6.3.1 Revocation Inputs . . . . . . . . . . . . . . . . . . 88 | 6.2. Using the Path Validation Algorithm .......................89 | |||
6.3.2 Initialization and Revocation State Variables . . . . 88 | 6.3. CRL Validation ............................................90 | |||
6.3.3 CRL Processing . . . . . . . . . . . . . . . . . . . 89 | 6.3.1. Revocation Inputs ..................................91 | |||
7 Processing Rules for Internationalized Names . . . . . . 92 | 6.3.2. Initialization and Revocation State Variables ......91 | |||
7.1 Internationalized Names in Distinguished Names . . . . 93 | 6.3.3. CRL Processing .....................................92 | |||
7.2 Internationalized Domain Names in GeneralName . . . . . 94 | 7. Processing Rules for Internationalized Names ...................95 | |||
7.3 Internationalized Domain Names in Distinguished Names . 95 | 7.1. Internationalized Names in Distinguished Names ............96 | |||
7.4 Internationalized Resource Identifiers . . . . . . . . 95 | 7.2. Internationalized Domain Names in GeneralName .............97 | |||
7.5 Internationalized Electronic Mail Addresses . . . . . . 97 | 7.3. Internationalized Domain Names in Distinguished Names .....98 | |||
8 References . . . . . . . . . . . . . . . . . . . . . . . 97 | 7.4. Internationalized Resource Identifiers ....................98 | |||
9 Intellectual Property Rights . . . . . . . . . . . . . . 102 | 7.5. Internationalized Electronic Mail Addresses ..............100 | |||
10 Security Considerations . . . . . . . . . . . . . . . . 102 | 8. Security Considerations .......................................100 | |||
11 IANA Considerations . . . . . . . . . . . . . . . . . . 107 | 9. IANA Considerations ...........................................105 | |||
12 Authors' Addresses . . . . . . . . . . . . . . . . . . . 107 | 10. Acknowledgments ..............................................105 | |||
13 Acknowledgments . . . . . . . . . . . . . . . . . . . . 108 | 11. References ...................................................105 | |||
Appendix A. Pseudo-ASN.1 Structures and OIDs . . . . . . . 108 | 11.1. Normative References ....................................105 | |||
A.1 Explicitly Tagged Module, 1988 Syntax . . . . . . . . . 108 | 11.2. Informative References ..................................107 | |||
A.2 Implicitly Tagged Module, 1988 Syntax . . . . . . . . . 122 | Appendix A. Pseudo-ASN.1 Structures and OIDs ....................110 | |||
Appendix B. ASN.1 Notes . . . . . . . . . . . . . . . . . . 129 | A.1. Explicitly Tagged Module, 1988 Syntax ....................110 | |||
Appendix C. Examples . . . . . . . . . . . . . . . . . . . 132 | A.2. Implicitly Tagged Module, 1988 Syntax ....................125 | |||
C.1 RSA Self-Signed Certificate . . . . . . . . . . . . . . 133 | Appendix B. ASN.1 Notes ..........................................133 | |||
C.2 End Entity Certificate Using RSA . . . . . . . . . . . 136 | Appendix C. Examples .............................................136 | |||
C.3 End Entity Certificate Using DSA . . . . . . . . . . . 139 | C.1. RSA Self-Signed Certificate ..............................137 | |||
C.4 Certificate Revocation List . . . . . . . . . . . . . . 143 | C.2. End Entity Certificate Using RSA .........................140 | |||
Full Copyright Statement . . . . . . . . . . . . . . . . . . 145 | C.3. End Entity Certificate Using DSA .........................143 | |||
C.4. Certificate Revocation List ..............................147 | ||||
1 Introduction | 1. Introduction | |||
This specification is one part of a family of standards for the X.509 | This specification is one part of a family of standards for the X.509 | |||
Public Key Infrastructure (PKI) for the Internet. | Public Key Infrastructure (PKI) for the Internet. | |||
This specification profiles the format and semantics of certificates | This specification profiles the format and semantics of certificates | |||
and certificate revocation lists (CRLs) for the Internet PKI. | and certificate revocation lists (CRLs) for the Internet PKI. | |||
Procedures are described for processing of certification paths in the | Procedures are described for processing of certification paths in the | |||
Internet environment. Finally, ASN.1 modules are provided in the | Internet environment. Finally, ASN.1 modules are provided in the | |||
appendices for all data structures defined or referenced. | appendices for all data structures defined or referenced. | |||
Section 2 describes Internet PKI requirements, and the assumptions | Section 2 describes Internet PKI requirements and the assumptions | |||
that affect the scope of this document. Section 3 presents an | that affect the scope of this document. Section 3 presents an | |||
architectural model and describes its relationship to previous IETF | architectural model and describes its relationship to previous IETF | |||
and ISO/IEC/ITU-T standards. In particular, this document's | and ISO/IEC/ITU-T standards. In particular, this document's | |||
relationship with the IETF PEM specifications and the ISO/IEC/ITU-T | relationship with the IETF PEM specifications and the ISO/IEC/ITU-T | |||
X.509 documents are described. | X.509 documents is described. | |||
Section 4 profiles the X.509 version 3 certificate, and section 5 | Section 4 profiles the X.509 version 3 certificate, and Section 5 | |||
profiles the X.509 version 2 CRL. The profiles include the | profiles the X.509 version 2 CRL. The profiles include the | |||
identification of ISO/IEC/ITU-T and ANSI extensions which may be | identification of ISO/IEC/ITU-T and ANSI extensions that may be | |||
useful in the Internet PKI. The profiles are presented in the 1988 | useful in the Internet PKI. The profiles are presented in the 1988 | |||
Abstract Syntax Notation One (ASN.1) rather than the 1997 ASN.1 | Abstract Syntax Notation One (ASN.1) rather than the 1997 ASN.1 | |||
syntax used in the most recent ISO/IEC/ITU-T standards. | syntax used in the most recent ISO/IEC/ITU-T standards. | |||
Section 6 includes certification path validation procedures. These | Section 6 includes certification path validation procedures. These | |||
procedures are based upon the ISO/IEC/ITU-T definition. | procedures are based upon the ISO/IEC/ITU-T definition. | |||
Implementations are REQUIRED to derive the same results but are not | Implementations are REQUIRED to derive the same results but are not | |||
required to use the specified procedures. | required to use the specified procedures. | |||
Procedures for identification and encoding of public key materials | Procedures for identification and encoding of public key materials | |||
and digital signatures are defined in [RFC 3279], [RFC 4055], and | and digital signatures are defined in [RFC3279], [RFC4055], and | |||
[RFC 4491]. Implementations of this specification are not required | [RFC4491]. Implementations of this specification are not required to | |||
to use any particular cryptographic algorithms. However, conforming | use any particular cryptographic algorithms. However, conforming | |||
implementations that use the algorithms identified in [RFC 3279], | implementations that use the algorithms identified in [RFC3279], | |||
[RFC 4055], and [RFC 4491] MUST identify and encode the public key | [RFC4055], and [RFC4491] MUST identify and encode the public key | |||
materials and digital signatures as described in those | materials and digital signatures as described in those | |||
specifications. | specifications. | |||
Finally, three appendices are provided to aid implementers. Appendix | Finally, three appendices are provided to aid implementers. Appendix | |||
A contains all ASN.1 structures defined or referenced within this | A contains all ASN.1 structures defined or referenced within this | |||
specification. As above, the material is presented in the 1988 | specification. As above, the material is presented in the 1988 | |||
ASN.1. Appendix B contains notes on less familiar features of the | ASN.1. Appendix B contains notes on less familiar features of the | |||
ASN.1 notation used within this specification. Appendix C contains | ASN.1 notation used within this specification. Appendix C contains | |||
examples of conforming certificates and a conforming CRL. | examples of conforming certificates and a conforming CRL. | |||
This specification obsoletes [RFC 3280]. Differences from RFC 3280 | This specification obsoletes [RFC3280]. Differences from RFC 3280 | |||
are summarized below: | are summarized below: | |||
* Enhanced support for internationalized names is specified in | * Enhanced support for internationalized names is specified in | |||
section 7, with rules for encoding and comparing internationalized | Section 7, with rules for encoding and comparing | |||
domain names, IRIs, and distinguished names. These rules are | Internationalized Domain Names, Internationalized Resource | |||
aligned with comparison rules established in current RFCs, | Identifiers (IRIs), and distinguished names. These rules are | |||
including [RFC 3490], [RFC 3987], and [RFC 4518]. | aligned with comparison rules established in current RFCs, | |||
including [RFC3490], [RFC3987], and [RFC4518]. | ||||
* Sections 4.1.2.4 and 4.1.2.6 incorporate the conditions for | * Sections 4.1.2.4 and 4.1.2.6 incorporate the conditions for | |||
continued use of legacy text encoding schemes that were specified | continued use of legacy text encoding schemes that were | |||
in [RFC 4630]. Where in use by an established PKI, transition to | specified in [RFC4630]. Where in use by an established PKI, | |||
UTF8String could cause denial of service based on name chaining | transition to UTF8String could cause denial of service based on | |||
failures or incorrect processing of name constraints. | name chaining failures or incorrect processing of name | |||
constraints. | ||||
* Section 4.2.1.4 in RFC 3280, which specified the | * Section 4.2.1.4 in RFC 3280, which specified the | |||
privateKeyUsagePeriod certificate extension but deprecated its | privateKeyUsagePeriod certificate extension but deprecated its | |||
use, was removed. Use of this ISO standard extension is neither | use, was removed. Use of this ISO standard extension is neither | |||
deprecated nor recommended for use in the Internet PKI. | deprecated nor recommended for use in the Internet PKI. | |||
* Section 4.2.1.5 recommends marking the policy mappings extension | * Section 4.2.1.5 recommends marking the policy mappings extension | |||
as critical. RFC 3280 required that the policy mappings extension | as critical. RFC 3280 required that the policy mappings | |||
be marked as non-critical. | extension be marked as non-critical. | |||
* Section 4.2.1.11 requires marking the policy constraints | * Section 4.2.1.11 requires marking the policy constraints | |||
extension as critical. RFC 3280 permitted the policy constraints | extension as critical. RFC 3280 permitted the policy | |||
extension to be marked as critical or non-critical. | constraints extension to be marked as critical or non-critical. | |||
* The Authority Information Access (AIA) CRL extension, as | * The Authority Information Access (AIA) CRL extension, as | |||
specified in [RFC 4325], was added as section 5.2.7. | specified in [RFC4325], was added as Section 5.2.7. | |||
* Sections 5.2 and 5.3 clarify the rules for handling unrecognized | * Sections 5.2 and 5.3 clarify the rules for handling unrecognized | |||
CRL extensions and CRL entry extensions, respectively. | CRL extensions and CRL entry extensions, respectively. | |||
* Section 5.3.2 in RFC 3280, which specified the | * Section 5.3.2 in RFC 3280, which specified the | |||
holdInstructionCode CRL entry extension, was removed. | holdInstructionCode CRL entry extension, was removed. | |||
* The path validation algorithm specified in section 6 no longer | * The path validation algorithm specified in Section 6 no longer | |||
tracks the criticality of the certificate policies extensions in a | tracks the criticality of the certificate policies extensions in | |||
chain of certificates. In RFC 3280, this information was returned | a chain of certificates. In RFC 3280, this information was | |||
to a relying party. | returned to a relying party. | |||
* The Security Considerations section addresses the risk of | * The Security Considerations section addresses the risk of | |||
circular dependencies arising from the use of https or similar | circular dependencies arising from the use of https or similar | |||
schemes in the CRL distribution points, authority information | schemes in the CRL distribution points, authority information | |||
access, or subject information access extensions. | access, or subject information access extensions. | |||
* The Security Considerations section addresses risks associated | * The Security Considerations section addresses risks associated | |||
with name ambiguity. | with name ambiguity. | |||
* The Security Considerations section references RFC 4210 for | * The Security Considerations section references RFC 4210 for | |||
procedures to signal changes in CA operations. | procedures to signal changes in CA operations. | |||
The ASN.1 modules in appendix A are unchanged from RFC 3280, except | The ASN.1 modules in Appendix A are unchanged from RFC 3280, except | |||
that ub-emailaddress-length was changed from 128 to 255 in order to | that ub-emailaddress-length was changed from 128 to 255 in order to | |||
align with PKCS #9 [RFC 2985]. | align with PKCS #9 [RFC2985]. | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in [RFC 2119]. | document are to be interpreted as described in [RFC2119]. | |||
2 Requirements and Assumptions | 2. Requirements and Assumptions | |||
The goal of this specification is to develop a profile to facilitate | The goal of this specification is to develop a profile to facilitate | |||
the use of X.509 certificates within Internet applications for those | the use of X.509 certificates within Internet applications for those | |||
communities wishing to make use of X.509 technology. Such | communities wishing to make use of X.509 technology. Such | |||
applications may include WWW, electronic mail, user authentication, | applications may include WWW, electronic mail, user authentication, | |||
and IPsec. In order to relieve some of the obstacles to using X.509 | and IPsec. In order to relieve some of the obstacles to using X.509 | |||
certificates, this document defines a profile to promote the | certificates, this document defines a profile to promote the | |||
development of certificate management systems; development of | development of certificate management systems, development of | |||
application tools; and interoperability determined by policy. | application tools, and interoperability determined by policy. | |||
Some communities will need to supplement, or possibly replace, this | Some communities will need to supplement, or possibly replace, this | |||
profile in order to meet the requirements of specialized application | profile in order to meet the requirements of specialized application | |||
domains or environments with additional authorization, assurance, or | domains or environments with additional authorization, assurance, or | |||
operational requirements. However, for basic applications, common | operational requirements. However, for basic applications, common | |||
representations of frequently used attributes are defined so that | representations of frequently used attributes are defined so that | |||
application developers can obtain necessary information without | application developers can obtain necessary information without | |||
regard to the issuer of a particular certificate or certificate | regard to the issuer of a particular certificate or certificate | |||
revocation list (CRL). | revocation list (CRL). | |||
skipping to change at page 7, line 29 ¶ | skipping to change at page 7, line 20 ¶ | |||
or non-repudiation services associated with the public key in a | or non-repudiation services associated with the public key in a | |||
particular certificate. To this end, this standard does not | particular certificate. To this end, this standard does not | |||
prescribe legally binding rules or duties. | prescribe legally binding rules or duties. | |||
As supplemental authorization and attribute management tools emerge, | As supplemental authorization and attribute management tools emerge, | |||
such as attribute certificates, it may be appropriate to limit the | such as attribute certificates, it may be appropriate to limit the | |||
authenticated attributes that are included in a certificate. These | authenticated attributes that are included in a certificate. These | |||
other management tools may provide more appropriate methods of | other management tools may provide more appropriate methods of | |||
conveying many authenticated attributes. | conveying many authenticated attributes. | |||
2.1 Communication and Topology | 2.1. Communication and Topology | |||
The users of certificates will operate in a wide range of | The users of certificates will operate in a wide range of | |||
environments with respect to their communication topology, especially | environments with respect to their communication topology, especially | |||
users of secure electronic mail. This profile supports users without | users of secure electronic mail. This profile supports users without | |||
high bandwidth, real-time IP connectivity, or high connection | high bandwidth, real-time IP connectivity, or high connection | |||
availability. In addition, the profile allows for the presence of | availability. In addition, the profile allows for the presence of | |||
firewall or other filtered communication. | firewall or other filtered communication. | |||
This profile does not assume the deployment of an X.500 directory | This profile does not assume the deployment of an X.500 directory | |||
system [X.500] or a Lightweight Directory Access Protocol (LDAP) | system [X.500] or a Lightweight Directory Access Protocol (LDAP) | |||
directory system [RFC 4510]. The profile does not prohibit the use | directory system [RFC4510]. The profile does not prohibit the use of | |||
of an X.500 directory or a LDAP directory; however, any means of | an X.500 directory or an LDAP directory; however, any means of | |||
distributing certificates and certificate revocation lists (CRLs) may | distributing certificates and certificate revocation lists (CRLs) may | |||
be used. | be used. | |||
2.2 Acceptability Criteria | 2.2. Acceptability Criteria | |||
The goal of the Internet Public Key Infrastructure (PKI) is to meet | The goal of the Internet Public Key Infrastructure (PKI) is to meet | |||
the needs of deterministic, automated identification, authentication, | the needs of deterministic, automated identification, authentication, | |||
access control, and authorization functions. Support for these | access control, and authorization functions. Support for these | |||
services determines the attributes contained in the certificate as | services determines the attributes contained in the certificate as | |||
well as the ancillary control information in the certificate such as | well as the ancillary control information in the certificate such as | |||
policy data and certification path constraints. | policy data and certification path constraints. | |||
2.3 User Expectations | 2.3. User Expectations | |||
Users of the Internet PKI are people and processes who use client | Users of the Internet PKI are people and processes who use client | |||
software and are the subjects named in certificates. These uses | software and are the subjects named in certificates. These uses | |||
include readers and writers of electronic mail, the clients for WWW | include readers and writers of electronic mail, the clients for WWW | |||
browsers, WWW servers, and the key manager for IPsec within a router. | browsers, WWW servers, and the key manager for IPsec within a router. | |||
This profile recognizes the limitations of the platforms these users | This profile recognizes the limitations of the platforms these users | |||
employ and the limitations in sophistication and attentiveness of the | employ and the limitations in sophistication and attentiveness of the | |||
users themselves. This manifests itself in minimal user | users themselves. This manifests itself in minimal user | |||
configuration responsibility (e.g., trusted CA keys, rules), explicit | configuration responsibility (e.g., trusted CA keys, rules), explicit | |||
platform usage constraints within the certificate, certification path | platform usage constraints within the certificate, certification path | |||
constraints that shield the user from many malicious actions, and | constraints that shield the user from many malicious actions, and | |||
applications that sensibly automate validation functions. | applications that sensibly automate validation functions. | |||
2.4 Administrator Expectations | 2.4. Administrator Expectations | |||
As with user expectations, the Internet PKI profile is structured to | As with user expectations, the Internet PKI profile is structured to | |||
support the individuals who generally operate CAs. Providing | support the individuals who generally operate CAs. Providing | |||
administrators with unbounded choices increases the chances that a | administrators with unbounded choices increases the chances that a | |||
subtle CA administrator mistake will result in broad compromise. | subtle CA administrator mistake will result in broad compromise. | |||
Also, unbounded choices greatly complicate the software that process | Also, unbounded choices greatly complicate the software that process | |||
and validate the certificates created by the CA. | and validate the certificates created by the CA. | |||
3 Overview of Approach | 3. Overview of Approach | |||
Following is a simplified view of the architectural model assumed by | Following is a simplified view of the architectural model assumed by | |||
the PKIX specifications. | the Public-Key Infrastructure using X.509 (PKIX) specifications. | |||
The components in this model are: | The components in this model are: | |||
end entity: user of PKI certificates and/or end user system that is | end entity: user of PKI certificates and/or end user system that is | |||
the subject of a certificate; | the subject of a certificate; | |||
CA: certification authority; | CA: certification authority; | |||
RA: registration authority, i.e., an optional system to which | RA: registration authority, i.e., an optional system to which | |||
a CA delegates certain management functions; | a CA delegates certain management functions; | |||
CRL issuer: a system that generates and signs CRLs; | CRL issuer: a system that generates and signs CRLs; and | |||
repository: a system or collection of distributed systems that stores | repository: a system or collection of distributed systems that stores | |||
certificates and CRLs and serves as a means of | certificates and CRLs and serves as a means of | |||
distributing these certificates and CRLs to end entities. | distributing these certificates and CRLs to end entities. | |||
CAs are responsible for indicating the revocation status of the | CAs are responsible for indicating the revocation status of the | |||
certificates that they issue. Revocation status information may be | certificates that they issue. Revocation status information may be | |||
provided using the Online Certificate Status Protocol (OCSP) | provided using the Online Certificate Status Protocol (OCSP) | |||
[RFC 2560], certificate revocation lists (CRLs), or some other | [RFC2560], certificate revocation lists (CRLs), or some other | |||
mechanism. In general, when revocation status information is | mechanism. In general, when revocation status information is | |||
provided using CRLs, the CA is also the CRL issuer. However, a CA | provided using CRLs, the CA is also the CRL issuer. However, a CA | |||
may delegate the responsibility for issuing CRLs to a different | may delegate the responsibility for issuing CRLs to a different | |||
entity. | entity. | |||
Note that an Attribute Authority (AA) might also choose to delegate | Note that an Attribute Authority (AA) might also choose to delegate | |||
the publication of CRLs to a CRL issuer. | the publication of CRLs to a CRL issuer. | |||
+---+ | +---+ | |||
| C | +------------+ | | C | +------------+ | |||
skipping to change at page 9, line 45 ¶ | skipping to change at page 9, line 36 ¶ | |||
| p | Publish certificate +------------+ | | p | Publish certificate +------------+ | |||
| o | Publish CRL ^ ^ | | o | Publish CRL ^ ^ | |||
| s | | | Management | | s | | | Management | |||
| i | +------------+ | | transactions | | i | +------------+ | | transactions | |||
| t | <--------------| CRL Issuer |<----+ | | | t | <--------------| CRL Issuer |<----+ | | |||
| o | Publish CRL +------------+ v | | o | Publish CRL +------------+ v | |||
| r | +------+ | | r | +------+ | |||
| y | | CA | | | y | | CA | | |||
+---+ +------+ | +---+ +------+ | |||
Figure 1 - PKI Entities | Figure 1. PKI Entities | |||
3.1 X.509 Version 3 Certificate | 3.1. X.509 Version 3 Certificate | |||
Users of a public key require confidence that the associated private | Users of a public key require confidence that the associated private | |||
key is owned by the correct remote subject (person or system) with | key is owned by the correct remote subject (person or system) with | |||
which an encryption or digital signature mechanism will be used. | which an encryption or digital signature mechanism will be used. | |||
This confidence is obtained through the use of public key | This confidence is obtained through the use of public key | |||
certificates, which are data structures that bind public key values | certificates, which are data structures that bind public key values | |||
to subjects. The binding is asserted by having a trusted CA | to subjects. The binding is asserted by having a trusted CA | |||
digitally sign each certificate. The CA may base this assertion upon | digitally sign each certificate. The CA may base this assertion upon | |||
technical means (a.k.a., proof of possession through a challenge- | technical means (a.k.a., proof of possession through a challenge- | |||
response protocol), presentation of the private key, or on an | response protocol), presentation of the private key, or on an | |||
assertion by the subject. A certificate has a limited valid | assertion by the subject. A certificate has a limited valid | |||
lifetime, which is indicated in its signed contents. Because a | lifetime, which is indicated in its signed contents. Because a | |||
certificate's signature and timeliness can be independently checked | certificate's signature and timeliness can be independently checked | |||
by a certificate-using client, certificates can be distributed via | by a certificate-using client, certificates can be distributed via | |||
skipping to change at page 10, line 27 ¶ | skipping to change at page 10, line 16 ¶ | |||
ITU-T X.509 (formerly CCITT X.509) or ISO/IEC 9594-8, which was first | ITU-T X.509 (formerly CCITT X.509) or ISO/IEC 9594-8, which was first | |||
published in 1988 as part of the X.500 directory recommendations, | published in 1988 as part of the X.500 directory recommendations, | |||
defines a standard certificate format [X.509]. The certificate | defines a standard certificate format [X.509]. The certificate | |||
format in the 1988 standard is called the version 1 (v1) format. | format in the 1988 standard is called the version 1 (v1) format. | |||
When X.500 was revised in 1993, two more fields were added, resulting | When X.500 was revised in 1993, two more fields were added, resulting | |||
in the version 2 (v2) format. | in the version 2 (v2) format. | |||
The Internet Privacy Enhanced Mail (PEM) RFCs, published in 1993, | The Internet Privacy Enhanced Mail (PEM) RFCs, published in 1993, | |||
include specifications for a public key infrastructure based on X.509 | include specifications for a public key infrastructure based on X.509 | |||
v1 certificates [RFC 1422]. The experience gained in attempts to | v1 certificates [RFC1422]. The experience gained in attempts to | |||
deploy RFC 1422 made it clear that the v1 and v2 certificate formats | deploy RFC 1422 made it clear that the v1 and v2 certificate formats | |||
were deficient in several respects. Most importantly, more fields | were deficient in several respects. Most importantly, more fields | |||
were needed to carry information that PEM design and implementation | were needed to carry information that PEM design and implementation | |||
experience had proven necessary. In response to these new | experience had proven necessary. In response to these new | |||
requirements, ISO/IEC, ITU-T and ANSI X9 developed the X.509 version | requirements, the ISO/IEC, ITU-T, and ANSI X9 developed the X.509 | |||
3 (v3) certificate format. The v3 format extends the v2 format by | version 3 (v3) certificate format. The v3 format extends the v2 | |||
adding provision for additional extension fields. Particular | format by adding provision for additional extension fields. | |||
extension field types may be specified in standards or may be defined | Particular extension field types may be specified in standards or may | |||
and registered by any organization or community. In June 1996, | be defined and registered by any organization or community. In June | |||
standardization of the basic v3 format was completed [X.509]. | 1996, standardization of the basic v3 format was completed [X.509]. | |||
ISO/IEC, ITU-T, and ANSI X9 have also developed standard extensions | ISO/IEC, ITU-T, and ANSI X9 have also developed standard extensions | |||
for use in the v3 extensions field [X.509][X9.55]. These extensions | for use in the v3 extensions field [X.509][X9.55]. These extensions | |||
can convey such data as additional subject identification | can convey such data as additional subject identification | |||
information, key attribute information, policy information, and | information, key attribute information, policy information, and | |||
certification path constraints. | certification path constraints. | |||
However, the ISO/IEC, ITU-T, and ANSI X9 standard extensions are very | However, the ISO/IEC, ITU-T, and ANSI X9 standard extensions are very | |||
broad in their applicability. In order to develop interoperable | broad in their applicability. In order to develop interoperable | |||
implementations of X.509 v3 systems for Internet use, it is necessary | implementations of X.509 v3 systems for Internet use, it is necessary | |||
to specify a profile for use of the X.509 v3 extensions tailored for | to specify a profile for use of the X.509 v3 extensions tailored for | |||
the Internet. It is one goal of this document to specify a profile | the Internet. It is one goal of this document to specify a profile | |||
for Internet WWW, electronic mail, and IPsec applications. | for Internet WWW, electronic mail, and IPsec applications. | |||
Environments with additional requirements may build on this profile | Environments with additional requirements may build on this profile | |||
or may replace it. | or may replace it. | |||
3.2 Certification Paths and Trust | 3.2. Certification Paths and Trust | |||
A user of a security service requiring knowledge of a public key | A user of a security service requiring knowledge of a public key | |||
generally needs to obtain and validate a certificate containing the | generally needs to obtain and validate a certificate containing the | |||
required public key. If the public key user does not already hold an | required public key. If the public key user does not already hold an | |||
assured copy of the public key of the CA that signed the certificate, | assured copy of the public key of the CA that signed the certificate, | |||
the CA's name, and related information (such as the validity period | the CA's name, and related information (such as the validity period | |||
or name constraints), then it might need an additional certificate to | or name constraints), then it might need an additional certificate to | |||
obtain that public key. In general, a chain of multiple certificates | obtain that public key. In general, a chain of multiple certificates | |||
may be needed, comprising a certificate of the public key owner (the | may be needed, comprising a certificate of the public key owner (the | |||
end entity) signed by one CA, and zero or more additional | end entity) signed by one CA, and zero or more additional | |||
certificates of CAs signed by other CAs. Such chains, called | certificates of CAs signed by other CAs. Such chains, called | |||
certification paths, are required because a public key user is only | certification paths, are required because a public key user is only | |||
initialized with a limited number of assured CA public keys. | initialized with a limited number of assured CA public keys. | |||
There are different ways in which CAs might be configured in order | There are different ways in which CAs might be configured in order | |||
for public key users to be able to find certification paths. For | for public key users to be able to find certification paths. For | |||
PEM, RFC 1422 defined a rigid hierarchical structure of CAs. There | PEM, RFC 1422 defined a rigid hierarchical structure of CAs. There | |||
are three types of PEM certification authority: | are three types of PEM certification authority: | |||
(a) Internet Policy Registration Authority (IPRA): This | (a) Internet Policy Registration Authority (IPRA): This | |||
authority, operated under the auspices of the Internet Society, | authority, operated under the auspices of the Internet | |||
acts as the root of the PEM certification hierarchy at level 1. | Society, acts as the root of the PEM certification hierarchy | |||
It issues certificates only for the next level of authorities, | at level 1. It issues certificates only for the next level | |||
PCAs. All certification paths start with the IPRA. | of authorities, PCAs. All certification paths start with the | |||
IPRA. | ||||
(b) Policy Certification Authorities (PCAs): PCAs are at level 2 | (b) Policy Certification Authorities (PCAs): PCAs are at level 2 | |||
of the hierarchy, each PCA being certified by the IPRA. A PCA | of the hierarchy, each PCA being certified by the IPRA. A | |||
shall establish and publish a statement of its policy with respect | PCA shall establish and publish a statement of its policy | |||
to certifying users or subordinate certification authorities. | with respect to certifying users or subordinate certification | |||
Distinct PCAs aim to satisfy different user needs. For example, | authorities. Distinct PCAs aim to satisfy different user | |||
one PCA (an organizational PCA) might support the general | needs. For example, one PCA (an organizational PCA) might | |||
electronic mail needs of commercial organizations, and another PCA | support the general electronic mail needs of commercial | |||
(a high-assurance PCA) might have a more stringent policy designed | organizations, and another PCA (a high-assurance PCA) might | |||
for satisfying legally binding digital signature requirements. | have a more stringent policy designed for satisfying legally | |||
binding digital signature requirements. | ||||
(c) Certification Authorities (CAs): CAs are at level 3 of the | (c) Certification Authorities (CAs): CAs are at level 3 of the | |||
hierarchy and can also be at lower levels. Those at level 3 are | hierarchy and can also be at lower levels. Those at level 3 | |||
certified by PCAs. CAs represent, for example, particular | are certified by PCAs. CAs represent, for example, | |||
organizations, particular organizational units (e.g., departments, | particular organizations, particular organizational units | |||
groups, sections), or particular geographical areas. | (e.g., departments, groups, sections), or particular | |||
geographical areas. | ||||
RFC 1422 furthermore has a name subordination rule, which requires | RFC 1422 furthermore has a name subordination rule, which requires | |||
that a CA can only issue certificates for entities whose names are | that a CA can only issue certificates for entities whose names are | |||
subordinate (in the X.500 naming tree) to the name of the CA itself. | subordinate (in the X.500 naming tree) to the name of the CA itself. | |||
The trust associated with a PEM certification path is implied by the | The trust associated with a PEM certification path is implied by the | |||
PCA name. The name subordination rule ensures that CAs below the PCA | PCA name. The name subordination rule ensures that CAs below the PCA | |||
are sensibly constrained as to the set of subordinate entities they | are sensibly constrained as to the set of subordinate entities they | |||
can certify (e.g., a CA for an organization can only certify entities | can certify (e.g., a CA for an organization can only certify entities | |||
in that organization's name tree). Certificate user systems are able | in that organization's name tree). Certificate user systems are able | |||
to mechanically check that the name subordination rule has been | to mechanically check that the name subordination rule has been | |||
followed. | followed. | |||
The RFC 1422 uses the X.509 v1 certificate format. The limitations | RFC 1422 uses the X.509 v1 certificate format. The limitations of | |||
of X.509 v1 required imposition of several structural restrictions to | X.509 v1 required imposition of several structural restrictions to | |||
clearly associate policy information or restrict the utility of | clearly associate policy information or restrict the utility of | |||
certificates. These restrictions included: | certificates. These restrictions included: | |||
(a) a pure top-down hierarchy, with all certification paths | (a) a pure top-down hierarchy, with all certification paths | |||
starting from IPRA; | starting from IPRA; | |||
(b) a naming subordination rule restricting the names of a CA's | (b) a naming subordination rule restricting the names of a CA's | |||
subjects; and | subjects; and | |||
(c) use of the PCA concept, which requires knowledge of | (c) use of the PCA concept, which requires knowledge of | |||
individual PCAs to be built into certificate chain verification | individual PCAs to be built into certificate chain | |||
logic. Knowledge of individual PCAs was required to determine if | verification logic. Knowledge of individual PCAs was | |||
a chain could be accepted. | required to determine if a chain could be accepted. | |||
With X.509 v3, most of the requirements addressed by RFC 1422 can be | With X.509 v3, most of the requirements addressed by RFC 1422 can be | |||
addressed using certificate extensions, without a need to restrict | addressed using certificate extensions, without a need to restrict | |||
the CA structures used. In particular, the certificate extensions | the CA structures used. In particular, the certificate extensions | |||
relating to certificate policies obviate the need for PCAs and the | relating to certificate policies obviate the need for PCAs and the | |||
constraint extensions obviate the need for the name subordination | constraint extensions obviate the need for the name subordination | |||
rule. As a result, this document supports a more flexible | rule. As a result, this document supports a more flexible | |||
architecture, including: | architecture, including: | |||
(a) Certification paths start with a public key of a CA in a | (a) Certification paths start with a public key of a CA in a | |||
user's own domain, or with the public key of the top of a | user's own domain, or with the public key of the top of a | |||
hierarchy. Starting with the public key of a CA in a user's own | hierarchy. Starting with the public key of a CA in a user's | |||
domain has certain advantages. In some environments, the local | own domain has certain advantages. In some environments, the | |||
domain is the most trusted. | local domain is the most trusted. | |||
(b) Name constraints may be imposed through explicit inclusion of | (b) Name constraints may be imposed through explicit inclusion of | |||
a name constraints extension in a certificate, but are not | a name constraints extension in a certificate, but are not | |||
required. | required. | |||
(c) Policy extensions and policy mappings replace the PCA | (c) Policy extensions and policy mappings replace the PCA | |||
concept, which permits a greater degree of automation. The | concept, which permits a greater degree of automation. The | |||
application can determine if the certification path is acceptable | application can determine if the certification path is | |||
based on the contents of the certificates instead of a priori | acceptable based on the contents of the certificates instead | |||
knowledge of PCAs. This permits automation of certification path | of a priori knowledge of PCAs. This permits automation of | |||
processing. | certification path processing. | |||
X.509 v3 also includes an extension that identifies the subject of a | X.509 v3 also includes an extension that identifies the subject of a | |||
certificate as being either a CA or an end entity, reducing the | certificate as being either a CA or an end entity, reducing the | |||
reliance on out-of-band information demanded in PEM. | reliance on out-of-band information demanded in PEM. | |||
This specification covers two classes of certificates: CA | This specification covers two classes of certificates: CA | |||
certificates and end entity certificates. CA certificates may be | certificates and end entity certificates. CA certificates may be | |||
further divided into three classes: cross-certificates; self-issued | further divided into three classes: cross-certificates, self-issued | |||
certificates; and self-signed certificates. Cross-certificates are | certificates, and self-signed certificates. Cross-certificates are | |||
CA certificates in which the issuer and subject are different | CA certificates in which the issuer and subject are different | |||
entities. Cross-certificates describe a trust relationship between | entities. Cross-certificates describe a trust relationship between | |||
the two CAs. Self-issued certificates are CA certificates in which | the two CAs. Self-issued certificates are CA certificates in which | |||
the issuer and subject are the same entity. Self-issued certificates | the issuer and subject are the same entity. Self-issued certificates | |||
are generated to support changes in policy or operations. Self- | are generated to support changes in policy or operations. Self- | |||
signed certificates are self-issued certificates where the digital | signed certificates are self-issued certificates where the digital | |||
signature may be verified by the public key bound into the | signature may be verified by the public key bound into the | |||
certificate. Self-signed certificates are used to convey a public | certificate. Self-signed certificates are used to convey a public | |||
key for use to begin certification paths. End entity certificates | key for use to begin certification paths. End entity certificates | |||
are issued to subjects that are not authorized to issue certificates. | are issued to subjects that are not authorized to issue certificates. | |||
3.3 Revocation | 3.3. Revocation | |||
When a certificate is issued, it is expected to be in use for its | When a certificate is issued, it is expected to be in use for its | |||
entire validity period. However, various circumstances may cause a | entire validity period. However, various circumstances may cause a | |||
certificate to become invalid prior to the expiration of the validity | certificate to become invalid prior to the expiration of the validity | |||
period. Such circumstances include change of name, change of | period. Such circumstances include change of name, change of | |||
association between subject and CA (e.g., an employee terminates | association between subject and CA (e.g., an employee terminates | |||
employment with an organization), and compromise or suspected | employment with an organization), and compromise or suspected | |||
compromise of the corresponding private key. Under such | compromise of the corresponding private key. Under such | |||
circumstances, the CA needs to revoke the certificate. | circumstances, the CA needs to revoke the certificate. | |||
X.509 defines one method of certificate revocation. This method | X.509 defines one method of certificate revocation. This method | |||
involves each CA periodically issuing a signed data structure called | involves each CA periodically issuing a signed data structure called | |||
a certificate revocation list (CRL). A CRL is a time stamped list | a certificate revocation list (CRL). A CRL is a time-stamped list | |||
identifying revoked certificates that is signed by a CA or CRL issuer | identifying revoked certificates that is signed by a CA or CRL issuer | |||
and made freely available in a public repository. Each revoked | and made freely available in a public repository. Each revoked | |||
certificate is identified in a CRL by its certificate serial number. | certificate is identified in a CRL by its certificate serial number. | |||
When a certificate-using system uses a certificate (e.g., for | When a certificate-using system uses a certificate (e.g., for | |||
verifying a remote user's digital signature), that system not only | verifying a remote user's digital signature), that system not only | |||
checks the certificate signature and validity but also acquires a | checks the certificate signature and validity but also acquires a | |||
suitably recent CRL and checks that the certificate serial number is | suitably recent CRL and checks that the certificate serial number is | |||
not on that CRL. The meaning of "suitably recent" may vary with | not on that CRL. The meaning of "suitably recent" may vary with | |||
local policy, but it usually means the most recently issued CRL. A | local policy, but it usually means the most recently issued CRL. A | |||
new CRL is issued on a regular periodic basis (e.g., hourly, daily, | new CRL is issued on a regular periodic basis (e.g., hourly, daily, | |||
skipping to change at page 14, line 31 ¶ | skipping to change at page 14, line 26 ¶ | |||
applicable in some environments as an alternative to the X.509 CRL. | applicable in some environments as an alternative to the X.509 CRL. | |||
On-line revocation checking may significantly reduce the latency | On-line revocation checking may significantly reduce the latency | |||
between a revocation report and the distribution of the information | between a revocation report and the distribution of the information | |||
to relying parties. Once the CA accepts a revocation report as | to relying parties. Once the CA accepts a revocation report as | |||
authentic and valid, any query to the on-line service will correctly | authentic and valid, any query to the on-line service will correctly | |||
reflect the certificate validation impacts of the revocation. | reflect the certificate validation impacts of the revocation. | |||
However, these methods impose new security requirements: the | However, these methods impose new security requirements: the | |||
certificate validator needs to trust the on-line validation service | certificate validator needs to trust the on-line validation service | |||
while the repository does not need to be trusted. | while the repository does not need to be trusted. | |||
3.4 Operational Protocols | 3.4. Operational Protocols | |||
Operational protocols are required to deliver certificates and CRLs | Operational protocols are required to deliver certificates and CRLs | |||
(or status information) to certificate using client systems. | (or status information) to certificate-using client systems. | |||
Provisions are needed for a variety of different means of certificate | Provisions are needed for a variety of different means of certificate | |||
and CRL delivery, including distribution procedures based on LDAP, | and CRL delivery, including distribution procedures based on LDAP, | |||
HTTP, FTP, and X.500. Operational protocols supporting these | HTTP, FTP, and X.500. Operational protocols supporting these | |||
functions are defined in other PKIX specifications. These | functions are defined in other PKIX specifications. These | |||
specifications may include definitions of message formats and | specifications may include definitions of message formats and | |||
procedures for supporting all of the above operational environments, | procedures for supporting all of the above operational environments, | |||
including definitions of or references to appropriate MIME content | including definitions of or references to appropriate MIME content | |||
types. | types. | |||
3.5 Management Protocols | 3.5. Management Protocols | |||
Management protocols are required to support on-line interactions | Management protocols are required to support on-line interactions | |||
between PKI user and management entities. For example, a management | between PKI user and management entities. For example, a management | |||
protocol might be used between a CA and a client system with which a | protocol might be used between a CA and a client system with which a | |||
key pair is associated, or between two CAs that cross-certify each | key pair is associated, or between two CAs that cross-certify each | |||
other. The set of functions that potentially need to be supported by | other. The set of functions that potentially need to be supported by | |||
management protocols include: | management protocols include: | |||
(a) registration: This is the process whereby a user first makes | (a) registration: This is the process whereby a user first makes | |||
itself known to a CA (directly, or through an RA), prior to that | itself known to a CA (directly, or through an RA), prior to | |||
CA issuing a certificate or certificates for that user. | that CA issuing a certificate or certificates for that user. | |||
(b) initialization: Before a client system can operate securely | (b) initialization: Before a client system can operate securely, | |||
it is necessary to install key materials that have the appropriate | it is necessary to install key materials that have the | |||
relationship with keys stored elsewhere in the infrastructure. | appropriate relationship with keys stored elsewhere in the | |||
For example, the client needs to be securely initialized with the | infrastructure. For example, the client needs to be securely | |||
public key and other assured information of the trusted CA(s), to | initialized with the public key and other assured information | |||
be used in validating certificate paths. | of the trusted CA(s), to be used in validating certificate | |||
paths. | ||||
Furthermore, a client typically needs to be initialized with its | Furthermore, a client typically needs to be initialized with | |||
own key pair(s). | its own key pair(s). | |||
(c) certification: This is the process in which a CA issues a | (c) certification: This is the process in which a CA issues a | |||
certificate for a user's public key, and returns that certificate | certificate for a user's public key, and returns that | |||
to the user's client system and/or posts that certificate in a | certificate to the user's client system and/or posts that | |||
repository. | certificate in a repository. | |||
(d) key pair recovery: As an option, user client key materials | (d) key pair recovery: As an option, user client key materials | |||
(e.g., a user's private key used for encryption purposes) may be | (e.g., a user's private key used for encryption purposes) may | |||
backed up by a CA or a key backup system. If a user needs to | be backed up by a CA or a key backup system. If a user needs | |||
recover these backed up key materials (e.g., as a result of a | to recover these backed-up key materials (e.g., as a result | |||
forgotten password or a lost key chain file), an on-line protocol | of a forgotten password or a lost key chain file), an on-line | |||
exchange may be needed to support such recovery. | protocol exchange may be needed to support such recovery. | |||
(e) key pair update: All key pairs need to be updated regularly, | (e) key pair update: All key pairs need to be updated regularly, | |||
i.e., replaced with a new key pair, and new certificates issued. | i.e., replaced with a new key pair, and new certificates | |||
issued. | ||||
(f) revocation request: An authorized person advises a CA of an | (f) revocation request: An authorized person advises a CA of an | |||
abnormal situation requiring certificate revocation. | abnormal situation requiring certificate revocation. | |||
(g) cross-certification: Two CAs exchange information used in | (g) cross-certification: Two CAs exchange information used in | |||
establishing a cross-certificate. A cross-certificate is a | establishing a cross-certificate. A cross-certificate is a | |||
certificate issued by one CA to another CA that contains a CA | certificate issued by one CA to another CA that contains a CA | |||
signature key used for issuing certificates. | signature key used for issuing certificates. | |||
Note that on-line protocols are not the only way of implementing the | Note that on-line protocols are not the only way of implementing the | |||
above functions. For all functions there are off-line methods of | above functions. For all functions, there are off-line methods of | |||
achieving the same result, and this specification does not mandate | achieving the same result, and this specification does not mandate | |||
use of on-line protocols. For example, when hardware tokens are | use of on-line protocols. For example, when hardware tokens are | |||
used, many of the functions may be achieved as part of the physical | used, many of the functions may be achieved as part of the physical | |||
token delivery. Furthermore, some of the above functions may be | token delivery. Furthermore, some of the above functions may be | |||
combined into one protocol exchange. In particular, two or more of | combined into one protocol exchange. In particular, two or more of | |||
the registration, initialization, and certification functions can be | the registration, initialization, and certification functions can be | |||
combined into one protocol exchange. | combined into one protocol exchange. | |||
The PKIX series of specifications defines a set of standard message | The PKIX series of specifications defines a set of standard message | |||
formats supporting the above functions. The protocols for conveying | formats supporting the above functions. The protocols for conveying | |||
these messages in different environments (e.g., email, file transfer, | these messages in different environments (e.g., email, file transfer, | |||
and WWW) are described in those specifications. | and WWW) are described in those specifications. | |||
4 Certificate and Certificate Extensions Profile | 4. Certificate and Certificate Extensions Profile | |||
This section presents a profile for public key certificates that will | This section presents a profile for public key certificates that will | |||
foster interoperability and a reusable PKI. This section is based | foster interoperability and a reusable PKI. This section is based | |||
upon the X.509 v3 certificate format and the standard certificate | upon the X.509 v3 certificate format and the standard certificate | |||
extensions defined in [X.509]. The ISO/IEC and ITU-T documents use | extensions defined in [X.509]. The ISO/IEC and ITU-T documents use | |||
the 1997 version of ASN.1; while this document uses the 1988 ASN.1 | the 1997 version of ASN.1; while this document uses the 1988 ASN.1 | |||
syntax, the encoded certificate and standard extensions are | syntax, the encoded certificate and standard extensions are | |||
equivalent. This section also defines private extensions required to | equivalent. This section also defines private extensions required to | |||
support a PKI for the Internet community. | support a PKI for the Internet community. | |||
Certificates may be used in a wide range of applications and | Certificates may be used in a wide range of applications and | |||
environments covering a broad spectrum of interoperability goals and | environments covering a broad spectrum of interoperability goals and | |||
a broader spectrum of operational and assurance requirements. The | a broader spectrum of operational and assurance requirements. The | |||
goal of this document is to establish a common baseline for generic | goal of this document is to establish a common baseline for generic | |||
applications requiring broad interoperability and limited special | applications requiring broad interoperability and limited special | |||
purpose requirements. In particular, the emphasis will be on | purpose requirements. In particular, the emphasis will be on | |||
supporting the use of X.509 v3 certificates for informal Internet | supporting the use of X.509 v3 certificates for informal Internet | |||
electronic mail, IPsec, and WWW applications. | electronic mail, IPsec, and WWW applications. | |||
4.1 Basic Certificate Fields | 4.1. Basic Certificate Fields | |||
The X.509 v3 certificate basic syntax is as follows. For signature | The X.509 v3 certificate basic syntax is as follows. For signature | |||
calculation, the data that is to be signed is encoded using the ASN.1 | calculation, the data that is to be signed is encoded using the ASN.1 | |||
distinguished encoding rules (DER) [X.690]. ASN.1 DER encoding is a | distinguished encoding rules (DER) [X.690]. ASN.1 DER encoding is a | |||
tag, length, value encoding system for each element. | tag, length, value encoding system for each element. | |||
Certificate ::= SEQUENCE { | Certificate ::= SEQUENCE { | |||
tbsCertificate TBSCertificate, | tbsCertificate TBSCertificate, | |||
signatureAlgorithm AlgorithmIdentifier, | signatureAlgorithm AlgorithmIdentifier, | |||
signatureValue BIT STRING } | signatureValue BIT STRING } | |||
skipping to change at page 17, line 41 ¶ | skipping to change at page 17, line 43 ¶ | |||
critical BOOLEAN DEFAULT FALSE, | critical BOOLEAN DEFAULT FALSE, | |||
extnValue OCTET STRING | extnValue OCTET STRING | |||
-- contains the DER encoding of an ASN.1 value | -- contains the DER encoding of an ASN.1 value | |||
-- corresponding to the extension type identified | -- corresponding to the extension type identified | |||
-- by extnID | -- by extnID | |||
} | } | |||
The following items describe the X.509 v3 certificate for use in the | The following items describe the X.509 v3 certificate for use in the | |||
Internet. | Internet. | |||
4.1.1 Certificate Fields | 4.1.1. Certificate Fields | |||
The Certificate is a SEQUENCE of three required fields. The fields | The Certificate is a SEQUENCE of three required fields. The fields | |||
are described in detail in the following subsections. | are described in detail in the following subsections. | |||
4.1.1.1 tbsCertificate | 4.1.1.1. tbsCertificate | |||
The field contains the names of the subject and issuer, a public key | The field contains the names of the subject and issuer, a public key | |||
associated with the subject, a validity period, and other associated | associated with the subject, a validity period, and other associated | |||
information. The fields are described in detail in section 4.1.2; | information. The fields are described in detail in Section 4.1.2; | |||
the tbsCertificate usually includes extensions, which are described | the tbsCertificate usually includes extensions, which are described | |||
in section 4.2. | in Section 4.2. | |||
4.1.1.2 signatureAlgorithm | 4.1.1.2. signatureAlgorithm | |||
The signatureAlgorithm field contains the identifier for the | The signatureAlgorithm field contains the identifier for the | |||
cryptographic algorithm used by the CA to sign this certificate. | cryptographic algorithm used by the CA to sign this certificate. | |||
[RFC 3279], [RFC 4055], and [RFC 4491] list supported signature | [RFC3279], [RFC4055], and [RFC4491] list supported signature | |||
algorithms, but other signature algorithms MAY also be supported. | algorithms, but other signature algorithms MAY also be supported. | |||
An algorithm identifier is defined by the following ASN.1 structure: | An algorithm identifier is defined by the following ASN.1 structure: | |||
AlgorithmIdentifier ::= SEQUENCE { | AlgorithmIdentifier ::= SEQUENCE { | |||
algorithm OBJECT IDENTIFIER, | algorithm OBJECT IDENTIFIER, | |||
parameters ANY DEFINED BY algorithm OPTIONAL } | parameters ANY DEFINED BY algorithm OPTIONAL } | |||
The algorithm identifier is used to identify a cryptographic | The algorithm identifier is used to identify a cryptographic | |||
algorithm. The OBJECT IDENTIFIER component identifies the algorithm | algorithm. The OBJECT IDENTIFIER component identifies the algorithm | |||
(such as DSA with SHA-1). The contents of the optional parameters | (such as DSA with SHA-1). The contents of the optional parameters | |||
field will vary according to the algorithm identified. | field will vary according to the algorithm identified. | |||
This field MUST contain the same algorithm identifier as the | This field MUST contain the same algorithm identifier as the | |||
signature field in the sequence tbsCertificate (section 4.1.2.3). | signature field in the sequence tbsCertificate (Section 4.1.2.3). | |||
4.1.1.3 signatureValue | 4.1.1.3. signatureValue | |||
The signatureValue field contains a digital signature computed upon | The signatureValue field contains a digital signature computed upon | |||
the ASN.1 DER encoded tbsCertificate. The ASN.1 DER encoded | the ASN.1 DER encoded tbsCertificate. The ASN.1 DER encoded | |||
tbsCertificate is used as the input to the signature function. This | tbsCertificate is used as the input to the signature function. This | |||
signature value is encoded as a BIT STRING and included in the | signature value is encoded as a BIT STRING and included in the | |||
signature field. The details of this process are specified for each | signature field. The details of this process are specified for each | |||
of the algorithms listed in [RFC 3279], [RFC 4055], and [RFC 4491]. | of the algorithms listed in [RFC3279], [RFC4055], and [RFC4491]. | |||
By generating this signature, a CA certifies the validity of the | By generating this signature, a CA certifies the validity of the | |||
information in the tbsCertificate field. In particular, the CA | information in the tbsCertificate field. In particular, the CA | |||
certifies the binding between the public key material and the subject | certifies the binding between the public key material and the subject | |||
of the certificate. | of the certificate. | |||
4.1.2 TBSCertificate | 4.1.2. TBSCertificate | |||
The sequence TBSCertificate contains information associated with the | The sequence TBSCertificate contains information associated with the | |||
subject of the certificate and the CA that issued it. Every | subject of the certificate and the CA that issued it. Every | |||
TBSCertificate contains the names of the subject and issuer, a public | TBSCertificate contains the names of the subject and issuer, a public | |||
key associated with the subject, a validity period, a version number, | key associated with the subject, a validity period, a version number, | |||
and a serial number; some MAY contain optional unique identifier | and a serial number; some MAY contain optional unique identifier | |||
fields. The remainder of this section describes the syntax and | fields. The remainder of this section describes the syntax and | |||
semantics of these fields. A TBSCertificate usually includes | semantics of these fields. A TBSCertificate usually includes | |||
extensions. Extensions for the Internet PKI are described in section | extensions. Extensions for the Internet PKI are described in Section | |||
4.2. | 4.2. | |||
4.1.2.1 Version | 4.1.2.1. Version | |||
This field describes the version of the encoded certificate. When | This field describes the version of the encoded certificate. When | |||
extensions are used, as expected in this profile, version MUST be 3 | extensions are used, as expected in this profile, version MUST be 3 | |||
(value is 2). If no extensions are present, but a UniqueIdentifier | (value is 2). If no extensions are present, but a UniqueIdentifier | |||
is present, the version SHOULD be 2 (value is 1); however version MAY | is present, the version SHOULD be 2 (value is 1); however, the | |||
be 3. If only basic fields are present, the version SHOULD be 1 (the | version MAY be 3. If only basic fields are present, the version | |||
value is omitted from the certificate as the default value); however | SHOULD be 1 (the value is omitted from the certificate as the default | |||
the version MAY be 2 or 3. | value); however, the version MAY be 2 or 3. | |||
Implementations SHOULD be prepared to accept any version certificate. | Implementations SHOULD be prepared to accept any version certificate. | |||
At a minimum, conforming implementations MUST recognize version 3 | At a minimum, conforming implementations MUST recognize version 3 | |||
certificates. | certificates. | |||
Generation of version 2 certificates is not expected by | Generation of version 2 certificates is not expected by | |||
implementations based on this profile. | implementations based on this profile. | |||
4.1.2.2 Serial number | 4.1.2.2. Serial Number | |||
The serial number MUST be a positive integer assigned by the CA to | The serial number MUST be a positive integer assigned by the CA to | |||
each certificate. It MUST be unique for each certificate issued by a | each certificate. It MUST be unique for each certificate issued by a | |||
given CA (i.e., the issuer name and serial number identify a unique | given CA (i.e., the issuer name and serial number identify a unique | |||
certificate). CAs MUST force the serialNumber to be a non-negative | certificate). CAs MUST force the serialNumber to be a non-negative | |||
integer. | integer. | |||
Given the uniqueness requirements above, serial numbers can be | Given the uniqueness requirements above, serial numbers can be | |||
expected to contain long integers. Certificate users MUST be able to | expected to contain long integers. Certificate users MUST be able to | |||
handle serialNumber values up to 20 octets. Conforming CAs MUST NOT | handle serialNumber values up to 20 octets. Conforming CAs MUST NOT | |||
use serialNumber values longer than 20 octets. | use serialNumber values longer than 20 octets. | |||
Note: Non-conforming CAs may issue certificates with serial numbers | Note: Non-conforming CAs may issue certificates with serial numbers | |||
that are negative, or zero. Certificate users SHOULD be prepared to | that are negative or zero. Certificate users SHOULD be prepared to | |||
gracefully handle such certificates. | gracefully handle such certificates. | |||
4.1.2.3 Signature | 4.1.2.3. Signature | |||
This field contains the algorithm identifier for the algorithm used | This field contains the algorithm identifier for the algorithm used | |||
by the CA to sign the certificate. | by the CA to sign the certificate. | |||
This field MUST contain the same algorithm identifier as the | This field MUST contain the same algorithm identifier as the | |||
signatureAlgorithm field in the sequence Certificate (section | signatureAlgorithm field in the sequence Certificate (Section | |||
4.1.1.2). The contents of the optional parameters field will vary | 4.1.1.2). The contents of the optional parameters field will vary | |||
according to the algorithm identified. [RFC 3279], [RFC 4055], and | according to the algorithm identified. [RFC3279], [RFC4055], and | |||
[RFC 4491] list supported signature algorithms, but other signature | [RFC4491] list supported signature algorithms, but other signature | |||
algorithms MAY also be supported. | algorithms MAY also be supported. | |||
4.1.2.4 Issuer | 4.1.2.4. Issuer | |||
The issuer field identifies the entity that has signed and issued the | The issuer field identifies the entity that has signed and issued the | |||
certificate. The issuer field MUST contain a non-empty distinguished | certificate. The issuer field MUST contain a non-empty distinguished | |||
name (DN). The issuer field is defined as the X.501 type Name | name (DN). The issuer field is defined as the X.501 type Name | |||
[X.501]. Name is defined by the following ASN.1 structures: | [X.501]. Name is defined by the following ASN.1 structures: | |||
Name ::= CHOICE { -- only one possibility for now -- | Name ::= CHOICE { -- only one possibility for now -- | |||
rdnSequence RDNSequence } | rdnSequence RDNSequence } | |||
RDNSequence ::= SEQUENCE OF RelativeDistinguishedName | RDNSequence ::= SEQUENCE OF RelativeDistinguishedName | |||
skipping to change at page 21, line 15 ¶ | skipping to change at page 21, line 20 ¶ | |||
As noted above, distinguished names are composed of attributes. This | As noted above, distinguished names are composed of attributes. This | |||
specification does not restrict the set of attribute types that may | specification does not restrict the set of attribute types that may | |||
appear in names. However, conforming implementations MUST be | appear in names. However, conforming implementations MUST be | |||
prepared to receive certificates with issuer names containing the set | prepared to receive certificates with issuer names containing the set | |||
of attribute types defined below. This specification RECOMMENDS | of attribute types defined below. This specification RECOMMENDS | |||
support for additional attribute types. | support for additional attribute types. | |||
Standard sets of attributes have been defined in the X.500 series of | Standard sets of attributes have been defined in the X.500 series of | |||
specifications [X.520]. Implementations of this specification MUST | specifications [X.520]. Implementations of this specification MUST | |||
be prepared to receive the following standard attribute types in | be prepared to receive the following standard attribute types in | |||
issuer and subject (section 4.1.2.6) names: | issuer and subject (Section 4.1.2.6) names: | |||
* country, | * country, | |||
* organization, | * organization, | |||
* organizational unit, | * organizational unit, | |||
* distinguished name qualifier, | * distinguished name qualifier, | |||
* state or province name, | * state or province name, | |||
* common name (e.g., "Susan Housley"), and | * common name (e.g., "Susan Housley"), and | |||
* serial number. | * serial number. | |||
In addition, implementations of this specification SHOULD be prepared | In addition, implementations of this specification SHOULD be prepared | |||
skipping to change at page 21, line 38 ¶ | skipping to change at page 21, line 43 ¶ | |||
* locality, | * locality, | |||
* title, | * title, | |||
* surname, | * surname, | |||
* given name, | * given name, | |||
* initials, | * initials, | |||
* pseudonym, and | * pseudonym, and | |||
* generation qualifier (e.g., "Jr.", "3rd", or "IV"). | * generation qualifier (e.g., "Jr.", "3rd", or "IV"). | |||
The syntax and associated object identifiers (OIDs) for these | The syntax and associated object identifiers (OIDs) for these | |||
attribute types are provided in the ASN.1 modules in appendix A. | attribute types are provided in the ASN.1 modules in Appendix A. | |||
In addition, implementations of this specification MUST be prepared | In addition, implementations of this specification MUST be prepared | |||
to receive the domainComponent attribute, as defined in [RFC 4519]. | to receive the domainComponent attribute, as defined in [RFC4519]. | |||
The Domain Name System (DNS) provides a hierarchical resource | The Domain Name System (DNS) provides a hierarchical resource | |||
labeling system. This attribute provides a convenient mechanism for | labeling system. This attribute provides a convenient mechanism for | |||
organizations that wish to use DNs that parallel their DNS names. | organizations that wish to use DNs that parallel their DNS names. | |||
This is not a replacement for the dNSName component of the | This is not a replacement for the dNSName component of the | |||
alternative name extensions. Implementations are not required to | alternative name extensions. Implementations are not required to | |||
convert such names into DNS names. The syntax and associated OID for | convert such names into DNS names. The syntax and associated OID for | |||
this attribute type are provided in the ASN.1 modules in appendix A. | this attribute type are provided in the ASN.1 modules in Appendix A. | |||
Rules for encoding internationalized domain names for use with the | Rules for encoding internationalized domain names for use with the | |||
domainComponent attribute type are specified in section 7.3. | domainComponent attribute type are specified in Section 7.3. | |||
Certificate users MUST be prepared to process the issuer | Certificate users MUST be prepared to process the issuer | |||
distinguished name and subject distinguished name (section 4.1.2.6) | distinguished name and subject distinguished name (Section 4.1.2.6) | |||
fields to perform name chaining for certification path validation | fields to perform name chaining for certification path validation | |||
(section 6). Name chaining is performed by matching the issuer | (Section 6). Name chaining is performed by matching the issuer | |||
distinguished name in one certificate with the subject name in a CA | distinguished name in one certificate with the subject name in a CA | |||
certificate. Rules for comparing distinguished names are specified | certificate. Rules for comparing distinguished names are specified | |||
in section 7.1. If the names in the issuer and subject field in a | in Section 7.1. If the names in the issuer and subject field in a | |||
certificate match according to the rules specified in section 7.1 | certificate match according to the rules specified in Section 7.1, | |||
then the certificate is self-issued. | then the certificate is self-issued. | |||
4.1.2.5 Validity | 4.1.2.5. Validity | |||
The certificate validity period is the time interval during which the | The certificate validity period is the time interval during which the | |||
CA warrants that it will maintain information about the status of the | CA warrants that it will maintain information about the status of the | |||
certificate. The field is represented as a SEQUENCE of two dates: | certificate. The field is represented as a SEQUENCE of two dates: | |||
the date on which the certificate validity period begins (notBefore) | the date on which the certificate validity period begins (notBefore) | |||
and the date on which the certificate validity period ends | and the date on which the certificate validity period ends | |||
(notAfter). Both notBefore and notAfter may be encoded as UTCTime or | (notAfter). Both notBefore and notAfter may be encoded as UTCTime or | |||
GeneralizedTime. | GeneralizedTime. | |||
CAs conforming to this profile MUST always encode certificate | CAs conforming to this profile MUST always encode certificate | |||
skipping to change at page 22, line 40 ¶ | skipping to change at page 22, line 44 ¶ | |||
The validity period for a certificate is the period of time from | The validity period for a certificate is the period of time from | |||
notBefore through notAfter, inclusive. | notBefore through notAfter, inclusive. | |||
In some situations, devices are given certificates for which no good | In some situations, devices are given certificates for which no good | |||
expiration date can be assigned. For example, a device could be | expiration date can be assigned. For example, a device could be | |||
issued a certificate that binds its model and serial number to its | issued a certificate that binds its model and serial number to its | |||
public key; such a certificate is intended to be used for the entire | public key; such a certificate is intended to be used for the entire | |||
lifetime of the device. | lifetime of the device. | |||
To indicate that a certificate has no well defined expiration date, | To indicate that a certificate has no well-defined expiration date, | |||
the notAfter SHOULD be assigned the GeneralizedTime value of | the notAfter SHOULD be assigned the GeneralizedTime value of | |||
99991231235959Z. | 99991231235959Z. | |||
When the issuer is not be able to maintain status information until | When the issuer will not be able to maintain status information until | |||
the notAfter date (including when the notAfter date is | the notAfter date (including when the notAfter date is | |||
99991231235959Z), the issuer MUST ensure that no valid certification | 99991231235959Z), the issuer MUST ensure that no valid certification | |||
path exists for the certificate after maintenance of status | path exists for the certificate after maintenance of status | |||
information is terminated. This may be accomplished by expiration or | information is terminated. This may be accomplished by expiration or | |||
revocation of all CA certificates containing the public key used to | revocation of all CA certificates containing the public key used to | |||
verify the signature on the certificate and discontinuing use of the | verify the signature on the certificate and discontinuing use of the | |||
public key used to verify the signature on the certificate as a trust | public key used to verify the signature on the certificate as a trust | |||
anchor. | anchor. | |||
4.1.2.5.1 UTCTime | 4.1.2.5.1. UTCTime | |||
The universal time type, UTCTime, is a standard ASN.1 type intended | The universal time type, UTCTime, is a standard ASN.1 type intended | |||
for representation of dates and time. UTCTime specifies the year | for representation of dates and time. UTCTime specifies the year | |||
through the two low order digits and time is specified to the | through the two low-order digits and time is specified to the | |||
precision of one minute or one second. UTCTime includes either Z | precision of one minute or one second. UTCTime includes either Z | |||
(for Zulu, or Greenwich Mean Time) or a time differential. | (for Zulu, or Greenwich Mean Time) or a time differential. | |||
For the purposes of this profile, UTCTime values MUST be expressed in | For the purposes of this profile, UTCTime values MUST be expressed in | |||
Greenwich Mean Time (Zulu) and MUST include seconds (i.e., times are | Greenwich Mean Time (Zulu) and MUST include seconds (i.e., times are | |||
YYMMDDHHMMSSZ), even where the number of seconds is zero. Conforming | YYMMDDHHMMSSZ), even where the number of seconds is zero. Conforming | |||
systems MUST interpret the year field (YY) as follows: | systems MUST interpret the year field (YY) as follows: | |||
Where YY is greater than or equal to 50, the year SHALL be | Where YY is greater than or equal to 50, the year SHALL be | |||
interpreted as 19YY; and | interpreted as 19YY; and | |||
Where YY is less than 50, the year SHALL be interpreted as 20YY. | Where YY is less than 50, the year SHALL be interpreted as 20YY. | |||
4.1.2.5.2 GeneralizedTime | 4.1.2.5.2. GeneralizedTime | |||
The generalized time type, GeneralizedTime, is a standard ASN.1 type | The generalized time type, GeneralizedTime, is a standard ASN.1 type | |||
for variable precision representation of time. Optionally, the | for variable precision representation of time. Optionally, the | |||
GeneralizedTime field can include a representation of the time | GeneralizedTime field can include a representation of the time | |||
differential between local and Greenwich Mean Time. | differential between local and Greenwich Mean Time. | |||
For the purposes of this profile, GeneralizedTime values MUST be | For the purposes of this profile, GeneralizedTime values MUST be | |||
expressed in Greenwich Mean Time (Zulu) and MUST include seconds | expressed in Greenwich Mean Time (Zulu) and MUST include seconds | |||
(i.e., times are YYYYMMDDHHMMSSZ), even where the number of seconds | (i.e., times are YYYYMMDDHHMMSSZ), even where the number of seconds | |||
is zero. GeneralizedTime values MUST NOT include fractional seconds. | is zero. GeneralizedTime values MUST NOT include fractional seconds. | |||
4.1.2.6 Subject | 4.1.2.6. Subject | |||
The subject field identifies the entity associated with the public | The subject field identifies the entity associated with the public | |||
key stored in the subject public key field. The subject name MAY be | key stored in the subject public key field. The subject name MAY be | |||
carried in the subject field and/or the subjectAltName extension. If | carried in the subject field and/or the subjectAltName extension. If | |||
the subject is a CA (e.g., the basic constraints extension, as | the subject is a CA (e.g., the basic constraints extension, as | |||
discussed in section 4.2.1.9, is present and the value of cA is | discussed in Section 4.2.1.9, is present and the value of cA is | |||
TRUE), then the subject field MUST be populated with a non-empty | TRUE), then the subject field MUST be populated with a non-empty | |||
distinguished name matching the contents of the issuer field (section | distinguished name matching the contents of the issuer field (Section | |||
4.1.2.4) in all certificates issued by the subject CA. If the | 4.1.2.4) in all certificates issued by the subject CA. If the | |||
subject is a CRL issuer (e.g., the key usage extension, as discussed | subject is a CRL issuer (e.g., the key usage extension, as discussed | |||
in section 4.2.1.3, is present and the value of cRLSign is TRUE) then | in Section 4.2.1.3, is present and the value of cRLSign is TRUE), | |||
the subject field MUST be populated with a non-empty distinguished | then the subject field MUST be populated with a non-empty | |||
name matching the contents of the issuer field (section 5.1.2.3) in | distinguished name matching the contents of the issuer field (Section | |||
all CRLs issued by the subject CRL issuer. If subject naming | 5.1.2.3) in all CRLs issued by the subject CRL issuer. If subject | |||
information is present only in the subjectAltName extension (e.g., a | naming information is present only in the subjectAltName extension | |||
key bound only to an email address or URI), then the subject name | (e.g., a key bound only to an email address or URI), then the subject | |||
MUST be an empty sequence and the subjectAltName extension MUST be | name MUST be an empty sequence and the subjectAltName extension MUST | |||
critical. | be critical. | |||
Where it is non-empty, the subject field MUST contain an X.500 | Where it is non-empty, the subject field MUST contain an X.500 | |||
distinguished name (DN). The DN MUST be unique for each subject | distinguished name (DN). The DN MUST be unique for each subject | |||
entity certified by the one CA as defined by the issuer name field. | entity certified by the one CA as defined by the issuer field. A CA | |||
A CA MAY issue more than one certificate with the same DN to the same | MAY issue more than one certificate with the same DN to the same | |||
subject entity. | subject entity. | |||
The subject name field is defined as the X.501 type Name. | The subject field is defined as the X.501 type Name. Implementation | |||
Implementation requirements for this field are those defined for the | requirements for this field are those defined for the issuer field | |||
issuer field (section 4.1.2.4). Implementations of this | (Section 4.1.2.4). Implementations of this specification MUST be | |||
specification MUST be prepared to receive subject names containing | prepared to receive subject names containing the attribute types | |||
the attribute types required for the issuer field. Implementations | required for the issuer field. Implementations of this specification | |||
of this specification SHOULD be prepared to receive subject names | SHOULD be prepared to receive subject names containing the | |||
containing the recommended attribute types for the issuer field. The | recommended attribute types for the issuer field. The syntax and | |||
syntax and associated object identifiers (OIDs) for these attribute | associated object identifiers (OIDs) for these attribute types are | |||
types are provided in the ASN.1 modules in appendix A. | provided in the ASN.1 modules in Appendix A. Implementations of this | |||
Implementations of this specification MAY use the comparison rules in | specification MAY use the comparison rules in Section 7.1 to process | |||
section 7.1 to process unfamiliar attribute types (i.e., for name | unfamiliar attribute types (i.e., for name chaining) whose attribute | |||
chaining) whose attribute values use one of the encoding options from | values use one of the encoding options from DirectoryString. Binary | |||
DirectoryString. Binary comparison should be used when unfamiliar | comparison should be used when unfamiliar attribute types include | |||
attribute types include attribute values with encoding options other | attribute values with encoding options other than those found in | |||
than those found in DirectoryString. This allows implementations to | DirectoryString. This allows implementations to process certificates | |||
process certificates with unfamiliar attributes in the subject name. | with unfamiliar attributes in the subject name. | |||
When encoding attribute values of type DirectoryString, conforming | When encoding attribute values of type DirectoryString, conforming | |||
CAs MUST use PrintableString or UTF8String encoding, except that: | CAs MUST use PrintableString or UTF8String encoding, with the | |||
following exceptions: | ||||
(a) When the subject of the certificate is a CA the subject field | (a) When the subject of the certificate is a CA, the subject | |||
MUST be encoded in the same way as it is encoded in the issuer | field MUST be encoded in the same way as it is encoded in the | |||
field (section 4.1.2.4) in all certificates issued by the subject | issuer field (Section 4.1.2.4) in all certificates issued by | |||
CA. Thus, if the subject CA encodes attributes in the issuer | the subject CA. Thus, if the subject CA encodes attributes | |||
fields of certificates that it issues using the TeletexString, | in the issuer fields of certificates that it issues using the | |||
BMPString, or UniversalString encodings, then the subject field of | TeletexString, BMPString, or UniversalString encodings, then | |||
certificates issued to that CA MUST use the same encoding. | the subject field of certificates issued to that CA MUST use | |||
the same encoding. | ||||
(b) When the subject of the certificate is a CRL issuer the | (b) When the subject of the certificate is a CRL issuer, the | |||
subject field MUST be encoded in the same way as it is encoded in | subject field MUST be encoded in the same way as it is | |||
the issuer field (section 5.1.2.3) in all CRLs issued by the | encoded in the issuer field (Section 5.1.2.3) in all CRLs | |||
subject CRL issuer. | issued by the subject CRL issuer. | |||
(c) TeletexString, BMPString, and UniversalString are included | (c) TeletexString, BMPString, and UniversalString are included | |||
for backward compatibility, and SHOULD NOT be used for | for backward compatibility, and SHOULD NOT be used for | |||
certificates for new subjects. However, these types MAY be used | certificates for new subjects. However, these types MAY be | |||
in certificates where the name was previously established, | used in certificates where the name was previously | |||
including cases in which a new certificate is being issued to an | established, including cases in which a new certificate is | |||
existing subject or a certificate is being issued to a new subject | being issued to an existing subject or a certificate is being | |||
where the attributes being encoded have been previously | issued to a new subject where the attributes being encoded | |||
established in certificates issued to other subjects. Certificate | have been previously established in certificates issued to | |||
users SHOULD be prepared to receive certificates with these types. | other subjects. Certificate users SHOULD be prepared to | |||
receive certificates with these types. | ||||
Legacy implementations exist where an electronic mail address is | Legacy implementations exist where an electronic mail address is | |||
embedded in the subject distinguished name as an emailAddress | embedded in the subject distinguished name as an emailAddress | |||
attribute [RFC 2985]. The attribute value for emailAddress is of | attribute [RFC2985]. The attribute value for emailAddress is of type | |||
type IA5String to permit inclusion of the character '@', which is not | IA5String to permit inclusion of the character '@', which is not part | |||
part of the PrintableString character set. emailAddress attribute | of the PrintableString character set. emailAddress attribute values | |||
values are not case-sensitive (e.g., "subscriber@example.com" is the | are not case-sensitive (e.g., "subscriber@example.com" is the same as | |||
same as "SUBSCRIBER@EXAMPLE.COM"). | "SUBSCRIBER@EXAMPLE.COM"). | |||
Conforming implementations generating new certificates with | Conforming implementations generating new certificates with | |||
electronic mail addresses MUST use the rfc822Name in the subject | electronic mail addresses MUST use the rfc822Name in the subject | |||
alternative name extension (section 4.2.1.6) to describe such | alternative name extension (Section 4.2.1.6) to describe such | |||
identities. Simultaneous inclusion of the emailAddress attribute in | identities. Simultaneous inclusion of the emailAddress attribute in | |||
the subject distinguished name to support legacy implementations is | the subject distinguished name to support legacy implementations is | |||
deprecated but permitted. | deprecated but permitted. | |||
4.1.2.7 Subject Public Key Info | 4.1.2.7. Subject Public Key Info | |||
This field is used to carry the public key and identify the algorithm | This field is used to carry the public key and identify the algorithm | |||
with which the key is used (e.g., RSA, DSA, or Diffie-Hellman). The | with which the key is used (e.g., RSA, DSA, or Diffie-Hellman). The | |||
algorithm is identified using the AlgorithmIdentifier structure | algorithm is identified using the AlgorithmIdentifier structure | |||
specified in section 4.1.1.2. The object identifiers for the | specified in Section 4.1.1.2. The object identifiers for the | |||
supported algorithms and the methods for encoding the public key | supported algorithms and the methods for encoding the public key | |||
materials (public key and parameters) are specified in [RFC 3279], | materials (public key and parameters) are specified in [RFC3279], | |||
[RFC 4055], and [RFC 4491]. | [RFC4055], and [RFC4491]. | |||
4.1.2.8 Unique Identifiers | 4.1.2.8. Unique Identifiers | |||
These fields MUST only appear if the version is 2 or 3 (section | These fields MUST only appear if the version is 2 or 3 (Section | |||
4.1.2.1). These fields MUST NOT appear if the version is 1. The | 4.1.2.1). These fields MUST NOT appear if the version is 1. The | |||
subject and issuer unique identifiers are present in the certificate | subject and issuer unique identifiers are present in the certificate | |||
to handle the possibility of reuse of subject and/or issuer names | to handle the possibility of reuse of subject and/or issuer names | |||
over time. This profile RECOMMENDS that names not be reused for | over time. This profile RECOMMENDS that names not be reused for | |||
different entities and that Internet certificates not make use of | different entities and that Internet certificates not make use of | |||
unique identifiers. CAs conforming to this profile MUST NOT generate | unique identifiers. CAs conforming to this profile MUST NOT generate | |||
certificates with unique identifiers. Applications conforming to | certificates with unique identifiers. Applications conforming to | |||
this profile SHOULD be capable of parsing certificates that include | this profile SHOULD be capable of parsing certificates that include | |||
unique identifiers, but there are no processing requirements | unique identifiers, but there are no processing requirements | |||
associated with the unique identifiers. | associated with the unique identifiers. | |||
4.1.2.9 Extensions | 4.1.2.9. Extensions | |||
This field MUST only appear if the version is 3 (section 4.1.2.1). | This field MUST only appear if the version is 3 (Section 4.1.2.1). | |||
If present, this field is a SEQUENCE of one or more certificate | If present, this field is a SEQUENCE of one or more certificate | |||
extensions. The format and content of certificate extensions in the | extensions. The format and content of certificate extensions in the | |||
Internet PKI are defined in section 4.2. | Internet PKI are defined in Section 4.2. | |||
4.2 Certificate Extensions | 4.2. Certificate Extensions | |||
The extensions defined for X.509 v3 certificates provide methods for | The extensions defined for X.509 v3 certificates provide methods for | |||
associating additional attributes with users or public keys and for | associating additional attributes with users or public keys and for | |||
managing relationships between CAs. The X.509 v3 certificate format | managing relationships between CAs. The X.509 v3 certificate format | |||
also allows communities to define private extensions to carry | also allows communities to define private extensions to carry | |||
information unique to those communities. Each extension in a | information unique to those communities. Each extension in a | |||
certificate is designated as either critical or non-critical. A | certificate is designated as either critical or non-critical. A | |||
certificate using system MUST reject the certificate if it encounters | certificate-using system MUST reject the certificate if it encounters | |||
a critical extension it does not recognize or a critical extension | a critical extension it does not recognize or a critical extension | |||
that contains information that it cannot process. A non-critical | that contains information that it cannot process. A non-critical | |||
extension MAY be ignored if it is not recognized, but MUST be | extension MAY be ignored if it is not recognized, but MUST be | |||
processed if it is recognized. The following sections present | processed if it is recognized. The following sections present | |||
recommended extensions used within Internet certificates and standard | recommended extensions used within Internet certificates and standard | |||
locations for information. Communities may elect to use additional | locations for information. Communities may elect to use additional | |||
extensions; however, caution ought to be exercised in adopting any | extensions; however, caution ought to be exercised in adopting any | |||
critical extensions in certificates that might prevent use in a | critical extensions in certificates that might prevent use in a | |||
general context. | general context. | |||
Each extension includes an OID and an ASN.1 structure. When an | Each extension includes an OID and an ASN.1 structure. When an | |||
extension appears in a certificate, the OID appears as the field | extension appears in a certificate, the OID appears as the field | |||
extnID and the corresponding ASN.1 DER encoded structure is the value | extnID and the corresponding ASN.1 DER encoded structure is the value | |||
of the octet string extnValue. A certificate MUST NOT include more | of the octet string extnValue. A certificate MUST NOT include more | |||
than one instance of a particular extension. For example, a | than one instance of a particular extension. For example, a | |||
certificate may contain only one authority key identifier extension | certificate may contain only one authority key identifier extension | |||
(section 4.2.1.1). An extension includes the boolean critical, with | (Section 4.2.1.1). An extension includes the boolean critical, with | |||
a default value of FALSE. The text for each extension specifies the | a default value of FALSE. The text for each extension specifies the | |||
acceptable values for the critical field for CAs conforming to this | acceptable values for the critical field for CAs conforming to this | |||
profile. | profile. | |||
Conforming CAs MUST support key identifiers (sections 4.2.1.1 and | Conforming CAs MUST support key identifiers (Sections 4.2.1.1 and | |||
4.2.1.2), basic constraints (section 4.2.1.9), key usage (section | 4.2.1.2), basic constraints (Section 4.2.1.9), key usage (Section | |||
4.2.1.3), and certificate policies (section 4.2.1.4) extensions. If | 4.2.1.3), and certificate policies (Section 4.2.1.4) extensions. If | |||
the CA issues certificates with an empty sequence for the subject | the CA issues certificates with an empty sequence for the subject | |||
field, the CA MUST support the subject alternative name extension | field, the CA MUST support the subject alternative name extension | |||
(section 4.2.1.6). Support for the remaining extensions is OPTIONAL. | (Section 4.2.1.6). Support for the remaining extensions is OPTIONAL. | |||
Conforming CAs MAY support extensions that are not identified within | Conforming CAs MAY support extensions that are not identified within | |||
this specification; certificate issuers are cautioned that marking | this specification; certificate issuers are cautioned that marking | |||
such extensions as critical may inhibit interoperability. | such extensions as critical may inhibit interoperability. | |||
At a minimum, applications conforming to this profile MUST recognize | At a minimum, applications conforming to this profile MUST recognize | |||
the following extensions: key usage (section 4.2.1.3), certificate | the following extensions: key usage (Section 4.2.1.3), certificate | |||
policies (section 4.2.1.4), the subject alternative name (section | policies (Section 4.2.1.4), subject alternative name (Section | |||
4.2.1.6), basic constraints (section 4.2.1.9), name constraints | 4.2.1.6), basic constraints (Section 4.2.1.9), name constraints | |||
(section 4.2.1.10), policy constraints (section 4.2.1.11), extended | (Section 4.2.1.10), policy constraints (Section 4.2.1.11), extended | |||
key usage (section 4.2.1.12), and inhibit anyPolicy (section | key usage (Section 4.2.1.12), and inhibit anyPolicy (Section | |||
4.2.1.14). | 4.2.1.14). | |||
In addition, applications conforming to this profile SHOULD recognize | In addition, applications conforming to this profile SHOULD recognize | |||
the authority and subject key identifier (sections 4.2.1.1 and | the authority and subject key identifier (Sections 4.2.1.1 and | |||
4.2.1.2), and policy mappings (section 4.2.1.5) extensions. | 4.2.1.2) and policy mappings (Section 4.2.1.5) extensions. | |||
4.2.1 Standard Extensions | 4.2.1. Standard Extensions | |||
This section identifies standard certificate extensions defined in | This section identifies standard certificate extensions defined in | |||
[X.509] for use in the Internet PKI. Each extension is associated | [X.509] for use in the Internet PKI. Each extension is associated | |||
with an OID defined in [X.509]. These OIDs are members of the id-ce | with an OID defined in [X.509]. These OIDs are members of the id-ce | |||
arc, which is defined by the following: | arc, which is defined by the following: | |||
id-ce OBJECT IDENTIFIER ::= { joint-iso-ccitt(2) ds(5) 29 } | id-ce OBJECT IDENTIFIER ::= { joint-iso-ccitt(2) ds(5) 29 } | |||
4.2.1.1 Authority Key Identifier | 4.2.1.1. Authority Key Identifier | |||
The authority key identifier extension provides a means of | The authority key identifier extension provides a means of | |||
identifying the public key corresponding to the private key used to | identifying the public key corresponding to the private key used to | |||
sign a certificate. This extension is used where an issuer has | sign a certificate. This extension is used where an issuer has | |||
multiple signing keys (either due to multiple concurrent key pairs or | multiple signing keys (either due to multiple concurrent key pairs or | |||
due to changeover). The identification MAY be based on either the | due to changeover). The identification MAY be based on either the | |||
key identifier (the subject key identifier in the issuer's | key identifier (the subject key identifier in the issuer's | |||
certificate) or on the issuer name and serial number. | certificate) or the issuer name and serial number. | |||
The keyIdentifier field of the authorityKeyIdentifier extension MUST | The keyIdentifier field of the authorityKeyIdentifier extension MUST | |||
be included in all certificates generated by conforming CAs to | be included in all certificates generated by conforming CAs to | |||
facilitate certification path construction. There is one exception; | facilitate certification path construction. There is one exception; | |||
where a CA distributes its public key in the form of a "self-signed" | where a CA distributes its public key in the form of a "self-signed" | |||
certificate, the authority key identifier MAY be omitted. The | certificate, the authority key identifier MAY be omitted. The | |||
signature on a self-signed certificate is generated with the private | signature on a self-signed certificate is generated with the private | |||
key associated with the certificate's subject public key. (This | key associated with the certificate's subject public key. (This | |||
proves that the issuer possesses both the public and private keys.) | proves that the issuer possesses both the public and private keys.) | |||
In this case, the subject and authority key identifiers would be | In this case, the subject and authority key identifiers would be | |||
identical, but only the subject key identifier is needed for | identical, but only the subject key identifier is needed for | |||
certification path building. | certification path building. | |||
The value of the keyIdentifier field SHOULD be derived from the | The value of the keyIdentifier field SHOULD be derived from the | |||
public key used to verify the certificate's signature or a method | public key used to verify the certificate's signature or a method | |||
that generates unique values. Two common methods for generating key | that generates unique values. Two common methods for generating key | |||
identifiers from the public key are described in section 4.2.1.2. | identifiers from the public key are described in Section 4.2.1.2. | |||
Where a key identifier has not been previously established, this | Where a key identifier has not been previously established, this | |||
specification RECOMMENDS use of one of these methods for generating | specification RECOMMENDS use of one of these methods for generating | |||
keyIdentifiers or use of a similar method that uses a different hash | keyIdentifiers or use of a similar method that uses a different hash | |||
algorithm. Where a key identifier has been previously established, | algorithm. Where a key identifier has been previously established, | |||
the CA SHOULD use the previously established identifier. | the CA SHOULD use the previously established identifier. | |||
This profile RECOMMENDS support for the key identifier method by all | This profile RECOMMENDS support for the key identifier method by all | |||
certificate users. | certificate users. | |||
Conforming CAs MUST mark this extension non-critical. | Conforming CAs MUST mark this extension as non-critical. | |||
id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 35 } | id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 35 } | |||
AuthorityKeyIdentifier ::= SEQUENCE { | AuthorityKeyIdentifier ::= SEQUENCE { | |||
keyIdentifier [0] KeyIdentifier OPTIONAL, | keyIdentifier [0] KeyIdentifier OPTIONAL, | |||
authorityCertIssuer [1] GeneralNames OPTIONAL, | authorityCertIssuer [1] GeneralNames OPTIONAL, | |||
authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL } | authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL } | |||
KeyIdentifier ::= OCTET STRING | KeyIdentifier ::= OCTET STRING | |||
4.2.1.2 Subject Key Identifier | 4.2.1.2. Subject Key Identifier | |||
The subject key identifier extension provides a means of identifying | The subject key identifier extension provides a means of identifying | |||
certificates that contain a particular public key. | certificates that contain a particular public key. | |||
To facilitate certification path construction, this extension MUST | To facilitate certification path construction, this extension MUST | |||
appear in all conforming CA certificates, that is, all certificates | appear in all conforming CA certificates, that is, all certificates | |||
including the basic constraints extension (section 4.2.1.9) where the | including the basic constraints extension (Section 4.2.1.9) where the | |||
value of cA is TRUE. In conforming CA certificates, the value of the | value of cA is TRUE. In conforming CA certificates, the value of the | |||
subject key identifier MUST be the value placed in the key identifier | subject key identifier MUST be the value placed in the key identifier | |||
field of the Authority Key Identifier extension (section 4.2.1.1) of | field of the authority key identifier extension (Section 4.2.1.1) of | |||
certificates issued by the subject of this certificate. Applications | certificates issued by the subject of this certificate. Applications | |||
are not required to verify that key identifiers match when performing | are not required to verify that key identifiers match when performing | |||
certification path validation. | certification path validation. | |||
For CA certificates, subject key identifiers SHOULD be derived from | For CA certificates, subject key identifiers SHOULD be derived from | |||
the public key or a method that generates unique values. Two common | the public key or a method that generates unique values. Two common | |||
methods for generating key identifiers from the public key are: | methods for generating key identifiers from the public key are: | |||
(1) The keyIdentifier is composed of the 160-bit SHA-1 hash of the | (1) The keyIdentifier is composed of the 160-bit SHA-1 hash of the | |||
value of the BIT STRING subjectPublicKey (excluding the tag, | value of the BIT STRING subjectPublicKey (excluding the tag, | |||
length, and number of unused bits). | length, and number of unused bits). | |||
(2) The keyIdentifier is composed of a four bit type field with | (2) The keyIdentifier is composed of a four-bit type field with | |||
the value 0100 followed by the least significant 60 bits of the | the value 0100 followed by the least significant 60 bits of | |||
SHA-1 hash of the value of the BIT STRING subjectPublicKey | the SHA-1 hash of the value of the BIT STRING | |||
(excluding the tag, length, and number of unused bits). | subjectPublicKey (excluding the tag, length, and number of | |||
unused bits). | ||||
Other methods of generating unique numbers are also acceptable. | Other methods of generating unique numbers are also acceptable. | |||
For end entity certificates, the subject key identifier extension | For end entity certificates, the subject key identifier extension | |||
provides a means for identifying certificates containing the | provides a means for identifying certificates containing the | |||
particular public key used in an application. Where an end entity | particular public key used in an application. Where an end entity | |||
has obtained multiple certificates, especially from multiple CAs, the | has obtained multiple certificates, especially from multiple CAs, the | |||
subject key identifier provides a means to quickly identify the set | subject key identifier provides a means to quickly identify the set | |||
of certificates containing a particular public key. To assist | of certificates containing a particular public key. To assist | |||
applications in identifying the appropriate end entity certificate, | applications in identifying the appropriate end entity certificate, | |||
skipping to change at page 29, line 16 ¶ | skipping to change at page 29, line 32 ¶ | |||
For end entity certificates, subject key identifiers SHOULD be | For end entity certificates, subject key identifiers SHOULD be | |||
derived from the public key. Two common methods for generating key | derived from the public key. Two common methods for generating key | |||
identifiers from the public key are identified above. | identifiers from the public key are identified above. | |||
Where a key identifier has not been previously established, this | Where a key identifier has not been previously established, this | |||
specification RECOMMENDS use of one of these methods for generating | specification RECOMMENDS use of one of these methods for generating | |||
keyIdentifiers or use of a similar method that uses a different hash | keyIdentifiers or use of a similar method that uses a different hash | |||
algorithm. Where a key identifier has been previously established, | algorithm. Where a key identifier has been previously established, | |||
the CA SHOULD use the previously established identifier. | the CA SHOULD use the previously established identifier. | |||
Conforming CAs MUST mark this extension non-critical. | Conforming CAs MUST mark this extension as non-critical. | |||
id-ce-subjectKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 14 } | id-ce-subjectKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 14 } | |||
SubjectKeyIdentifier ::= KeyIdentifier | SubjectKeyIdentifier ::= KeyIdentifier | |||
4.2.1.3 Key Usage | 4.2.1.3. Key Usage | |||
The key usage extension defines the purpose (e.g., encipherment, | The key usage extension defines the purpose (e.g., encipherment, | |||
signature, certificate signing) of the key contained in the | signature, certificate signing) of the key contained in the | |||
certificate. The usage restriction might be employed when a key that | certificate. The usage restriction might be employed when a key that | |||
could be used for more than one operation is to be restricted. For | could be used for more than one operation is to be restricted. For | |||
example, when an RSA key should be used only to verify signatures on | example, when an RSA key should be used only to verify signatures on | |||
objects other than public key certificates and CRLs, the | objects other than public key certificates and CRLs, the | |||
digitalSignature and/or nonRepudiation bits would be asserted. | digitalSignature and/or nonRepudiation bits would be asserted. | |||
Likewise, when an RSA key should be used only for key management, the | Likewise, when an RSA key should be used only for key management, the | |||
keyEncipherment bit would be asserted. | keyEncipherment bit would be asserted. | |||
skipping to change at page 30, line 41 ¶ | skipping to change at page 31, line 12 ¶ | |||
is extremely uncommon; almost all applications use key transport | is extremely uncommon; almost all applications use key transport | |||
or key agreement to establish a symmetric key. | or key agreement to establish a symmetric key. | |||
The keyAgreement bit is asserted when the subject public key is | The keyAgreement bit is asserted when the subject public key is | |||
used for key agreement. For example, when a Diffie-Hellman key is | used for key agreement. For example, when a Diffie-Hellman key is | |||
to be used for key management, then this bit is set. | to be used for key management, then this bit is set. | |||
The keyCertSign bit is asserted when the subject public key is | The keyCertSign bit is asserted when the subject public key is | |||
used for verifying signatures on public key certificates. If the | used for verifying signatures on public key certificates. If the | |||
keyCertSign bit is asserted, then the cA bit in the basic | keyCertSign bit is asserted, then the cA bit in the basic | |||
constraints extension (section 4.2.1.9) MUST also be asserted. | constraints extension (Section 4.2.1.9) MUST also be asserted. | |||
The cRLSign bit is asserted when the subject public key is used | The cRLSign bit is asserted when the subject public key is used | |||
for verifying signatures on certificate revocation lists (e.g., | for verifying signatures on certificate revocation lists (e.g., | |||
CRLs, delta CRLs, or ARLs). | CRLs, delta CRLs, or ARLs). | |||
The meaning of the encipherOnly bit is undefined in the absence of | The meaning of the encipherOnly bit is undefined in the absence of | |||
the keyAgreement bit. When the encipherOnly bit is asserted and | the keyAgreement bit. When the encipherOnly bit is asserted and | |||
the keyAgreement bit is also set, the subject public key may be | the keyAgreement bit is also set, the subject public key may be | |||
used only for enciphering data while performing key agreement. | used only for enciphering data while performing key agreement. | |||
skipping to change at page 31, line 29 ¶ | skipping to change at page 31, line 47 ¶ | |||
Combining the nonRepudiation bit in the keyUsage certificate | Combining the nonRepudiation bit in the keyUsage certificate | |||
extension with other keyUsage bits may have security implications | extension with other keyUsage bits may have security implications | |||
depending on the context in which the certificate is to be used. | depending on the context in which the certificate is to be used. | |||
Further distinctions between the digitalSignature and nonRepudiation | Further distinctions between the digitalSignature and nonRepudiation | |||
bits may be provided in specific certificate policies. | bits may be provided in specific certificate policies. | |||
This profile does not restrict the combinations of bits that may be | This profile does not restrict the combinations of bits that may be | |||
set in an instantiation of the keyUsage extension. However, | set in an instantiation of the keyUsage extension. However, | |||
appropriate values for keyUsage extensions for particular algorithms | appropriate values for keyUsage extensions for particular algorithms | |||
are specified in [RFC 3279], [RFC 4055], and [RFC 4491]. When the | are specified in [RFC3279], [RFC4055], and [RFC4491]. When the | |||
keyUsage extension appears in a certificate, at least one of the bits | keyUsage extension appears in a certificate, at least one of the bits | |||
MUST be set to 1. | MUST be set to 1. | |||
4.2.1.4 Certificate Policies | 4.2.1.4. Certificate Policies | |||
The certificate policies extension contains a sequence of one or more | The certificate policies extension contains a sequence of one or more | |||
policy information terms, each of which consists of an object | policy information terms, each of which consists of an object | |||
identifier (OID) and optional qualifiers. Optional qualifiers, which | identifier (OID) and optional qualifiers. Optional qualifiers, which | |||
MAY be present, are not expected to change the definition of the | MAY be present, are not expected to change the definition of the | |||
policy. A certificate policy OID MUST NOT appear more than once in a | policy. A certificate policy OID MUST NOT appear more than once in a | |||
certificate policies extension. | certificate policies extension. | |||
In an end entity certificate, these policy information terms indicate | In an end entity certificate, these policy information terms indicate | |||
the policy under which the certificate has been issued and the | the policy under which the certificate has been issued and the | |||
skipping to change at page 32, line 11 ¶ | skipping to change at page 32, line 32 ¶ | |||
Applications with specific policy requirements are expected to have a | Applications with specific policy requirements are expected to have a | |||
list of those policies that they will accept and to compare the | list of those policies that they will accept and to compare the | |||
policy OIDs in the certificate to that list. If this extension is | policy OIDs in the certificate to that list. If this extension is | |||
critical, the path validation software MUST be able to interpret this | critical, the path validation software MUST be able to interpret this | |||
extension (including the optional qualifier), or MUST reject the | extension (including the optional qualifier), or MUST reject the | |||
certificate. | certificate. | |||
To promote interoperability, this profile RECOMMENDS that policy | To promote interoperability, this profile RECOMMENDS that policy | |||
information terms consist of only an OID. Where an OID alone is | information terms consist of only an OID. Where an OID alone is | |||
insufficient, this profile strongly recommends that use of qualifiers | insufficient, this profile strongly recommends that the use of | |||
be limited to those identified in this section. When qualifiers are | qualifiers be limited to those identified in this section. When | |||
used with the special policy anyPolicy, they MUST be limited to the | qualifiers are used with the special policy anyPolicy, they MUST be | |||
qualifiers identified in this section. Only those qualifiers | limited to the qualifiers identified in this section. Only those | |||
returned as a result of path validation are considered. | qualifiers returned as a result of path validation are considered. | |||
This specification defines two policy qualifier types for use by | This specification defines two policy qualifier types for use by | |||
certificate policy writers and certificate issuers. The qualifier | certificate policy writers and certificate issuers. The qualifier | |||
types are the CPS Pointer and User Notice qualifiers. | types are the CPS Pointer and User Notice qualifiers. | |||
The CPS Pointer qualifier contains a pointer to a Certification | The CPS Pointer qualifier contains a pointer to a Certification | |||
Practice Statement (CPS) published by the CA. The pointer is in the | Practice Statement (CPS) published by the CA. The pointer is in the | |||
form of a URI. Processing requirements for this qualifier are a | form of a URI. Processing requirements for this qualifier are a | |||
local matter. No action is mandated by this specification regardless | local matter. No action is mandated by this specification regardless | |||
of the criticality value asserted for the extension. | of the criticality value asserted for the extension. | |||
User notice is intended for display to a relying party when a | User notice is intended for display to a relying party when a | |||
certificate is used. Only user notices returned as a result of path | certificate is used. Only user notices returned as a result of path | |||
validation are intended for display to the user. If a notice is | validation are intended for display to the user. If a notice is | |||
duplicated only one copy need be displayed. To prevent such | duplicated, only one copy need be displayed. To prevent such | |||
duplication, this qualifier SHOULD only be present in end entity | duplication, this qualifier SHOULD only be present in end entity | |||
certificates and CA certificates issued to other organizations. | certificates and CA certificates issued to other organizations. | |||
The user notice has two optional fields: the noticeRef field and the | The user notice has two optional fields: the noticeRef field and the | |||
explicitText field. Conforming CAs SHOULD NOT use the noticeRef | explicitText field. Conforming CAs SHOULD NOT use the noticeRef | |||
option. | option. | |||
The noticeRef field, if used, names an organization and | The noticeRef field, if used, names an organization and | |||
identifies, by number, a particular textual statement prepared by | identifies, by number, a particular textual statement prepared by | |||
that organization. For example, it might identify the | that organization. For example, it might identify the | |||
skipping to change at page 33, line 23 ¶ | skipping to change at page 34, line 7 ¶ | |||
text indicated by the noticeRef option, then that text SHOULD be | text indicated by the noticeRef option, then that text SHOULD be | |||
displayed; otherwise, the explicitText string SHOULD be displayed. | displayed; otherwise, the explicitText string SHOULD be displayed. | |||
Note: While the explicitText has a maximum size of 200 characters, | Note: While the explicitText has a maximum size of 200 characters, | |||
some non-conforming CAs exceed this limit. Therefore, certificate | some non-conforming CAs exceed this limit. Therefore, certificate | |||
users SHOULD gracefully handle explicitText with more than 200 | users SHOULD gracefully handle explicitText with more than 200 | |||
characters. | characters. | |||
id-ce-certificatePolicies OBJECT IDENTIFIER ::= { id-ce 32 } | id-ce-certificatePolicies OBJECT IDENTIFIER ::= { id-ce 32 } | |||
anyPolicy OBJECT IDENTIFIER ::= { id-ce-certificate-policies 0 } | anyPolicy OBJECT IDENTIFIER ::= { id-ce-certificatePolicies 0 } | |||
certificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation | certificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation | |||
PolicyInformation ::= SEQUENCE { | PolicyInformation ::= SEQUENCE { | |||
policyIdentifier CertPolicyId, | policyIdentifier CertPolicyId, | |||
policyQualifiers SEQUENCE SIZE (1..MAX) OF | policyQualifiers SEQUENCE SIZE (1..MAX) OF | |||
PolicyQualifierInfo OPTIONAL } | PolicyQualifierInfo OPTIONAL } | |||
CertPolicyId ::= OBJECT IDENTIFIER | CertPolicyId ::= OBJECT IDENTIFIER | |||
skipping to change at page 34, line 18 ¶ | skipping to change at page 35, line 5 ¶ | |||
NoticeReference ::= SEQUENCE { | NoticeReference ::= SEQUENCE { | |||
organization DisplayText, | organization DisplayText, | |||
noticeNumbers SEQUENCE OF INTEGER } | noticeNumbers SEQUENCE OF INTEGER } | |||
DisplayText ::= CHOICE { | DisplayText ::= CHOICE { | |||
ia5String IA5String (SIZE (1..200)), | ia5String IA5String (SIZE (1..200)), | |||
visibleString VisibleString (SIZE (1..200)), | visibleString VisibleString (SIZE (1..200)), | |||
bmpString BMPString (SIZE (1..200)), | bmpString BMPString (SIZE (1..200)), | |||
utf8String UTF8String (SIZE (1..200)) } | utf8String UTF8String (SIZE (1..200)) } | |||
4.2.1.5 Policy Mappings | 4.2.1.5. Policy Mappings | |||
This extension is used in CA certificates. It lists one or more | This extension is used in CA certificates. It lists one or more | |||
pairs of OIDs; each pair includes an issuerDomainPolicy and a | pairs of OIDs; each pair includes an issuerDomainPolicy and a | |||
subjectDomainPolicy. The pairing indicates the issuing CA considers | subjectDomainPolicy. The pairing indicates the issuing CA considers | |||
its issuerDomainPolicy equivalent to the subject CA's | its issuerDomainPolicy equivalent to the subject CA's | |||
subjectDomainPolicy. | subjectDomainPolicy. | |||
The issuing CA's users might accept an issuerDomainPolicy for certain | The issuing CA's users might accept an issuerDomainPolicy for certain | |||
applications. The policy mapping defines the list of policies | applications. The policy mapping defines the list of policies | |||
associated with the subject CA that may be accepted as comparable to | associated with the subject CA that may be accepted as comparable to | |||
the issuerDomainPolicy. | the issuerDomainPolicy. | |||
Each issuerDomainPolicy named in the policy mappings extension SHOULD | Each issuerDomainPolicy named in the policy mappings extension SHOULD | |||
also be asserted in a certificate policies extension in the same | also be asserted in a certificate policies extension in the same | |||
certificate. Policies MUST NOT be mapped either to or from the | certificate. Policies MUST NOT be mapped either to or from the | |||
special value anyPolicy (section 4.2.1.4). | special value anyPolicy (Section 4.2.1.4). | |||
In general, certificate policies that appear in the | In general, certificate policies that appear in the | |||
issuerDomainPolicy field of the policy mappings extension are not | issuerDomainPolicy field of the policy mappings extension are not | |||
considered acceptable policies for inclusion in subsequent | considered acceptable policies for inclusion in subsequent | |||
certificates in the certification path. In some circumstances, a CA | certificates in the certification path. In some circumstances, a CA | |||
may wish to map from one policy (p1) to another (p2), but still wants | may wish to map from one policy (p1) to another (p2), but still wants | |||
the issuerDomainPolicy (p1) to be considered acceptable for inclusion | the issuerDomainPolicy (p1) to be considered acceptable for inclusion | |||
in subsequent certificates. This may occur, for example, if the CA | in subsequent certificates. This may occur, for example, if the CA | |||
is in the process of transitioning from the use of policy p1 to the | is in the process of transitioning from the use of policy p1 to the | |||
use of policy p2 and has valid certificates that were issued under | use of policy p2 and has valid certificates that were issued under | |||
each of the policies. A CA may indicate this by including two policy | each of the policies. A CA may indicate this by including two policy | |||
mappings in the CA certificates that it issues. Each policy mapping | mappings in the CA certificates that it issues. Each policy mapping | |||
would have an issuerDomainPolicy of p1; one policy mapping would have | would have an issuerDomainPolicy of p1; one policy mapping would have | |||
a subjectDomainPolicy of p1 and the other would have a | a subjectDomainPolicy of p1 and the other would have a | |||
subjectDomainPolicy of p2. | subjectDomainPolicy of p2. | |||
This extension MAY be supported by CAs and/or applications. | This extension MAY be supported by CAs and/or applications. | |||
Conforming CAs SHOULD mark this extension critical. | Conforming CAs SHOULD mark this extension as critical. | |||
id-ce-policyMappings OBJECT IDENTIFIER ::= { id-ce 33 } | id-ce-policyMappings OBJECT IDENTIFIER ::= { id-ce 33 } | |||
PolicyMappings ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE { | PolicyMappings ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE { | |||
issuerDomainPolicy CertPolicyId, | issuerDomainPolicy CertPolicyId, | |||
subjectDomainPolicy CertPolicyId } | subjectDomainPolicy CertPolicyId } | |||
4.2.1.6 Subject Alternative Name | 4.2.1.6. Subject Alternative Name | |||
The subject alternative name extension allows identities to be bound | The subject alternative name extension allows identities to be bound | |||
to the subject of the certificate. These identities may be included | to the subject of the certificate. These identities may be included | |||
in addition to or in place of the identity in the subject field of | in addition to or in place of the identity in the subject field of | |||
the certificate. Defined options include an Internet electronic mail | the certificate. Defined options include an Internet electronic mail | |||
address, a DNS name, an IP address, and a uniform resource identifier | address, a DNS name, an IP address, and a Uniform Resource Identifier | |||
(URI). Other options exist, including completely local definitions. | (URI). Other options exist, including completely local definitions. | |||
Multiple name forms, and multiple instances of each name form, MAY be | Multiple name forms, and multiple instances of each name form, MAY be | |||
included. Whenever such identities are to be bound into a | included. Whenever such identities are to be bound into a | |||
certificate, the subject alternative name (or issuer alternative | certificate, the subject alternative name (or issuer alternative | |||
name) extension MUST be used; however, a DNS name MAY also be | name) extension MUST be used; however, a DNS name MAY also be | |||
represented in the subject field using the domainComponent attribute | represented in the subject field using the domainComponent attribute | |||
as described in section 4.1.2.4. Note that where such names are | as described in Section 4.1.2.4. Note that where such names are | |||
represented in the subject field implementations are not required to | represented in the subject field implementations are not required to | |||
convert them into DNS names. | convert them into DNS names. | |||
Because the subject alternative name is considered to be definitively | Because the subject alternative name is considered to be definitively | |||
bound to the public key, all parts of the subject alternative name | bound to the public key, all parts of the subject alternative name | |||
MUST be verified by the CA. | MUST be verified by the CA. | |||
Further, if the only subject identity included in the certificate is | Further, if the only subject identity included in the certificate is | |||
an alternative name form (e.g., an electronic mail address), then the | an alternative name form (e.g., an electronic mail address), then the | |||
subject distinguished name MUST be empty (an empty sequence), and the | subject distinguished name MUST be empty (an empty sequence), and the | |||
subjectAltName extension MUST be present. If the subject field | subjectAltName extension MUST be present. If the subject field | |||
contains an empty sequence, then the issuing CA MUST include a | contains an empty sequence, then the issuing CA MUST include a | |||
subjectAltName extension that is marked as critical. When including | subjectAltName extension that is marked as critical. When including | |||
the subjectAltName extension in a certificate that has a non-empty | the subjectAltName extension in a certificate that has a non-empty | |||
subject distinguished name, conforming CAs SHOULD mark the | subject distinguished name, conforming CAs SHOULD mark the | |||
subjectAltName extension as non-critical. | subjectAltName extension as non-critical. | |||
When the subjectAltName extension contains an Internet mail address, | When the subjectAltName extension contains an Internet mail address, | |||
the address MUST be stored in the rfc822Name. The format of an | the address MUST be stored in the rfc822Name. The format of an | |||
rfc822Name is a "Mailbox" as defined in section 4.1.2 of [RFC 2821]. | rfc822Name is a "Mailbox" as defined in Section 4.1.2 of [RFC2821]. | |||
A Mailbox has the form "Local-part@Domain". Note that a Mailbox has | A Mailbox has the form "Local-part@Domain". Note that a Mailbox has | |||
no phrase (such as a common name) before it, has no comment (text | no phrase (such as a common name) before it, has no comment (text | |||
surrounded in parentheses) after it, and is not surrounded by "<" and | surrounded in parentheses) after it, and is not surrounded by "<" and | |||
">". Rules for encoding Internet mail addresses that include | ">". Rules for encoding Internet mail addresses that include | |||
internationalized domain names are specified in section 7.5. | internationalized domain names are specified in Section 7.5. | |||
When the subjectAltName extension contains a iPAddress, the address | When the subjectAltName extension contains an iPAddress, the address | |||
MUST be stored in the octet string in "network byte order," as | MUST be stored in the octet string in "network byte order", as | |||
specified in [RFC 791]. The least significant bit (LSB) of each | specified in [RFC791]. The least significant bit (LSB) of each octet | |||
octet is the LSB of the corresponding byte in the network address. | is the LSB of the corresponding byte in the network address. For IP | |||
For IP Version 4, as specified in RFC 791, the octet string MUST | version 4, as specified in [RFC791], the octet string MUST contain | |||
contain exactly four octets. For IP Version 6, as specified in | exactly four octets. For IP version 6, as specified in | |||
[RFC 2460], the octet string MUST contain exactly sixteen octets. | [RFC2460], the octet string MUST contain exactly sixteen octets. | |||
When the subjectAltName extension contains a domain name system | When the subjectAltName extension contains a domain name system | |||
label, the domain name MUST be stored in the dNSName (an IA5String). | label, the domain name MUST be stored in the dNSName (an IA5String). | |||
The name MUST be in the "preferred name syntax," as specified by | The name MUST be in the "preferred name syntax", as specified by | |||
section 3.5 of [RFC 1034] and as modified by section 2.1 of | Section 3.5 of [RFC1034] and as modified by Section 2.1 of | |||
[RFC 1123]. Note that while upper and lower case letters are allowed | [RFC1123]. Note that while uppercase and lowercase letters are | |||
in domain names, no significance is attached to the case. In | allowed in domain names, no significance is attached to the case. In | |||
addition, while the string " " is a legal domain name, subjectAltName | addition, while the string " " is a legal domain name, subjectAltName | |||
extensions with a dNSName of " " MUST NOT be used. Finally, the use | extensions with a dNSName of " " MUST NOT be used. Finally, the use | |||
of the DNS representation for Internet mail addresses | of the DNS representation for Internet mail addresses | |||
(subscriber.example.com instead of subscriber@example.com) MUST NOT | (subscriber.example.com instead of subscriber@example.com) MUST NOT | |||
be used; such identities are to be encoded as rfc822Name. Rules for | be used; such identities are to be encoded as rfc822Name. Rules for | |||
encoding internationalized domain names are specified in section 7.2. | encoding internationalized domain names are specified in Section 7.2. | |||
When the subjectAltName extension contains a URI, the name MUST be | When the subjectAltName extension contains a URI, the name MUST be | |||
stored in the uniformResourceIdentifier (an IA5String). The name | stored in the uniformResourceIdentifier (an IA5String). The name | |||
MUST NOT be a relative URI, and it MUST follow the URI syntax and | MUST NOT be a relative URI, and it MUST follow the URI syntax and | |||
encoding rules specified in [RFC 3986]. The name MUST include both a | encoding rules specified in [RFC3986]. The name MUST include both a | |||
scheme (e.g., "http" or "ftp") and a scheme-specific-part. URIs that | scheme (e.g., "http" or "ftp") and a scheme-specific-part. URIs that | |||
include an authority ([RFC 3986], section 3.2) MUST include a fully | include an authority ([RFC3986], Section 3.2) MUST include a fully | |||
qualified domain name or IP address as the host. Rules for encoding | qualified domain name or IP address as the host. Rules for encoding | |||
internationalized resource identifiers (IRIs) are specified in | Internationalized Resource Identifiers (IRIs) are specified in | |||
section 7.4. | Section 7.4. | |||
As specified in [RFC 3986], the scheme name is not case-sensitive | As specified in [RFC3986], the scheme name is not case-sensitive | |||
(e.g., "http" is equivalent to "HTTP"). The host part, if present, | (e.g., "http" is equivalent to "HTTP"). The host part, if present, | |||
is also not case-sensitive, but other components of the scheme- | is also not case-sensitive, but other components of the scheme- | |||
specific-part may be case-sensitive. Rules for comparing URIs are | specific-part may be case-sensitive. Rules for comparing URIs are | |||
specified in section 7.4. | specified in Section 7.4. | |||
When the subjectAltName extension contains a DN in the directoryName, | When the subjectAltName extension contains a DN in the directoryName, | |||
the encoding rules are the same as those specified for the issuer | the encoding rules are the same as those specified for the issuer | |||
field in section 4.1.2.4. The DN MUST be unique for each subject | field in Section 4.1.2.4. The DN MUST be unique for each subject | |||
entity certified by the one CA as defined by the issuer name field. | entity certified by the one CA as defined by the issuer field. A CA | |||
A CA MAY issue more than one certificate with the same DN to the same | MAY issue more than one certificate with the same DN to the same | |||
subject entity. | subject entity. | |||
The subjectAltName MAY carry additional name types through the use of | The subjectAltName MAY carry additional name types through the use of | |||
the otherName field. The format and semantics of the name are | the otherName field. The format and semantics of the name are | |||
indicated through the OBJECT IDENTIFIER in the type-id field. The | indicated through the OBJECT IDENTIFIER in the type-id field. The | |||
name itself is conveyed as value field in otherName. For example, | name itself is conveyed as value field in otherName. For example, | |||
Kerberos [RFC 4120] format names can be encoded into the otherName, | Kerberos [RFC4120] format names can be encoded into the otherName, | |||
using using a Kerberos 5 principal name OID and a SEQUENCE of the | using a Kerberos 5 principal name OID and a SEQUENCE of the Realm and | |||
Realm and the PrincipalName. | the PrincipalName. | |||
Subject alternative names MAY be constrained in the same manner as | Subject alternative names MAY be constrained in the same manner as | |||
subject distinguished names using the name constraints extension as | subject distinguished names using the name constraints extension as | |||
described in section 4.2.1.10. | described in Section 4.2.1.10. | |||
If the subjectAltName extension is present, the sequence MUST contain | If the subjectAltName extension is present, the sequence MUST contain | |||
at least one entry. Unlike the subject field, conforming CAs MUST | at least one entry. Unlike the subject field, conforming CAs MUST | |||
NOT issue certificates with subjectAltNames containing empty | NOT issue certificates with subjectAltNames containing empty | |||
GeneralName fields. For example, an rfc822Name is represented as an | GeneralName fields. For example, an rfc822Name is represented as an | |||
IA5String. While an empty string is a valid IA5String, such an | IA5String. While an empty string is a valid IA5String, such an | |||
rfc822Name is not permitted by this profile. The behavior of clients | rfc822Name is not permitted by this profile. The behavior of clients | |||
that encounter such a certificate when processing a certification | that encounter such a certificate when processing a certification | |||
path is not defined by this profile. | path is not defined by this profile. | |||
skipping to change at page 38, line 5 ¶ | skipping to change at page 38, line 37 ¶ | |||
registeredID [8] OBJECT IDENTIFIER } | registeredID [8] OBJECT IDENTIFIER } | |||
OtherName ::= SEQUENCE { | OtherName ::= SEQUENCE { | |||
type-id OBJECT IDENTIFIER, | type-id OBJECT IDENTIFIER, | |||
value [0] EXPLICIT ANY DEFINED BY type-id } | value [0] EXPLICIT ANY DEFINED BY type-id } | |||
EDIPartyName ::= SEQUENCE { | EDIPartyName ::= SEQUENCE { | |||
nameAssigner [0] DirectoryString OPTIONAL, | nameAssigner [0] DirectoryString OPTIONAL, | |||
partyName [1] DirectoryString } | partyName [1] DirectoryString } | |||
4.2.1.7 Issuer Alternative Name | 4.2.1.7. Issuer Alternative Name | |||
As with 4.2.1.6, this extension is used to associate Internet style | As with Section 4.2.1.6, this extension is used to associate Internet | |||
identities with the certificate issuer. Issuer alternative name MUST | style identities with the certificate issuer. Issuer alternative | |||
be encoded as in 4.2.1.6. Issuer alternative names are not processed | name MUST be encoded as in 4.2.1.6. Issuer alternative names are not | |||
as part of the certification path validation algorithm in section 6. | processed as part of the certification path validation algorithm in | |||
(That is, issuer alternative names are not used in name chaining and | Section 6. (That is, issuer alternative names are not used in name | |||
name constraints are not enforced.) | chaining and name constraints are not enforced.) | |||
Where present, conforming CAs SHOULD mark this extension non- | Where present, conforming CAs SHOULD mark this extension as non- | |||
critical. | critical. | |||
id-ce-issuerAltName OBJECT IDENTIFIER ::= { id-ce 18 } | id-ce-issuerAltName OBJECT IDENTIFIER ::= { id-ce 18 } | |||
IssuerAltName ::= GeneralNames | IssuerAltName ::= GeneralNames | |||
4.2.1.8 Subject Directory Attributes | 4.2.1.8. Subject Directory Attributes | |||
The subject directory attributes extension is used to convey | The subject directory attributes extension is used to convey | |||
identification attributes (e.g., nationality) of the subject. The | identification attributes (e.g., nationality) of the subject. The | |||
extension is defined as a sequence of one or more attributes. | extension is defined as a sequence of one or more attributes. | |||
Conforming CAs MUST mark this extension non-critical. | Conforming CAs MUST mark this extension as non-critical. | |||
id-ce-subjectDirectoryAttributes OBJECT IDENTIFIER ::= { id-ce 9 } | id-ce-subjectDirectoryAttributes OBJECT IDENTIFIER ::= { id-ce 9 } | |||
SubjectDirectoryAttributes ::= SEQUENCE SIZE (1..MAX) OF Attribute | SubjectDirectoryAttributes ::= SEQUENCE SIZE (1..MAX) OF Attribute | |||
4.2.1.9 Basic Constraints | 4.2.1.9. Basic Constraints | |||
The basic constraints extension identifies whether the subject of the | The basic constraints extension identifies whether the subject of the | |||
certificate is a CA and the maximum depth of valid certification | certificate is a CA and the maximum depth of valid certification | |||
paths that include this certificate. | paths that include this certificate. | |||
The cA boolean indicates whether the certified public key may be used | The cA boolean indicates whether the certified public key may be used | |||
to verify certificate signatures. If the cA boolean is not asserted, | to verify certificate signatures. If the cA boolean is not asserted, | |||
then the keyCertSign bit in the key usage extension MUST NOT be | then the keyCertSign bit in the key usage extension MUST NOT be | |||
asserted. If the basic constraints extension is not present in a | asserted. If the basic constraints extension is not present in a | |||
version 3 certificate, or the extension is present but the cA boolean | version 3 certificate, or the extension is present but the cA boolean | |||
is not asserted, then the certified public key MUST NOT be used to | is not asserted, then the certified public key MUST NOT be used to | |||
verify certificate signatures. | verify certificate signatures. | |||
The pathLenConstraint field is meaningful only if the cA boolean is | The pathLenConstraint field is meaningful only if the cA boolean is | |||
asserted and the key usage extension, if present, asserts the | asserted and the key usage extension, if present, asserts the | |||
keyCertSign bit (section 4.2.1.3). In this case, it gives the | keyCertSign bit (Section 4.2.1.3). In this case, it gives the | |||
maximum number of non-self-issued intermediate certificates that may | maximum number of non-self-issued intermediate certificates that may | |||
follow this certificate in a valid certification path. (Note: The | follow this certificate in a valid certification path. (Note: The | |||
last certificate in the certification path is not an intermediate | last certificate in the certification path is not an intermediate | |||
certificate, and is not included in this limit. Usually, the last | certificate, and is not included in this limit. Usually, the last | |||
certificate is an end entity certificate, but it can be a CA | certificate is an end entity certificate, but it can be a CA | |||
certificate.) A pathLenConstraint of zero indicates that no non- | certificate.) A pathLenConstraint of zero indicates that no non- | |||
self-issued intermediate CA certificates may follow in a valid | self-issued intermediate CA certificates may follow in a valid | |||
certification path. Where it appears, the pathLenConstraint field | certification path. Where it appears, the pathLenConstraint field | |||
MUST be greater than or equal to zero. Where pathLenConstraint does | MUST be greater than or equal to zero. Where pathLenConstraint does | |||
not appear, no limit is imposed. | not appear, no limit is imposed. | |||
skipping to change at page 39, line 33 ¶ | skipping to change at page 40, line 17 ¶ | |||
CAs MUST NOT include the pathLenConstraint field unless the cA | CAs MUST NOT include the pathLenConstraint field unless the cA | |||
boolean is asserted and the key usage extension asserts the | boolean is asserted and the key usage extension asserts the | |||
keyCertSign bit. | keyCertSign bit. | |||
id-ce-basicConstraints OBJECT IDENTIFIER ::= { id-ce 19 } | id-ce-basicConstraints OBJECT IDENTIFIER ::= { id-ce 19 } | |||
BasicConstraints ::= SEQUENCE { | BasicConstraints ::= SEQUENCE { | |||
cA BOOLEAN DEFAULT FALSE, | cA BOOLEAN DEFAULT FALSE, | |||
pathLenConstraint INTEGER (0..MAX) OPTIONAL } | pathLenConstraint INTEGER (0..MAX) OPTIONAL } | |||
4.2.1.10 Name Constraints | 4.2.1.10. Name Constraints | |||
The name constraints extension, which MUST be used only in a CA | The name constraints extension, which MUST be used only in a CA | |||
certificate, indicates a name space within which all subject names in | certificate, indicates a name space within which all subject names in | |||
subsequent certificates in a certification path MUST be located. | subsequent certificates in a certification path MUST be located. | |||
Restrictions apply to the subject distinguished name and apply to | Restrictions apply to the subject distinguished name and apply to | |||
subject alternative names. Restrictions apply only when the | subject alternative names. Restrictions apply only when the | |||
specified name form is present. If no name of the type is in the | specified name form is present. If no name of the type is in the | |||
certificate, the certificate is acceptable. | certificate, the certificate is acceptable. | |||
Name constraints are not applied to self-issued certificates (unless | Name constraints are not applied to self-issued certificates (unless | |||
skipping to change at page 40, line 14 ¶ | skipping to change at page 40, line 46 ¶ | |||
critical and SHOULD NOT impose name constraints on the x400Address, | critical and SHOULD NOT impose name constraints on the x400Address, | |||
ediPartyName, or registeredID name forms. Conforming CAs MUST NOT | ediPartyName, or registeredID name forms. Conforming CAs MUST NOT | |||
issue certificates where name constraints is an empty sequence. That | issue certificates where name constraints is an empty sequence. That | |||
is, either the permittedSubtrees field or the excludedSubtrees MUST | is, either the permittedSubtrees field or the excludedSubtrees MUST | |||
be present. | be present. | |||
Applications conforming to this profile MUST be able to process name | Applications conforming to this profile MUST be able to process name | |||
constraints that are imposed on the directoryName name form and | constraints that are imposed on the directoryName name form and | |||
SHOULD be able to process name constraints that are imposed on the | SHOULD be able to process name constraints that are imposed on the | |||
rfc822Name, uniformResourceIdentifier, dNSName, and iPAddress name | rfc822Name, uniformResourceIdentifier, dNSName, and iPAddress name | |||
forms. If a name constraints extension that is marked critical | forms. If a name constraints extension that is marked as critical | |||
imposes constraints on a particular name form, and an instance of | imposes constraints on a particular name form, and an instance of | |||
that name form appears in the subject field or subjectAltName | that name form appears in the subject field or subjectAltName | |||
extension of a subsequent certificate, then the application MUST | extension of a subsequent certificate, then the application MUST | |||
either process the constraint or reject the certificate. | either process the constraint or reject the certificate. | |||
Within this profile, the minimum and maximum fields are not used with | Within this profile, the minimum and maximum fields are not used with | |||
any name forms, thus minimum MUST be zero, and maximum MUST be | any name forms, thus, the minimum MUST be zero, and maximum MUST be | |||
absent. However, if an application encounters a critical name | absent. However, if an application encounters a critical name | |||
constraints extension that specifies other values for minimum or | constraints extension that specifies other values for minimum or | |||
maximum for a name form that appears in a subsequent certificate, the | maximum for a name form that appears in a subsequent certificate, the | |||
application MUST either process these fields or reject the | application MUST either process these fields or reject the | |||
certificate. | certificate. | |||
For URIs, the constraint applies to the host part of the name. The | For URIs, the constraint applies to the host part of the name. The | |||
constraint MUST be specified as a fully qualified domain name and MAY | constraint MUST be specified as a fully qualified domain name and MAY | |||
specify a host or a domain. Examples would be "host.example.com" and | specify a host or a domain. Examples would be "host.example.com" and | |||
".example.com". When the the constraint begins with a period, it MAY | ".example.com". When the constraint begins with a period, it MAY be | |||
be expanded with one or more subdomains. That is, the constraint | expanded with one or more labels. That is, the constraint | |||
".example.com" is satisfied by both host.example.com and | ".example.com" is satisfied by both host.example.com and | |||
my.host.example.com. However, the constraint ".example.com" is not | my.host.example.com. However, the constraint ".example.com" is not | |||
satisfied by "example.com". When the constraint does not begin with | satisfied by "example.com". When the constraint does not begin with | |||
a period, it specifies a host. If a constraint is applied to the | a period, it specifies a host. If a constraint is applied to the | |||
uniformResourceIdentifier name form and a subsequent certificate | uniformResourceIdentifier name form and a subsequent certificate | |||
includes a subjectAltName extension with a uniformResourceIdentifier | includes a subjectAltName extension with a uniformResourceIdentifier | |||
that does not include an authority component with a host name | that does not include an authority component with a host name | |||
specified as a fully qualified domain name (e.g., if the URI either | specified as a fully qualified domain name (e.g., if the URI either | |||
does not include an authority component or includes an authority | does not include an authority component or includes an authority | |||
component in which the host name is specified as an IP address), then | component in which the host name is specified as an IP address), then | |||
skipping to change at page 41, line 12 ¶ | skipping to change at page 41, line 45 ¶ | |||
"example.com". To indicate all Internet mail addresses on a | "example.com". To indicate all Internet mail addresses on a | |||
particular host, the constraint is specified as the host name. For | particular host, the constraint is specified as the host name. For | |||
example, the constraint "example.com" is satisfied by any mail | example, the constraint "example.com" is satisfied by any mail | |||
address at the host "example.com". To specify any address within a | address at the host "example.com". To specify any address within a | |||
domain, the constraint is specified with a leading period (as with | domain, the constraint is specified with a leading period (as with | |||
URIs). For example, ".example.com" indicates all the Internet mail | URIs). For example, ".example.com" indicates all the Internet mail | |||
addresses in the domain "example.com", but not Internet mail | addresses in the domain "example.com", but not Internet mail | |||
addresses on the host "example.com". | addresses on the host "example.com". | |||
DNS name restrictions are expressed as host.example.com. Any DNS | DNS name restrictions are expressed as host.example.com. Any DNS | |||
name that can be constructed by simply adding zero or more subdomains | name that can be constructed by simply adding zero or more labels to | |||
to the left hand side of the name satisfies the name constraint. For | the left-hand side of the name satisfies the name constraint. For | |||
example, www.host.example.com would satisfy the constraint but | example, www.host.example.com would satisfy the constraint but | |||
host1.example.com would not. | host1.example.com would not. | |||
Legacy implementations exist where an electronic mail address is | Legacy implementations exist where an electronic mail address is | |||
embedded in the subject distinguished name in an attribute of type | embedded in the subject distinguished name in an attribute of type | |||
emailAddress (section 4.1.2.6). When constraints are imposed on the | emailAddress (Section 4.1.2.6). When constraints are imposed on the | |||
rfc822Name name form, but the certificate does not include a subject | rfc822Name name form, but the certificate does not include a subject | |||
alternative name, the rfc822Name constraint MUST be applied to the | alternative name, the rfc822Name constraint MUST be applied to the | |||
attribute of type emailAddress in the subject distinguished name. | attribute of type emailAddress in the subject distinguished name. | |||
The ASN.1 syntax for emailAddress and the corresponding OID are | The ASN.1 syntax for emailAddress and the corresponding OID are | |||
supplied in appendix A. | supplied in Appendix A. | |||
Restrictions of the form directoryName MUST be applied to the subject | Restrictions of the form directoryName MUST be applied to the subject | |||
field in the certificate (when the certificate includes a non-empty | field in the certificate (when the certificate includes a non-empty | |||
subject field) and to any names of type directoryName in the | subject field) and to any names of type directoryName in the | |||
subjectAltName extension. Restrictions of the form x400Address MUST | subjectAltName extension. Restrictions of the form x400Address MUST | |||
be applied to any names of type x400Address in the subjectAltName | be applied to any names of type x400Address in the subjectAltName | |||
extension. | extension. | |||
When applying restrictions of the form directoryName, an | When applying restrictions of the form directoryName, an | |||
implementation MUST compare DN attributes. At a minimum, | implementation MUST compare DN attributes. At a minimum, | |||
implementations MUST perform the DN comparison rules specified in | implementations MUST perform the DN comparison rules specified in | |||
section 7.1. CAs issuing certificates with a restriction of the form | Section 7.1. CAs issuing certificates with a restriction of the form | |||
directoryName SHOULD NOT rely on implementation of the full ISO DN | directoryName SHOULD NOT rely on implementation of the full ISO DN | |||
name comparison algorithm. This implies name restrictions MUST be | name comparison algorithm. This implies name restrictions MUST be | |||
stated identically to the encoding used in the subject field or | stated identically to the encoding used in the subject field or | |||
subjectAltName extension. | subjectAltName extension. | |||
The syntax of iPAddress MUST be as described in section 4.2.1.6 with | The syntax of iPAddress MUST be as described in Section 4.2.1.6 with | |||
the following additions specifically for name constraints. For IPv4 | the following additions specifically for name constraints. For IPv4 | |||
addresses, the iPAddress field of GeneralName MUST contain eight (8) | addresses, the iPAddress field of GeneralName MUST contain eight (8) | |||
octets, encoded in the style of RFC 4632 (CIDR) to represent an | octets, encoded in the style of RFC 4632 (CIDR) to represent an | |||
address range [RFC 4632]. For IPv6 addresses, the iPAddress field | address range [RFC4632]. For IPv6 addresses, the iPAddress field | |||
MUST contain 32 octets similarly encoded. For example, a name | MUST contain 32 octets similarly encoded. For example, a name | |||
constraint for "class C" subnet 192.0.2.0 is represented as the | constraint for "class C" subnet 192.0.2.0 is represented as the | |||
octets C0 00 02 00 FF FF FF 00, representing the CIDR notation | octets C0 00 02 00 FF FF FF 00, representing the CIDR notation | |||
192.0.2.0/24 (mask 255.255.255.0). | 192.0.2.0/24 (mask 255.255.255.0). | |||
Additional rules for encoding and processing name constraints are | Additional rules for encoding and processing name constraints are | |||
specified in section 7. | specified in Section 7. | |||
The syntax and semantics for name constraints for otherName, | The syntax and semantics for name constraints for otherName, | |||
ediPartyName, and registeredID are not defined by this specification, | ediPartyName, and registeredID are not defined by this specification, | |||
however syntax and semantics for name constraints for other name | however, syntax and semantics for name constraints for other name | |||
forms may be specified in other documents. | forms may be specified in other documents. | |||
id-ce-nameConstraints OBJECT IDENTIFIER ::= { id-ce 30 } | id-ce-nameConstraints OBJECT IDENTIFIER ::= { id-ce 30 } | |||
NameConstraints ::= SEQUENCE { | NameConstraints ::= SEQUENCE { | |||
permittedSubtrees [0] GeneralSubtrees OPTIONAL, | permittedSubtrees [0] GeneralSubtrees OPTIONAL, | |||
excludedSubtrees [1] GeneralSubtrees OPTIONAL } | excludedSubtrees [1] GeneralSubtrees OPTIONAL } | |||
GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree | GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree | |||
GeneralSubtree ::= SEQUENCE { | GeneralSubtree ::= SEQUENCE { | |||
base GeneralName, | base GeneralName, | |||
minimum [0] BaseDistance DEFAULT 0, | minimum [0] BaseDistance DEFAULT 0, | |||
maximum [1] BaseDistance OPTIONAL } | maximum [1] BaseDistance OPTIONAL } | |||
BaseDistance ::= INTEGER (0..MAX) | BaseDistance ::= INTEGER (0..MAX) | |||
4.2.1.11 Policy Constraints | 4.2.1.11. Policy Constraints | |||
The policy constraints extension can be used in certificates issued | The policy constraints extension can be used in certificates issued | |||
to CAs. The policy constraints extension constrains path validation | to CAs. The policy constraints extension constrains path validation | |||
in two ways. It can be used to prohibit policy mapping or require | in two ways. It can be used to prohibit policy mapping or require | |||
that each certificate in a path contain an acceptable policy | that each certificate in a path contain an acceptable policy | |||
identifier. | identifier. | |||
If the inhibitPolicyMapping field is present, the value indicates the | If the inhibitPolicyMapping field is present, the value indicates the | |||
number of additional certificates that may appear in the path before | number of additional certificates that may appear in the path before | |||
policy mapping is no longer permitted. For example, a value of one | policy mapping is no longer permitted. For example, a value of one | |||
skipping to change at page 43, line 10 ¶ | skipping to change at page 43, line 41 ¶ | |||
policy identifier in the certificate policies extension. An | policy identifier in the certificate policies extension. An | |||
acceptable policy identifier is the identifier of a policy required | acceptable policy identifier is the identifier of a policy required | |||
by the user of the certification path or the identifier of a policy | by the user of the certification path or the identifier of a policy | |||
that has been declared equivalent through policy mapping. | that has been declared equivalent through policy mapping. | |||
Conforming applications MUST be able to process the | Conforming applications MUST be able to process the | |||
requireExplicitPolicy field and SHOULD be able to process the | requireExplicitPolicy field and SHOULD be able to process the | |||
inhibitPolicyMapping field. Applications that support the | inhibitPolicyMapping field. Applications that support the | |||
inhibitPolicyMapping field MUST also implement support for the | inhibitPolicyMapping field MUST also implement support for the | |||
policyMappings extension. If the policyConstraints extension is | policyMappings extension. If the policyConstraints extension is | |||
marked critical and the inhibitPolicyMapping field is present, | marked as critical and the inhibitPolicyMapping field is present, | |||
applications that do not implement support for the | applications that do not implement support for the | |||
inhibitPolicyMapping field MUST reject the certificate. | inhibitPolicyMapping field MUST reject the certificate. | |||
Conforming CAs MUST NOT issue certificates where policy constraints | Conforming CAs MUST NOT issue certificates where policy constraints | |||
is an empty sequence. That is, either the inhibitPolicyMapping field | is an empty sequence. That is, either the inhibitPolicyMapping field | |||
or the requireExplicitPolicy field MUST be present. The behavior of | or the requireExplicitPolicy field MUST be present. The behavior of | |||
clients that encounter an empty policy constraints field is not | clients that encounter an empty policy constraints field is not | |||
addressed in this profile. | addressed in this profile. | |||
Conforming CAs MUST mark this extension as critical. | Conforming CAs MUST mark this extension as critical. | |||
id-ce-policyConstraints OBJECT IDENTIFIER ::= { id-ce 36 } | id-ce-policyConstraints OBJECT IDENTIFIER ::= { id-ce 36 } | |||
PolicyConstraints ::= SEQUENCE { | PolicyConstraints ::= SEQUENCE { | |||
requireExplicitPolicy [0] SkipCerts OPTIONAL, | requireExplicitPolicy [0] SkipCerts OPTIONAL, | |||
inhibitPolicyMapping [1] SkipCerts OPTIONAL } | inhibitPolicyMapping [1] SkipCerts OPTIONAL } | |||
SkipCerts ::= INTEGER (0..MAX) | SkipCerts ::= INTEGER (0..MAX) | |||
4.2.1.12 Extended Key Usage | 4.2.1.12. Extended Key Usage | |||
This extension indicates one or more purposes for which the certified | This extension indicates one or more purposes for which the certified | |||
public key may be used, in addition to or in place of the basic | public key may be used, in addition to or in place of the basic | |||
purposes indicated in the key usage extension. In general, this | purposes indicated in the key usage extension. In general, this | |||
extension will appear only in end entity certificates. This | extension will appear only in end entity certificates. This | |||
extension is defined as follows: | extension is defined as follows: | |||
id-ce-extKeyUsage OBJECT IDENTIFIER ::= { id-ce 37 } | id-ce-extKeyUsage OBJECT IDENTIFIER ::= { id-ce 37 } | |||
ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId | ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId | |||
skipping to change at page 45, line 14 ¶ | skipping to change at page 45, line 47 ¶ | |||
id-kp-timeStamping OBJECT IDENTIFIER ::= { id-kp 8 } | id-kp-timeStamping OBJECT IDENTIFIER ::= { id-kp 8 } | |||
-- Binding the hash of an object to a time | -- Binding the hash of an object to a time | |||
-- Key usage bits that may be consistent: digitalSignature | -- Key usage bits that may be consistent: digitalSignature | |||
-- and/or nonRepudiation | -- and/or nonRepudiation | |||
id-kp-OCSPSigning OBJECT IDENTIFIER ::= { id-kp 9 } | id-kp-OCSPSigning OBJECT IDENTIFIER ::= { id-kp 9 } | |||
-- Signing OCSP responses | -- Signing OCSP responses | |||
-- Key usage bits that may be consistent: digitalSignature | -- Key usage bits that may be consistent: digitalSignature | |||
-- and/or nonRepudiation | -- and/or nonRepudiation | |||
4.2.1.13 CRL Distribution Points | 4.2.1.13. CRL Distribution Points | |||
The CRL distribution points extension identifies how CRL information | The CRL distribution points extension identifies how CRL information | |||
is obtained. The extension SHOULD be non-critical, but this profile | is obtained. The extension SHOULD be non-critical, but this profile | |||
RECOMMENDS support for this extension by CAs and applications. | RECOMMENDS support for this extension by CAs and applications. | |||
Further discussion of CRL management is contained in section 5. | Further discussion of CRL management is contained in Section 5. | |||
The cRLDistributionPoints extension is a SEQUENCE of | The cRLDistributionPoints extension is a SEQUENCE of | |||
DistributionPoint. A DistributionPoint consists of three fields, | DistributionPoint. A DistributionPoint consists of three fields, | |||
each of which is optional: distributionPoint, reasons, and cRLIssuer. | each of which is optional: distributionPoint, reasons, and cRLIssuer. | |||
While each of these fields is optional, a DistributionPoint MUST NOT | While each of these fields is optional, a DistributionPoint MUST NOT | |||
consist of only the reasons field; either distributionPoint or | consist of only the reasons field; either distributionPoint or | |||
cRLIssuer MUST be present. If the certificate issuer is not the CRL | cRLIssuer MUST be present. If the certificate issuer is not the CRL | |||
issuer, then the cRLIssuer field MUST be present and contain the Name | issuer, then the cRLIssuer field MUST be present and contain the Name | |||
of the CRL issuer. If the certificate issuer is also the CRL issuer, | of the CRL issuer. If the certificate issuer is also the CRL issuer, | |||
then conforming CAs MUST omit the cRLIssuer field and MUST include | then conforming CAs MUST omit the cRLIssuer field and MUST include | |||
skipping to change at page 46, line 5 ¶ | skipping to change at page 46, line 37 ¶ | |||
authorityRevocationList attribute. The CRL is to be obtained by the | authorityRevocationList attribute. The CRL is to be obtained by the | |||
application from whatever directory server is locally configured. | application from whatever directory server is locally configured. | |||
The protocol the application uses to access the directory (e.g., DAP | The protocol the application uses to access the directory (e.g., DAP | |||
or LDAP) is a local matter. | or LDAP) is a local matter. | |||
If the DistributionPointName contains a general name of type URI, the | If the DistributionPointName contains a general name of type URI, the | |||
following semantics MUST be assumed: the URI is a pointer to the | following semantics MUST be assumed: the URI is a pointer to the | |||
current CRL for the associated reasons and will be issued by the | current CRL for the associated reasons and will be issued by the | |||
associated cRLIssuer. When the HTTP or FTP URI scheme is used, the | associated cRLIssuer. When the HTTP or FTP URI scheme is used, the | |||
URI MUST point to a single DER encoded CRL as specified in | URI MUST point to a single DER encoded CRL as specified in | |||
[RFC 2585]. HTTP server implementations accessed via the URI SHOULD | [RFC2585]. HTTP server implementations accessed via the URI SHOULD | |||
specify the media type application/pkix-crl in the content-type | specify the media type application/pkix-crl in the content-type | |||
header field of the response. When the LDAP URI scheme [RFC 4516] is | header field of the response. When the LDAP URI scheme [RFC4516] is | |||
used, the URI MUST include a <dn> field containing the distinguished | used, the URI MUST include a <dn> field containing the distinguished | |||
name of the entry holding the CRL, MUST include a single <attrdesc> | name of the entry holding the CRL, MUST include a single <attrdesc> | |||
that contains an appropriate attribute description for the attribute | that contains an appropriate attribute description for the attribute | |||
that holds the CRL [RFC 4523], and SHOULD include a <host> | that holds the CRL [RFC4523], and SHOULD include a <host> | |||
(e.g., <ldap://ldap.example.com/cn=example%20CA,dc=example,dc=com? | (e.g., <ldap://ldap.example.com/cn=example%20CA,dc=example,dc=com? | |||
certificateRevocationList;binary>). Omitting the <host> (e.g., | certificateRevocationList;binary>). Omitting the <host> (e.g., | |||
<ldap:///cn=CA,dc=example,dc=com?authorityRevocationList;binary>) has | <ldap:///cn=CA,dc=example,dc=com?authorityRevocationList;binary>) has | |||
the effect of relying on whatever a priori knowledge the client might | the effect of relying on whatever a priori knowledge the client might | |||
have to contact an appropriate server. When present, | have to contact an appropriate server. When present, | |||
DistributionPointName SHOULD include at least one LDAP or HTTP URI. | DistributionPointName SHOULD include at least one LDAP or HTTP URI. | |||
If the DistributionPointName contains the single value | If the DistributionPointName contains the single value | |||
nameRelativeToCRLIssuer, the value provides a distinguished name | nameRelativeToCRLIssuer, the value provides a distinguished name | |||
fragment. The fragment is appended to the X.500 distinguished name | fragment. The fragment is appended to the X.500 distinguished name | |||
skipping to change at page 47, line 24 ¶ | skipping to change at page 48, line 16 ¶ | |||
unused (0), | unused (0), | |||
keyCompromise (1), | keyCompromise (1), | |||
cACompromise (2), | cACompromise (2), | |||
affiliationChanged (3), | affiliationChanged (3), | |||
superseded (4), | superseded (4), | |||
cessationOfOperation (5), | cessationOfOperation (5), | |||
certificateHold (6), | certificateHold (6), | |||
privilegeWithdrawn (7), | privilegeWithdrawn (7), | |||
aACompromise (8) } | aACompromise (8) } | |||
4.2.1.14 Inhibit anyPolicy | 4.2.1.14. Inhibit anyPolicy | |||
The inhibit anyPolicy extension can be used in certificates issued to | The inhibit anyPolicy extension can be used in certificates issued to | |||
CAs. The inhibit anyPolicy extension indicates that the special | CAs. The inhibit anyPolicy extension indicates that the special | |||
anyPolicy OID, with the value { 2 5 29 32 0 }, is not considered an | anyPolicy OID, with the value { 2 5 29 32 0 }, is not considered an | |||
explicit match for other certificate policies except when it appears | explicit match for other certificate policies except when it appears | |||
in an intermediate self-issued CA certificate. The value indicates | in an intermediate self-issued CA certificate. The value indicates | |||
the number of additional non-self-issued certificates that may appear | the number of additional non-self-issued certificates that may appear | |||
in the path before anyPolicy is no longer permitted. For example, a | in the path before anyPolicy is no longer permitted. For example, a | |||
value of one indicates that anyPolicy may be processed in | value of one indicates that anyPolicy may be processed in | |||
certificates issued by the subject of this certificate, but not in | certificates issued by the subject of this certificate, but not in | |||
additional certificates in the path. | additional certificates in the path. | |||
Conforming CAs MUST mark this extension as critical. | Conforming CAs MUST mark this extension as critical. | |||
id-ce-inhibitAnyPolicy OBJECT IDENTIFIER ::= { id-ce 54 } | id-ce-inhibitAnyPolicy OBJECT IDENTIFIER ::= { id-ce 54 } | |||
InhibitAnyPolicy ::= SkipCerts | InhibitAnyPolicy ::= SkipCerts | |||
SkipCerts ::= INTEGER (0..MAX) | SkipCerts ::= INTEGER (0..MAX) | |||
4.2.1.15 Freshest CRL (a.k.a. Delta CRL Distribution Point) | 4.2.1.15. Freshest CRL (a.k.a. Delta CRL Distribution Point) | |||
The freshest CRL extension identifies how delta CRL information is | The freshest CRL extension identifies how delta CRL information is | |||
obtained. The extension MUST be marked as non-critical by conforming | obtained. The extension MUST be marked as non-critical by conforming | |||
CAs. Further discussion of CRL management is contained in section 5. | CAs. Further discussion of CRL management is contained in Section 5. | |||
The same syntax is used for this extension and the | The same syntax is used for this extension and the | |||
cRLDistributionPoints extension, and is described in section | cRLDistributionPoints extension, and is described in Section | |||
4.2.1.13. The same conventions apply to both extensions. | 4.2.1.13. The same conventions apply to both extensions. | |||
id-ce-freshestCRL OBJECT IDENTIFIER ::= { id-ce 46 } | id-ce-freshestCRL OBJECT IDENTIFIER ::= { id-ce 46 } | |||
FreshestCRL ::= CRLDistributionPoints | FreshestCRL ::= CRLDistributionPoints | |||
4.2.2 Private Internet Extensions | 4.2.2. Private Internet Extensions | |||
This section defines two extensions for use in the Internet Public | This section defines two extensions for use in the Internet Public | |||
Key Infrastructure. These extensions may be used to direct | Key Infrastructure. These extensions may be used to direct | |||
applications to on-line information about the issuer or the subject. | applications to on-line information about the issuer or the subject. | |||
Each extension contains a sequence of access methods and access | Each extension contains a sequence of access methods and access | |||
locations. The access method is an object identifier that indicates | locations. The access method is an object identifier that indicates | |||
the type of information that is available. The access location is a | the type of information that is available. The access location is a | |||
GeneralName that implicitly specifies the location and format of the | GeneralName that implicitly specifies the location and format of the | |||
information and the method for obtaining the information. | information and the method for obtaining the information. | |||
skipping to change at page 48, line 34 ¶ | skipping to change at page 49, line 28 ¶ | |||
under the arc id-pe within the arc id-pkix. Any future extensions | under the arc id-pe within the arc id-pkix. Any future extensions | |||
defined for the Internet PKI are also expected to be defined under | defined for the Internet PKI are also expected to be defined under | |||
the arc id-pe. | the arc id-pe. | |||
id-pkix OBJECT IDENTIFIER ::= | id-pkix OBJECT IDENTIFIER ::= | |||
{ iso(1) identified-organization(3) dod(6) internet(1) | { iso(1) identified-organization(3) dod(6) internet(1) | |||
security(5) mechanisms(5) pkix(7) } | security(5) mechanisms(5) pkix(7) } | |||
id-pe OBJECT IDENTIFIER ::= { id-pkix 1 } | id-pe OBJECT IDENTIFIER ::= { id-pkix 1 } | |||
4.2.2.1 Authority Information Access | 4.2.2.1. Authority Information Access | |||
The authority information access extension indicates how to access | The authority information access extension indicates how to access | |||
information and services for the issuer of the certificate in which | information and services for the issuer of the certificate in which | |||
the extension appears. Information and services may include on-line | the extension appears. Information and services may include on-line | |||
validation services and CA policy data. (The location of CRLs is not | validation services and CA policy data. (The location of CRLs is not | |||
specified in this extension; that information is provided by the | specified in this extension; that information is provided by the | |||
cRLDistributionPoints extension.) This extension may be included in | cRLDistributionPoints extension.) This extension may be included in | |||
end entity or CA certificates. Conforming CAs MUST mark this | end entity or CA certificates. Conforming CAs MUST mark this | |||
extension as non-critical. | extension as non-critical. | |||
skipping to change at page 49, line 14 ¶ | skipping to change at page 50, line 4 ¶ | |||
AccessDescription ::= SEQUENCE { | AccessDescription ::= SEQUENCE { | |||
accessMethod OBJECT IDENTIFIER, | accessMethod OBJECT IDENTIFIER, | |||
accessLocation GeneralName } | accessLocation GeneralName } | |||
id-ad OBJECT IDENTIFIER ::= { id-pkix 48 } | id-ad OBJECT IDENTIFIER ::= { id-pkix 48 } | |||
id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 } | id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 } | |||
id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 } | id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 } | |||
Each entry in the sequence AuthorityInfoAccessSyntax describes the | Each entry in the sequence AuthorityInfoAccessSyntax describes the | |||
format and location of additional information provided by the issuer | format and location of additional information provided by the issuer | |||
of the certificate in which this extension appears. The type and | of the certificate in which this extension appears. The type and | |||
format of the information is specified by the accessMethod field; the | format of the information are specified by the accessMethod field; | |||
accessLocation field specifies the location of the information. The | the accessLocation field specifies the location of the information. | |||
retrieval mechanism may be implied by the accessMethod or specified | The retrieval mechanism may be implied by the accessMethod or | |||
by accessLocation. | specified by accessLocation. | |||
This profile defines two accessMethod OIDs: id-ad-caIssuers and | This profile defines two accessMethod OIDs: id-ad-caIssuers and | |||
id-ad-ocsp. | id-ad-ocsp. | |||
In a public key certificate, the id-ad-caIssuers OID is used when the | In a public key certificate, the id-ad-caIssuers OID is used when the | |||
additional information lists certificates that were issued to the CA | additional information lists certificates that were issued to the CA | |||
that issued the certificate containing this extension. The | that issued the certificate containing this extension. The | |||
referenced CA issuers description is intended to aid certificate | referenced CA issuers description is intended to aid certificate | |||
users in the selection of a certification path that terminates at a | users in the selection of a certification path that terminates at a | |||
point trusted by the certificate user. | point trusted by the certificate user. | |||
When id-ad-caIssuers appears as accessMethod, the accessLocation | When id-ad-caIssuers appears as accessMethod, the accessLocation | |||
field describes the referenced description server and the access | field describes the referenced description server and the access | |||
protocol to obtain the referenced description. The accessLocation | protocol to obtain the referenced description. The accessLocation | |||
field is defined as a GeneralName, which can take several forms. | field is defined as a GeneralName, which can take several forms. | |||
When the accessLocation is a directoryName, the information is to be | When the accessLocation is a directoryName, the information is to be | |||
obtained by the application from whatever directory server is locally | obtained by the application from whatever directory server is locally | |||
configured. The entry for the directoryName contains CA certificates | configured. The entry for the directoryName contains CA certificates | |||
in the crossCertificatePair and/or cACertificate attributes as | in the crossCertificatePair and/or cACertificate attributes as | |||
specified in [RFC 4523]. The protocol that application uses to | specified in [RFC4523]. The protocol that application uses to access | |||
access the directory (e.g., DAP or LDAP) is a local matter. | the directory (e.g., DAP or LDAP) is a local matter. | |||
Where the information is available via LDAP, the accessLocation | Where the information is available via LDAP, the accessLocation | |||
SHOULD be a uniformResourceIdentifier. The LDAP URI [RFC 4516] MUST | SHOULD be a uniformResourceIdentifier. The LDAP URI [RFC4516] MUST | |||
include a <dn> field containing the distinguished name of the entry | include a <dn> field containing the distinguished name of the entry | |||
holding the certificates, MUST include an <attributes> field that | holding the certificates, MUST include an <attributes> field that | |||
lists appropriate attribute descriptions for the attributes that hold | lists appropriate attribute descriptions for the attributes that hold | |||
the DER encoded certificates or cross-certificate pairs [RFC 4523], | the DER encoded certificates or cross-certificate pairs [RFC4523], | |||
and SHOULD include a <host> (e.g., <ldap://ldap.example.com/cn=CA, | and SHOULD include a <host> (e.g., <ldap://ldap.example.com/cn=CA, | |||
dc=example,dc=com?cACertificate;binary,crossCertificatePair;binary>). | dc=example,dc=com?cACertificate;binary,crossCertificatePair;binary>). | |||
Omitting the <host> (e.g., <ldap:///cn=exampleCA,dc=example,dc=com? | Omitting the <host> (e.g., <ldap:///cn=exampleCA,dc=example,dc=com? | |||
cACertificate;binary>) has the effect of relying on whatever a priori | cACertificate;binary>) has the effect of relying on whatever a priori | |||
knowledge the client might have to contact an appropriate server. | knowledge the client might have to contact an appropriate server. | |||
Where the information is available via HTTP or FTP, accessLocation | Where the information is available via HTTP or FTP, accessLocation | |||
MUST be a uniformResourceIdentifier and the URI MUST point to either | MUST be a uniformResourceIdentifier and the URI MUST point to either | |||
a single DER encoded certificate as specified in [RFC 2585] or a | a single DER encoded certificate as specified in [RFC2585] or a | |||
collection of certificates in a BER or DER encoded "certs-only" CMS | collection of certificates in a BER or DER encoded "certs-only" CMS | |||
message as specified in [RFC 2797]. | message as specified in [RFC2797]. | |||
Conforming applications that support HTTP or FTP for accessing | Conforming applications that support HTTP or FTP for accessing | |||
certificates MUST be able to accept individual DER encoded | certificates MUST be able to accept individual DER encoded | |||
certificates and SHOULD be able to accept "certs-only" CMS messages. | certificates and SHOULD be able to accept "certs-only" CMS messages. | |||
HTTP server implementations accessed via the URI SHOULD specify the | HTTP server implementations accessed via the URI SHOULD specify the | |||
media type application/pkix-cert [RFC 2585] in the content-type | media type application/pkix-cert [RFC2585] in the content-type header | |||
header field of the response for a single DER encoded certificate and | field of the response for a single DER encoded certificate and SHOULD | |||
SHOULD specify the media type application/pkcs7-mime [RFC 2797] in | specify the media type application/pkcs7-mime [RFC2797] in the | |||
the content-type header field of the response for "certs-only" CMS | content-type header field of the response for "certs-only" CMS | |||
messages. For FTP, the name of a file that contains a single DER | messages. For FTP, the name of a file that contains a single DER | |||
encoded certificate SHOULD have a suffix of ".cer" [RFC 2585] and the | encoded certificate SHOULD have a suffix of ".cer" [RFC2585] and the | |||
name of a file that contains a "certs-only" CMS message SHOULD have a | name of a file that contains a "certs-only" CMS message SHOULD have a | |||
suffix of ".p7c" [RFC 2797]. Consuming clients may use the media | suffix of ".p7c" [RFC2797]. Consuming clients may use the media type | |||
type or file extension as a hint to the content, but should not | or file extension as a hint to the content, but should not depend | |||
depend solely on the presence of the correct media type or file | solely on the presence of the correct media type or file extension in | |||
extension in the server response. | the server response. | |||
The semantics of other id-ad-caIssuers accessLocation name forms are | The semantics of other id-ad-caIssuers accessLocation name forms are | |||
not defined. | not defined. | |||
An authorityInfoAccess extension may include multiple instances of | An authorityInfoAccess extension may include multiple instances of | |||
the id-ad-caIssuers accessMethod. The different instances may | the id-ad-caIssuers accessMethod. The different instances may | |||
specify different methods for accessing the same information or may | specify different methods for accessing the same information or may | |||
point to different information. When the id-ad-caIssuers | point to different information. When the id-ad-caIssuers | |||
accessMethod is used, at least one instance SHOULD specify an | accessMethod is used, at least one instance SHOULD specify an | |||
accessLocation that is an HTTP [RFC 2616] or LDAP [RFC 4516] URI. | accessLocation that is an HTTP [RFC2616] or LDAP [RFC4516] URI. | |||
The id-ad-ocsp OID is used when revocation information for the | The id-ad-ocsp OID is used when revocation information for the | |||
certificate containing this extension is available using the Online | certificate containing this extension is available using the Online | |||
Certificate Status Protocol (OCSP) [RFC 2560]. | Certificate Status Protocol (OCSP) [RFC2560]. | |||
When id-ad-ocsp appears as accessMethod, the accessLocation field is | When id-ad-ocsp appears as accessMethod, the accessLocation field is | |||
the location of the OCSP responder, using the conventions defined in | the location of the OCSP responder, using the conventions defined in | |||
[RFC 2560]. | [RFC2560]. | |||
Additional access descriptors may be defined in other PKIX | Additional access descriptors may be defined in other PKIX | |||
specifications. | specifications. | |||
4.2.2.2 Subject Information Access | 4.2.2.2. Subject Information Access | |||
The subject information access extension indicates how to access | The subject information access extension indicates how to access | |||
information and services for the subject of the certificate in which | information and services for the subject of the certificate in which | |||
the extension appears. When the subject is a CA, information and | the extension appears. When the subject is a CA, information and | |||
services may include certificate validation services and CA policy | services may include certificate validation services and CA policy | |||
data. When the subject is an end entity, the information describes | data. When the subject is an end entity, the information describes | |||
the type of services offered and how to access them. In this case, | the type of services offered and how to access them. In this case, | |||
the contents of this extension are defined in the protocol | the contents of this extension are defined in the protocol | |||
specifications for the supported services. This extension may be | specifications for the supported services. This extension may be | |||
included in end entity or CA certificates. Conforming CAs MUST mark | included in end entity or CA certificates. Conforming CAs MUST mark | |||
skipping to change at page 51, line 30 ¶ | skipping to change at page 52, line 20 ¶ | |||
SubjectInfoAccessSyntax ::= | SubjectInfoAccessSyntax ::= | |||
SEQUENCE SIZE (1..MAX) OF AccessDescription | SEQUENCE SIZE (1..MAX) OF AccessDescription | |||
AccessDescription ::= SEQUENCE { | AccessDescription ::= SEQUENCE { | |||
accessMethod OBJECT IDENTIFIER, | accessMethod OBJECT IDENTIFIER, | |||
accessLocation GeneralName } | accessLocation GeneralName } | |||
Each entry in the sequence SubjectInfoAccessSyntax describes the | Each entry in the sequence SubjectInfoAccessSyntax describes the | |||
format and location of additional information provided by the subject | format and location of additional information provided by the subject | |||
of the certificate in which this extension appears. The type and | of the certificate in which this extension appears. The type and | |||
format of the information is specified by the accessMethod field; the | format of the information are specified by the accessMethod field; | |||
accessLocation field specifies the location of the information. The | the accessLocation field specifies the location of the information. | |||
retrieval mechanism may be implied by the accessMethod or specified | The retrieval mechanism may be implied by the accessMethod or | |||
by accessLocation. | specified by accessLocation. | |||
This profile defines one access method to be used when the subject is | This profile defines one access method to be used when the subject is | |||
a CA and one access method to be used when the subject is an end | a CA and one access method to be used when the subject is an end | |||
entity. Additional access methods may be defined in the future in | entity. Additional access methods may be defined in the future in | |||
the protocol specifications for other services. | the protocol specifications for other services. | |||
The id-ad-caRepository OID is used when the subject is a CA that | The id-ad-caRepository OID is used when the subject is a CA that | |||
publishes certificates it issues in a repository. The accessLocation | publishes certificates it issues in a repository. The accessLocation | |||
field is defined as a GeneralName, which can take several forms. | field is defined as a GeneralName, which can take several forms. | |||
When the accessLocation is a directoryName, the information is to be | When the accessLocation is a directoryName, the information is to be | |||
obtained by the application from whatever directory server is locally | obtained by the application from whatever directory server is locally | |||
configured. When the extension is used to point to CA certificates, | configured. When the extension is used to point to CA certificates, | |||
the entry for the directoryName contains CA certificates in the | the entry for the directoryName contains CA certificates in the | |||
crossCertificatePair and/or cACertificate attributes as specified in | crossCertificatePair and/or cACertificate attributes as specified in | |||
[RFC 4523]. The protocol the application uses to access the | [RFC4523]. The protocol the application uses to access the directory | |||
directory (e.g., DAP or LDAP) is a local matter. | (e.g., DAP or LDAP) is a local matter. | |||
Where the information is available via LDAP, the accessLocation | Where the information is available via LDAP, the accessLocation | |||
SHOULD be a uniformResourceIdentifier. The LDAP URI [RFC 4516] MUST | SHOULD be a uniformResourceIdentifier. The LDAP URI [RFC4516] MUST | |||
include a <dn> field containing the distinguished name of the entry | include a <dn> field containing the distinguished name of the entry | |||
holding the certificates, MUST include an <attributes> field that | holding the certificates, MUST include an <attributes> field that | |||
lists appropriate attribute descriptions for the attributes that hold | lists appropriate attribute descriptions for the attributes that hold | |||
the DER encoded certificates or cross-certificate pairs [RFC 4523], | the DER encoded certificates or cross-certificate pairs [RFC4523], | |||
and SHOULD include a <host> (e.g., <ldap://ldap.example.com/cn=CA, | and SHOULD include a <host> (e.g., <ldap://ldap.example.com/cn=CA, | |||
dc=example,dc=com?cACertificate;binary,crossCertificatePair;binary>). | dc=example,dc=com?cACertificate;binary,crossCertificatePair;binary>). | |||
Omitting the <host> (e.g., <ldap:///cn=exampleCA,dc=example,dc=com? | Omitting the <host> (e.g., <ldap:///cn=exampleCA,dc=example,dc=com? | |||
cACertificate;binary>) has the effect of relying on whatever a priori | cACertificate;binary>) has the effect of relying on whatever a priori | |||
knowledge the client might have to contact an appropriate server. | knowledge the client might have to contact an appropriate server. | |||
Where the information is available via HTTP or FTP, accessLocation | Where the information is available via HTTP or FTP, accessLocation | |||
MUST be a uniformResourceIdentifier and the URI MUST point to either | MUST be a uniformResourceIdentifier and the URI MUST point to either | |||
a single DER encoded certificate as specified in [RFC 2585] or a | a single DER encoded certificate as specified in [RFC2585] or a | |||
collection of certificates in a BER or DER encoded "certs-only" CMS | collection of certificates in a BER or DER encoded "certs-only" CMS | |||
message as specified in [RFC 2797]. | message as specified in [RFC2797]. | |||
Conforming applications that support HTTP or FTP for accessing | Conforming applications that support HTTP or FTP for accessing | |||
certificates MUST be able to accept individual DER encoded | certificates MUST be able to accept individual DER encoded | |||
certificates and SHOULD be able to accept "certs-only" CMS messages. | certificates and SHOULD be able to accept "certs-only" CMS messages. | |||
HTTP server implementations accessed via the URI SHOULD specify the | HTTP server implementations accessed via the URI SHOULD specify the | |||
media type application/pkix-cert [RFC 2585] in the content-type | media type application/pkix-cert [RFC2585] in the content-type header | |||
header field of the response for a single DER encoded certificate and | field of the response for a single DER encoded certificate and SHOULD | |||
SHOULD specify the media type application/pkcs7-mime [RFC 2797] in | specify the media type application/pkcs7-mime [RFC2797] in the | |||
the content-type header field of the response for "certs-only" CMS | content-type header field of the response for "certs-only" CMS | |||
messages. For FTP, the name of a file that contains a single DER | messages. For FTP, the name of a file that contains a single DER | |||
encoded certificate SHOULD have a suffix of ".cer" [RFC 2585] and the | encoded certificate SHOULD have a suffix of ".cer" [RFC2585] and the | |||
name of a file that contains a "certs-only" CMS message SHOULD have a | name of a file that contains a "certs-only" CMS message SHOULD have a | |||
suffix of ".p7c" [RFC 2797]. Consuming clients may use the media | suffix of ".p7c" [RFC2797]. Consuming clients may use the media type | |||
type or file extension as a hint to the content, but should not | or file extension as a hint to the content, but should not depend | |||
depend solely on the presence of the correct media type or file | solely on the presence of the correct media type or file extension in | |||
extension in the server response. | the server response. | |||
The semantics of other id-ad-caRepository accessLocation name forms | The semantics of other id-ad-caRepository accessLocation name forms | |||
are not defined. | are not defined. | |||
A subjectInfoAccess extension may include multiple instances of the | A subjectInfoAccess extension may include multiple instances of the | |||
id-ad-caRepository accessMethod. The different instances may specify | id-ad-caRepository accessMethod. The different instances may specify | |||
different methods for accessing the same information or may point to | different methods for accessing the same information or may point to | |||
different information. When the id-ad-caRepository accessMethod is | different information. When the id-ad-caRepository accessMethod is | |||
used, at least one instance SHOULD specify an accessLocation that is | used, at least one instance SHOULD specify an accessLocation that is | |||
an HTTP [RFC 2616] or LDAP [RFC 4516] URI. | an HTTP [RFC2616] or LDAP [RFC4516] URI. | |||
The id-ad-timeStamping OID is used when the subject offers | The id-ad-timeStamping OID is used when the subject offers | |||
timestamping services using the Time Stamp Protocol defined in | timestamping services using the Time Stamp Protocol defined in | |||
[RFC 3161]. Where the timestamping services are available via HTTP | [RFC3161]. Where the timestamping services are available via HTTP or | |||
or FTP, accessLocation MUST be a uniformResourceIdentifier. Where | FTP, accessLocation MUST be a uniformResourceIdentifier. Where the | |||
the timestamping services are available via electronic mail, | timestamping services are available via electronic mail, | |||
accessLocation MUST be an rfc822Name. Where timestamping services | accessLocation MUST be an rfc822Name. Where timestamping services | |||
are available using TCP/IP, the dNSName or iPAddress name forms may | are available using TCP/IP, the dNSName or iPAddress name forms may | |||
be used. The semantics of other name forms of accessLocation (when | be used. The semantics of other name forms of accessLocation (when | |||
accessMethod is id-ad-timeStamping) are not defined by this | accessMethod is id-ad-timeStamping) are not defined by this | |||
specification. | specification. | |||
Additional access descriptors may be defined in other PKIX | Additional access descriptors may be defined in other PKIX | |||
specifications. | specifications. | |||
id-ad OBJECT IDENTIFIER ::= { id-pkix 48 } | id-ad OBJECT IDENTIFIER ::= { id-pkix 48 } | |||
id-ad-caRepository OBJECT IDENTIFIER ::= { id-ad 5 } | id-ad-caRepository OBJECT IDENTIFIER ::= { id-ad 5 } | |||
id-ad-timeStamping OBJECT IDENTIFIER ::= { id-ad 3 } | id-ad-timeStamping OBJECT IDENTIFIER ::= { id-ad 3 } | |||
5 CRL and CRL Extensions Profile | 5. CRL and CRL Extensions Profile | |||
As discussed above, one goal of this X.509 v2 CRL profile is to | As discussed above, one goal of this X.509 v2 CRL profile is to | |||
foster the creation of an interoperable and reusable Internet PKI. | foster the creation of an interoperable and reusable Internet PKI. | |||
To achieve this goal, guidelines for the use of extensions are | To achieve this goal, guidelines for the use of extensions are | |||
specified, and some assumptions are made about the nature of | specified, and some assumptions are made about the nature of | |||
information included in the CRL. | information included in the CRL. | |||
CRLs may be used in a wide range of applications and environments | CRLs may be used in a wide range of applications and environments | |||
covering a broad spectrum of interoperability goals and an even | covering a broad spectrum of interoperability goals and an even | |||
broader spectrum of operational and assurance requirements. This | broader spectrum of operational and assurance requirements. This | |||
skipping to change at page 53, line 49 ¶ | skipping to change at page 54, line 42 ¶ | |||
that has been authorized by the CA to issue CRLs. CAs publish CRLs | that has been authorized by the CA to issue CRLs. CAs publish CRLs | |||
to provide status information about the certificates they issued. | to provide status information about the certificates they issued. | |||
However, a CA may delegate this responsibility to another trusted | However, a CA may delegate this responsibility to another trusted | |||
authority. | authority. | |||
Each CRL has a particular scope. The CRL scope is the set of | Each CRL has a particular scope. The CRL scope is the set of | |||
certificates that could appear on a given CRL. For example, the | certificates that could appear on a given CRL. For example, the | |||
scope could be "all certificates issued by CA X", "all CA | scope could be "all certificates issued by CA X", "all CA | |||
certificates issued by CA X", "all certificates issued by CA X that | certificates issued by CA X", "all certificates issued by CA X that | |||
have been revoked for reasons of key compromise and CA compromise", | have been revoked for reasons of key compromise and CA compromise", | |||
or could be a set of certificates based on arbitrary local | or a set of certificates based on arbitrary local information, such | |||
information, such as "all certificates issued to the NIST employees | as "all certificates issued to the NIST employees located in | |||
located in Boulder". | Boulder". | |||
A complete CRL lists all unexpired certificates, within its scope, | A complete CRL lists all unexpired certificates, within its scope, | |||
that have been revoked for one of the revocation reasons covered by | that have been revoked for one of the revocation reasons covered by | |||
the CRL scope. A full and complete CRL lists all unexpired | the CRL scope. A full and complete CRL lists all unexpired | |||
certificates issued by a CA that have been revoked for any reason. | certificates issued by a CA that have been revoked for any reason. | |||
(Note that since CAs and CRL issuers are identified by name, the | (Note that since CAs and CRL issuers are identified by name, the | |||
scope of a CRL is not affected by the key used to sign the CRL or the | scope of a CRL is not affected by the key used to sign the CRL or the | |||
key(s) used to sign certificates.) | key(s) used to sign certificates.) | |||
If the scope of the CRL includes one or more certificates issued by | If the scope of the CRL includes one or more certificates issued by | |||
an entity other than the CRL issuer, then it is an indirect CRL. The | an entity other than the CRL issuer, then it is an indirect CRL. The | |||
scope of an indirect CRL may be limited to certificates issued by a | scope of an indirect CRL may be limited to certificates issued by a | |||
single CA or may include certificates issued by multiple CAs. If the | single CA or may include certificates issued by multiple CAs. If the | |||
issuer of the indirect CRL is a CA, then the scope of the indirect | issuer of the indirect CRL is a CA, then the scope of the indirect | |||
CRL MAY also include certificates issued by the issuer of the CRL. | CRL MAY also include certificates issued by the issuer of the CRL. | |||
The CRL issuer MAY also generate delta CRLs. A delta CRL only lists | The CRL issuer MAY also generate delta CRLs. A delta CRL only lists | |||
those certificates, within its scope, whose revocation status has | those certificates, within its scope, whose revocation status has | |||
changed since the issuance of a referenced complete CRL. The | changed since the issuance of a referenced complete CRL. The | |||
skipping to change at page 54, line 35 ¶ | skipping to change at page 55, line 26 ¶ | |||
This profile defines one private Internet CRL extension but does not | This profile defines one private Internet CRL extension but does not | |||
define any private CRL entry extensions. | define any private CRL entry extensions. | |||
Environments with additional or special purpose requirements may | Environments with additional or special purpose requirements may | |||
build on this profile or may replace it. | build on this profile or may replace it. | |||
Conforming CAs are not required to issue CRLs if other revocation or | Conforming CAs are not required to issue CRLs if other revocation or | |||
certificate status mechanisms are provided. When CRLs are issued, | certificate status mechanisms are provided. When CRLs are issued, | |||
the CRLs MUST be version 2 CRLs, include the date by which the next | the CRLs MUST be version 2 CRLs, include the date by which the next | |||
CRL will be issued in the nextUpdate field (section 5.1.2.5), include | CRL will be issued in the nextUpdate field (Section 5.1.2.5), include | |||
the CRL number extension (section 5.2.3), and include the authority | the CRL number extension (Section 5.2.3), and include the authority | |||
key identifier extension (section 5.2.1). Conforming applications | key identifier extension (Section 5.2.1). Conforming applications | |||
that support CRLs are REQUIRED to process both version 1 and version | that support CRLs are REQUIRED to process both version 1 and version | |||
2 complete CRLs that provide revocation information for all | 2 complete CRLs that provide revocation information for all | |||
certificates issued by one CA. Conforming applications are not | certificates issued by one CA. Conforming applications are not | |||
required to support processing of delta CRLs, indirect CRLs, or CRLs | required to support processing of delta CRLs, indirect CRLs, or CRLs | |||
with a scope other than all certificates issued by one CA. | with a scope other than all certificates issued by one CA. | |||
5.1 CRL Fields | 5.1. CRL Fields | |||
The X.509 v2 CRL syntax is as follows. For signature calculation, | The X.509 v2 CRL syntax is as follows. For signature calculation, | |||
the data that is to be signed is ASN.1 DER encoded. ASN.1 DER | the data that is to be signed is ASN.1 DER encoded. ASN.1 DER | |||
encoding is a tag, length, value encoding system for each element. | encoding is a tag, length, value encoding system for each element. | |||
CertificateList ::= SEQUENCE { | CertificateList ::= SEQUENCE { | |||
tbsCertList TBSCertList, | tbsCertList TBSCertList, | |||
signatureAlgorithm AlgorithmIdentifier, | signatureAlgorithm AlgorithmIdentifier, | |||
signatureValue BIT STRING } | signatureValue BIT STRING } | |||
skipping to change at page 55, line 21 ¶ | skipping to change at page 56, line 21 ¶ | |||
version Version OPTIONAL, | version Version OPTIONAL, | |||
-- if present, MUST be v2 | -- if present, MUST be v2 | |||
signature AlgorithmIdentifier, | signature AlgorithmIdentifier, | |||
issuer Name, | issuer Name, | |||
thisUpdate Time, | thisUpdate Time, | |||
nextUpdate Time OPTIONAL, | nextUpdate Time OPTIONAL, | |||
revokedCertificates SEQUENCE OF SEQUENCE { | revokedCertificates SEQUENCE OF SEQUENCE { | |||
userCertificate CertificateSerialNumber, | userCertificate CertificateSerialNumber, | |||
revocationDate Time, | revocationDate Time, | |||
crlEntryExtensions Extensions OPTIONAL | crlEntryExtensions Extensions OPTIONAL | |||
-- if present, MUST be v2 | -- if present, version MUST be v2 | |||
} OPTIONAL, | } OPTIONAL, | |||
crlExtensions [0] EXPLICIT Extensions OPTIONAL | crlExtensions [0] EXPLICIT Extensions OPTIONAL | |||
-- if present, MUST be v2 | -- if present, version MUST be v2 | |||
} | } | |||
-- Version, Time, CertificateSerialNumber, and Extensions | -- Version, Time, CertificateSerialNumber, and Extensions | |||
-- are all defined in the ASN.1 in section 4.1 | -- are all defined in the ASN.1 in Section 4.1 | |||
-- AlgorithmIdentifier is defined in section 4.1.1.2 | -- AlgorithmIdentifier is defined in Section 4.1.1.2 | |||
The following items describe the use of the X.509 v2 CRL in the | The following items describe the use of the X.509 v2 CRL in the | |||
Internet PKI. | Internet PKI. | |||
5.1.1 CertificateList Fields | 5.1.1. CertificateList Fields | |||
The CertificateList is a SEQUENCE of three required fields. The | The CertificateList is a SEQUENCE of three required fields. The | |||
fields are described in detail in the following subsections. | fields are described in detail in the following subsections. | |||
5.1.1.1 tbsCertList | 5.1.1.1. tbsCertList | |||
The first field in the sequence is the tbsCertList. This field is | The first field in the sequence is the tbsCertList. This field is | |||
itself a sequence containing the name of the issuer, issue date, | itself a sequence containing the name of the issuer, issue date, | |||
issue date of the next list, the optional list of revoked | issue date of the next list, the optional list of revoked | |||
certificates, and optional CRL extensions. When there are no revoked | certificates, and optional CRL extensions. When there are no revoked | |||
certificates, the revoked certificates list is absent. When one or | certificates, the revoked certificates list is absent. When one or | |||
more certificates are revoked, each entry on the revoked certificate | more certificates are revoked, each entry on the revoked certificate | |||
list is defined by a sequence of user certificate serial number, | list is defined by a sequence of user certificate serial number, | |||
revocation date, and optional CRL entry extensions. | revocation date, and optional CRL entry extensions. | |||
5.1.1.2 signatureAlgorithm | 5.1.1.2. signatureAlgorithm | |||
The signatureAlgorithm field contains the algorithm identifier for | The signatureAlgorithm field contains the algorithm identifier for | |||
the algorithm used by the CRL issuer to sign the CertificateList. | the algorithm used by the CRL issuer to sign the CertificateList. | |||
The field is of type AlgorithmIdentifier, which is defined in section | The field is of type AlgorithmIdentifier, which is defined in Section | |||
4.1.1.2. [RFC 3279], [RFC 4055], and [RFC 4491] list supported | 4.1.1.2. [RFC3279], [RFC4055], and [RFC4491] list supported | |||
algorithms for this specification, but other signature algorithms MAY | algorithms for this specification, but other signature algorithms MAY | |||
also be supported. | also be supported. | |||
This field MUST contain the same algorithm identifier as the | This field MUST contain the same algorithm identifier as the | |||
signature field in the sequence tbsCertList (section 5.1.2.2). | signature field in the sequence tbsCertList (Section 5.1.2.2). | |||
5.1.1.3 signatureValue | 5.1.1.3. signatureValue | |||
The signatureValue field contains a digital signature computed upon | The signatureValue field contains a digital signature computed upon | |||
the ASN.1 DER encoded tbsCertList. The ASN.1 DER encoded tbsCertList | the ASN.1 DER encoded tbsCertList. The ASN.1 DER encoded tbsCertList | |||
is used as the input to the signature function. This signature value | is used as the input to the signature function. This signature value | |||
is encoded as a BIT STRING and included in the CRL signatureValue | is encoded as a BIT STRING and included in the CRL signatureValue | |||
field. The details of this process are specified for each of the | field. The details of this process are specified for each of the | |||
supported algorithms in [RFC 3279], [RFC 4055], and [RFC 4491]. | supported algorithms in [RFC3279], [RFC4055], and [RFC4491]. | |||
CAs that are also CRL issuers MAY use one private key to digitally | CAs that are also CRL issuers MAY use one private key to digitally | |||
sign certificates and CRLs, or MAY use separate private keys to | sign certificates and CRLs, or MAY use separate private keys to | |||
digitally sign certificates and CRLs. When separate private keys are | digitally sign certificates and CRLs. When separate private keys are | |||
employed, each of the public keys associated with these private keys | employed, each of the public keys associated with these private keys | |||
is placed in a separate certificate, one with the keyCertSign bit set | is placed in a separate certificate, one with the keyCertSign bit set | |||
in the key usage extension, and one with the cRLSign bit set in the | in the key usage extension, and one with the cRLSign bit set in the | |||
key usage extension (section 4.2.1.3). When separate private keys | key usage extension (Section 4.2.1.3). When separate private keys | |||
are employed, certificates issued by the CA contain one authority key | are employed, certificates issued by the CA contain one authority key | |||
identifier, and the corresponding CRLs contain a different authority | identifier, and the corresponding CRLs contain a different authority | |||
key identifier. The use of separate CA certificates for validation | key identifier. The use of separate CA certificates for validation | |||
of certificate signatures and CRL signatures can offer improved | of certificate signatures and CRL signatures can offer improved | |||
security characteristics; however, it imposes a burden on | security characteristics; however, it imposes a burden on | |||
applications, and it might limit interoperability. Many applications | applications, and it might limit interoperability. Many applications | |||
construct a certification path, and then validate the certification | construct a certification path, and then validate the certification | |||
path (section 6). CRL checking in turn requires a separate | path (Section 6). CRL checking in turn requires a separate | |||
certification path to be constructed and validated for the CA's CRL | certification path to be constructed and validated for the CA's CRL | |||
signature validation certificate. Applications that perform CRL | signature validation certificate. Applications that perform CRL | |||
checking MUST support certification path validation when certificates | checking MUST support certification path validation when certificates | |||
and CRLs are digitally signed with the same CA private key. These | and CRLs are digitally signed with the same CA private key. These | |||
applications SHOULD support certification path validation when | applications SHOULD support certification path validation when | |||
certificates and CRLs are digitally signed with different CA private | certificates and CRLs are digitally signed with different CA private | |||
keys. | keys. | |||
5.1.2 Certificate List "To Be Signed" | 5.1.2. Certificate List "To Be Signed" | |||
The certificate list to be signed, or TBSCertList, is a sequence of | The certificate list to be signed, or TBSCertList, is a sequence of | |||
required and optional fields. The required fields identify the CRL | required and optional fields. The required fields identify the CRL | |||
issuer, the algorithm used to sign the CRL, and the date and time the | issuer, the algorithm used to sign the CRL, and the date and time the | |||
CRL was issued. | CRL was issued. | |||
Optional fields include the date and time by which the CRL issuer | Optional fields include the date and time by which the CRL issuer | |||
will issue the next CRL, lists of revoked certificates, and CRL | will issue the next CRL, lists of revoked certificates, and CRL | |||
extensions. The revoked certificate list is optional to support the | extensions. The revoked certificate list is optional to support the | |||
case where a CA has not revoked any unexpired certificates that it | case where a CA has not revoked any unexpired certificates that it | |||
has issued. This profile requires conforming CRL issuers to include | has issued. This profile requires conforming CRL issuers to include | |||
the nextUpdate field and the CRL number and authority key identifier | the nextUpdate field and the CRL number and authority key identifier | |||
CRL extensions in all CRLs issued. | CRL extensions in all CRLs issued. | |||
5.1.2.1 Version | 5.1.2.1. Version | |||
This optional field describes the version of the encoded CRL. When | This optional field describes the version of the encoded CRL. When | |||
extensions are used, as required by this profile, this field MUST be | extensions are used, as required by this profile, this field MUST be | |||
present and MUST specify version 2 (the integer value is 1). | present and MUST specify version 2 (the integer value is 1). | |||
5.1.2.2 Signature | 5.1.2.2. Signature | |||
This field contains the algorithm identifier for the algorithm used | This field contains the algorithm identifier for the algorithm used | |||
to sign the CRL. [RFC 3279], [RFC 4055], and [RFC 4491] list OIDs | to sign the CRL. [RFC3279], [RFC4055], and [RFC4491] list OIDs for | |||
for the most popular signature algorithms used in the Internet PKI. | the most popular signature algorithms used in the Internet PKI. | |||
This field MUST contain the same algorithm identifier as the | This field MUST contain the same algorithm identifier as the | |||
signatureAlgorithm field in the sequence CertificateList (section | signatureAlgorithm field in the sequence CertificateList (Section | |||
5.1.1.2). | 5.1.1.2). | |||
5.1.2.3 Issuer Name | 5.1.2.3. Issuer Name | |||
The issuer name identifies the entity that has signed and issued the | The issuer name identifies the entity that has signed and issued the | |||
CRL. The issuer identity is carried in the issuer name field. | CRL. The issuer identity is carried in the issuer field. | |||
Alternative name forms may also appear in the issuerAltName extension | Alternative name forms may also appear in the issuerAltName extension | |||
(section 5.2.2). The issuer name field MUST contain a non-empty | (Section 5.2.2). The issuer field MUST contain a non-empty X.500 | |||
X.500 distinguished name (DN). The issuer name field is defined as | distinguished name (DN). The issuer field is defined as the X.501 | |||
the X.501 type Name, and MUST follow the encoding rules for the | type Name, and MUST follow the encoding rules for the issuer name | |||
issuer name field in the certificate (section 4.1.2.4). | field in the certificate (Section 4.1.2.4). | |||
5.1.2.4 This Update | 5.1.2.4. This Update | |||
This field indicates the issue date of this CRL. thisUpdate may be | This field indicates the issue date of this CRL. thisUpdate may be | |||
encoded as UTCTime or GeneralizedTime. | encoded as UTCTime or GeneralizedTime. | |||
CRL issuers conforming to this profile MUST encode thisUpdate as | CRL issuers conforming to this profile MUST encode thisUpdate as | |||
UTCTime for dates through the year 2049. CRL issuers conforming to | UTCTime for dates through the year 2049. CRL issuers conforming to | |||
this profile MUST encode thisUpdate as GeneralizedTime for dates in | this profile MUST encode thisUpdate as GeneralizedTime for dates in | |||
the year 2050 or later. Conforming applications MUST be able to | the year 2050 or later. Conforming applications MUST be able to | |||
process dates that are encoded in either UTCTime or GeneralizedTime. | process dates that are encoded in either UTCTime or GeneralizedTime. | |||
Where encoded as UTCTime, thisUpdate MUST be specified and | Where encoded as UTCTime, thisUpdate MUST be specified and | |||
interpreted as defined in section 4.1.2.5.1. Where encoded as | interpreted as defined in Section 4.1.2.5.1. Where encoded as | |||
GeneralizedTime, thisUpdate MUST be specified and interpreted as | GeneralizedTime, thisUpdate MUST be specified and interpreted as | |||
defined in section 4.1.2.5.2. | defined in Section 4.1.2.5.2. | |||
5.1.2.5 Next Update | 5.1.2.5. Next Update | |||
This field indicates the date by which the next CRL will be issued. | This field indicates the date by which the next CRL will be issued. | |||
The next CRL could be issued before the indicated date, but it will | The next CRL could be issued before the indicated date, but it will | |||
not be issued any later than the indicated date. CRL issuers SHOULD | not be issued any later than the indicated date. CRL issuers SHOULD | |||
issue CRLs with a nextUpdate time equal to or later than all previous | issue CRLs with a nextUpdate time equal to or later than all previous | |||
CRLs. nextUpdate may be encoded as UTCTime or GeneralizedTime. | CRLs. nextUpdate may be encoded as UTCTime or GeneralizedTime. | |||
Conforming CRL issuers MUST include the nextUpdate field in all CRLs. | Conforming CRL issuers MUST include the nextUpdate field in all CRLs. | |||
Note that the ASN.1 syntax of TBSCertList describes this field as | Note that the ASN.1 syntax of TBSCertList describes this field as | |||
OPTIONAL, which is consistent with the ASN.1 structure defined in | OPTIONAL, which is consistent with the ASN.1 structure defined in | |||
[X.509]. The behavior of clients processing CRLs that omit | [X.509]. The behavior of clients processing CRLs that omit | |||
nextUpdate is not specified by this profile. | nextUpdate is not specified by this profile. | |||
CRL issuers conforming to this profile MUST encode nextUpdate as | CRL issuers conforming to this profile MUST encode nextUpdate as | |||
UTCTime for dates through the year 2049. CRL issuers conforming to | UTCTime for dates through the year 2049. CRL issuers conforming to | |||
this profile MUST encode nextUpdate as GeneralizedTime for dates in | this profile MUST encode nextUpdate as GeneralizedTime for dates in | |||
the year 2050 or later. Conforming applications MUST be able to | the year 2050 or later. Conforming applications MUST be able to | |||
process dates that are encoded in either UTCTime or GeneralizedTime. | process dates that are encoded in either UTCTime or GeneralizedTime. | |||
Where encoded as UTCTime, nextUpdate MUST be specified and | Where encoded as UTCTime, nextUpdate MUST be specified and | |||
interpreted as defined in section 4.1.2.5.1. Where encoded as | interpreted as defined in Section 4.1.2.5.1. Where encoded as | |||
GeneralizedTime, nextUpdate MUST be specified and interpreted as | GeneralizedTime, nextUpdate MUST be specified and interpreted as | |||
defined in section 4.1.2.5.2. | defined in Section 4.1.2.5.2. | |||
5.1.2.6 Revoked Certificates | 5.1.2.6. Revoked Certificates | |||
When there are no revoked certificates, the revoked certificates list | When there are no revoked certificates, the revoked certificates list | |||
MUST be absent. Otherwise, revoked certificates are listed by their | MUST be absent. Otherwise, revoked certificates are listed by their | |||
serial numbers. Certificates revoked by the CA are uniquely | serial numbers. Certificates revoked by the CA are uniquely | |||
identified by the certificate serial number. The date on which the | identified by the certificate serial number. The date on which the | |||
revocation occurred is specified. The time for revocationDate MUST | revocation occurred is specified. The time for revocationDate MUST | |||
be expressed as described in section 5.1.2.4. Additional information | be expressed as described in Section 5.1.2.4. Additional information | |||
may be supplied in CRL entry extensions; CRL entry extensions are | may be supplied in CRL entry extensions; CRL entry extensions are | |||
discussed in section 5.3. | discussed in Section 5.3. | |||
5.1.2.7 Extensions | 5.1.2.7. Extensions | |||
This field may only appear if the version is 2 (section 5.1.2.1). If | This field may only appear if the version is 2 (Section 5.1.2.1). If | |||
present, this field is a sequence of one or more CRL extensions. CRL | present, this field is a sequence of one or more CRL extensions. CRL | |||
extensions are discussed in section 5.2. | extensions are discussed in Section 5.2. | |||
5.2 CRL Extensions | 5.2. CRL Extensions | |||
The extensions defined by ANSI X9, ISO/IEC, and ITU-T for X.509 v2 | The extensions defined by ANSI X9, ISO/IEC, and ITU-T for X.509 v2 | |||
CRLs [X.509] [X9.55] provide methods for associating additional | CRLs [X.509] [X9.55] provide methods for associating additional | |||
attributes with CRLs. The X.509 v2 CRL format also allows | attributes with CRLs. The X.509 v2 CRL format also allows | |||
communities to define private extensions to carry information unique | communities to define private extensions to carry information unique | |||
to those communities. Each extension in a CRL may be designated as | to those communities. Each extension in a CRL may be designated as | |||
critical or non-critical. If a CRL contains a critical extension | critical or non-critical. If a CRL contains a critical extension | |||
that the application cannot process then the application MUST NOT use | that the application cannot process, then the application MUST NOT | |||
that CRL to determine the status of certificates. However, | use that CRL to determine the status of certificates. However, | |||
applications may ignore unrecognized non-critical extensions. The | applications may ignore unrecognized non-critical extensions. The | |||
following subsections present those extensions used within Internet | following subsections present those extensions used within Internet | |||
CRLs. Communities may elect to include extensions in CRLs that are | CRLs. Communities may elect to include extensions in CRLs that are | |||
not defined in this specification. However, caution should be | not defined in this specification. However, caution should be | |||
exercised in adopting any critical extensions in CRLs that might be | exercised in adopting any critical extensions in CRLs that might be | |||
used in a general context. | used in a general context. | |||
Conforming CRL issuers are REQUIRED to include the authority key | Conforming CRL issuers are REQUIRED to include the authority key | |||
identifier (section 5.2.1) and the CRL number (section 5.2.3) | identifier (Section 5.2.1) and the CRL number (Section 5.2.3) | |||
extensions in all CRLs issued. | extensions in all CRLs issued. | |||
5.2.1 Authority Key Identifier | 5.2.1. Authority Key Identifier | |||
The authority key identifier extension provides a means of | The authority key identifier extension provides a means of | |||
identifying the public key corresponding to the private key used to | identifying the public key corresponding to the private key used to | |||
sign a CRL. The identification can be based on either the key | sign a CRL. The identification can be based on either the key | |||
identifier (the subject key identifier in the CRL signer's | identifier (the subject key identifier in the CRL signer's | |||
certificate) or on the issuer name and serial number. This extension | certificate) or the issuer name and serial number. This extension is | |||
is especially useful where an issuer has more than one signing key, | especially useful where an issuer has more than one signing key, | |||
either due to multiple concurrent key pairs or due to changeover. | either due to multiple concurrent key pairs or due to changeover. | |||
Conforming CRL issuers MUST use the key identifier method, and MUST | Conforming CRL issuers MUST use the key identifier method, and MUST | |||
include this extension in all CRLs issued. | include this extension in all CRLs issued. | |||
The syntax for this CRL extension is defined in section 4.2.1.1. | The syntax for this CRL extension is defined in Section 4.2.1.1. | |||
5.2.2 Issuer Alternative Name | 5.2.2. Issuer Alternative Name | |||
The issuer alternative name extension allows additional identities to | The issuer alternative name extension allows additional identities to | |||
be associated with the issuer of the CRL. Defined options include an | be associated with the issuer of the CRL. Defined options include an | |||
electronic mail address (rfc822Name), a DNS name, an IP address, and | electronic mail address (rfc822Name), a DNS name, an IP address, and | |||
a URI. Multiple instances of a name form and multiple name forms may | a URI. Multiple instances of a name form and multiple name forms may | |||
be included. Whenever such identities are used, the issuer | be included. Whenever such identities are used, the issuer | |||
alternative name extension MUST be used; however, a DNS name MAY be | alternative name extension MUST be used; however, a DNS name MAY be | |||
represented in the issuer field using the domainComponent attribute | represented in the issuer field using the domainComponent attribute | |||
as described in section 4.1.2.4. | as described in Section 4.1.2.4. | |||
Conforming CRL issuers SHOULD mark the issuerAltName extension non- | Conforming CRL issuers SHOULD mark the issuerAltName extension as | |||
critical. | non-critical. | |||
The OID and syntax for this CRL extension are defined in section | The OID and syntax for this CRL extension are defined in Section | |||
4.2.1.7. | 4.2.1.7. | |||
5.2.3 CRL Number | 5.2.3. CRL Number | |||
The CRL number is a non-critical CRL extension that conveys a | The CRL number is a non-critical CRL extension that conveys a | |||
monotonically increasing sequence number for a given CRL scope and | monotonically increasing sequence number for a given CRL scope and | |||
CRL issuer. This extension allows users to easily determine when a | CRL issuer. This extension allows users to easily determine when a | |||
particular CRL supersedes another CRL. CRL numbers also support the | particular CRL supersedes another CRL. CRL numbers also support the | |||
identification of complementary complete CRLs and delta CRLs. CRL | identification of complementary complete CRLs and delta CRLs. CRL | |||
issuers conforming to this profile MUST include this extension in all | issuers conforming to this profile MUST include this extension in all | |||
CRLs and MUST mark this extension non-critical. | CRLs and MUST mark this extension as non-critical. | |||
If a CRL issuer generates delta CRLs in addition to complete CRLs for | If a CRL issuer generates delta CRLs in addition to complete CRLs for | |||
a given scope, the complete CRLs and delta CRLs MUST share one | a given scope, the complete CRLs and delta CRLs MUST share one | |||
numbering sequence. If a delta CRL and a complete CRL that cover the | numbering sequence. If a delta CRL and a complete CRL that cover the | |||
same scope are issued at the same time, they MUST have the same CRL | same scope are issued at the same time, they MUST have the same CRL | |||
number and provide the same revocation information. That is, the | number and provide the same revocation information. That is, the | |||
combination of the delta CRL and an acceptable complete CRL MUST | combination of the delta CRL and an acceptable complete CRL MUST | |||
provide the same revocation information as the simultaneously issued | provide the same revocation information as the simultaneously issued | |||
complete CRL. | complete CRL. | |||
If a CRL issuer generates two CRLs (two complete CRLs, two delta | If a CRL issuer generates two CRLs (two complete CRLs, two delta | |||
CRLs, or a complete CRL and a delta CRL) for the same scope at | CRLs, or a complete CRL and a delta CRL) for the same scope at | |||
different times, the two CRLs MUST NOT have the same CRL number. | different times, the two CRLs MUST NOT have the same CRL number. | |||
That is, if the this update field (section 5.1.2.4) in the two CRLs | That is, if the this update field (Section 5.1.2.4) in the two CRLs | |||
are not identical, the CRL numbers MUST be different. | are not identical, the CRL numbers MUST be different. | |||
Given the requirements above, CRL numbers can be expected to contain | Given the requirements above, CRL numbers can be expected to contain | |||
long integers. CRL verifiers MUST be able to handle CRLNumber values | long integers. CRL verifiers MUST be able to handle CRLNumber values | |||
up to 20 octets. Conforming CRL issuers MUST NOT use CRLNumber | up to 20 octets. Conforming CRL issuers MUST NOT use CRLNumber | |||
values longer than 20 octets. | values longer than 20 octets. | |||
id-ce-cRLNumber OBJECT IDENTIFIER ::= { id-ce 20 } | id-ce-cRLNumber OBJECT IDENTIFIER ::= { id-ce 20 } | |||
CRLNumber ::= INTEGER (0..MAX) | CRLNumber ::= INTEGER (0..MAX) | |||
5.2.4 Delta CRL Indicator | 5.2.4. Delta CRL Indicator | |||
The delta CRL indicator is a critical CRL extension that identifies a | The delta CRL indicator is a critical CRL extension that identifies a | |||
CRL as being a delta CRL. Delta CRLs contain updates to revocation | CRL as being a delta CRL. Delta CRLs contain updates to revocation | |||
information previously distributed, rather than all the information | information previously distributed, rather than all the information | |||
that would appear in a complete CRL. The use of delta CRLs can | that would appear in a complete CRL. The use of delta CRLs can | |||
significantly reduce network load and processing time in some | significantly reduce network load and processing time in some | |||
environments. Delta CRLs are generally smaller than the CRLs they | environments. Delta CRLs are generally smaller than the CRLs they | |||
update, so applications that obtain delta CRLs consume less network | update, so applications that obtain delta CRLs consume less network | |||
bandwidth than applications that obtain the corresponding complete | bandwidth than applications that obtain the corresponding complete | |||
CRLs. Applications that store revocation information in a format | CRLs. Applications that store revocation information in a format | |||
skipping to change at page 61, line 51 ¶ | skipping to change at page 63, line 14 ¶ | |||
the corresponding fields of the delta CRL used in its construction. | the corresponding fields of the delta CRL used in its construction. | |||
In addition, the locally constructed CRL inherits the issuing | In addition, the locally constructed CRL inherits the issuing | |||
distribution point from the delta CRL. | distribution point from the delta CRL. | |||
A complete CRL and a delta CRL MAY be combined if the following four | A complete CRL and a delta CRL MAY be combined if the following four | |||
conditions are satisfied: | conditions are satisfied: | |||
(a) The complete CRL and delta CRL have the same issuer. | (a) The complete CRL and delta CRL have the same issuer. | |||
(b) The complete CRL and delta CRL have the same scope. The two | (b) The complete CRL and delta CRL have the same scope. The two | |||
CRLs have the same scope if either of the following conditions are | CRLs have the same scope if either of the following | |||
met: | conditions are met: | |||
(1) The issuingDistributionPoint extension is omitted from | (1) The issuingDistributionPoint extension is omitted from | |||
both the complete CRL and the delta CRL. | both the complete CRL and the delta CRL. | |||
(2) The issuingDistributionPoint extension is present in both | (2) The issuingDistributionPoint extension is present in both | |||
the complete CRL and the delta CRL, and the values for each of | the complete CRL and the delta CRL, and the values for | |||
the fields in the extensions are the same in both CRLs. | each of the fields in the extensions are the same in both | |||
CRLs. | ||||
(c) The CRL number of the complete CRL is equal to or greater | (c) The CRL number of the complete CRL is equal to or greater | |||
than the BaseCRLNumber specified in the delta CRL. That is, the | than the BaseCRLNumber specified in the delta CRL. That is, | |||
complete CRL contains (at a minimum) all the revocation | the complete CRL contains (at a minimum) all the revocation | |||
information held by the referenced base CRL. | information held by the referenced base CRL. | |||
(d) The CRL number of the complete CRL is less than the CRL | (d) The CRL number of the complete CRL is less than the CRL | |||
number of the delta CRL. That is, the delta CRL follows the | number of the delta CRL. That is, the delta CRL follows the | |||
complete CRL in the numbering sequence. | complete CRL in the numbering sequence. | |||
CRL issuers MUST ensure that the combination of a delta CRL and any | CRL issuers MUST ensure that the combination of a delta CRL and any | |||
appropriate complete CRL accurately reflects the current revocation | appropriate complete CRL accurately reflects the current revocation | |||
status. The CRL issuer MUST include an entry in the delta CRL for | status. The CRL issuer MUST include an entry in the delta CRL for | |||
each certificate within the scope of the delta CRL whose status has | each certificate within the scope of the delta CRL whose status has | |||
changed since the generation of the referenced base CRL: | changed since the generation of the referenced base CRL: | |||
(a) If the certificate is revoked for a reason included in the | (a) If the certificate is revoked for a reason included in the | |||
scope of the CRL, list the certificate as revoked. | scope of the CRL, list the certificate as revoked. | |||
(b) If the certificate is valid and was listed on the referenced | (b) If the certificate is valid and was listed on the referenced | |||
base CRL or any subsequent CRL with reason code certificateHold, | base CRL or any subsequent CRL with reason code | |||
and the reason code certificateHold is included in the scope of | certificateHold, and the reason code certificateHold is | |||
the CRL, list the certificate with the reason code removeFromCRL. | included in the scope of the CRL, list the certificate with | |||
the reason code removeFromCRL. | ||||
(c) If the certificate is revoked for a reason outside the scope | (c) If the certificate is revoked for a reason outside the scope | |||
of the CRL, but the certificate was listed on the referenced base | of the CRL, but the certificate was listed on the referenced | |||
CRL or any subsequent CRL with a reason code included in the scope | base CRL or any subsequent CRL with a reason code included in | |||
of this CRL, list the certificate as revoked but omit the reason | the scope of this CRL, list the certificate as revoked but | |||
code. | omit the reason code. | |||
(d) If the certificate is revoked for a reason outside the scope | (d) If the certificate is revoked for a reason outside the scope | |||
of the CRL and the certificate was neither listed on the | of the CRL and the certificate was neither listed on the | |||
referenced base CRL nor any subsequent CRL with a reason code | referenced base CRL nor any subsequent CRL with a reason code | |||
included in the scope of this CRL, do not list the certificate on | included in the scope of this CRL, do not list the | |||
this CRL. | certificate on this CRL. | |||
The status of a certificate is considered to have changed if it is | The status of a certificate is considered to have changed if it is | |||
revoked (for any revocation reason, including certificateHold), | revoked (for any revocation reason, including certificateHold), if it | |||
released from hold, or if its revocation reason changes. | is released from hold, or if its revocation reason changes. | |||
It is appropriate to list a certificate with reason code | It is appropriate to list a certificate with reason code | |||
removeFromCRL on a delta CRL even if the certificate was not on hold | removeFromCRL on a delta CRL even if the certificate was not on hold | |||
in the referenced base CRL. If the certificate was placed on hold in | in the referenced base CRL. If the certificate was placed on hold in | |||
any CRL issued after the base but before this delta CRL and then | any CRL issued after the base but before this delta CRL and then | |||
released from hold, it MUST be listed on the delta CRL with | released from hold, it MUST be listed on the delta CRL with | |||
revocation reason removeFromCRL. | revocation reason removeFromCRL. | |||
A CRL issuer MAY optionally list a certificate on a delta CRL with | A CRL issuer MAY optionally list a certificate on a delta CRL with | |||
reason code removeFromCRL if the notAfter time specified in the | reason code removeFromCRL if the notAfter time specified in the | |||
skipping to change at page 63, line 42 ¶ | skipping to change at page 65, line 9 ¶ | |||
and nextUpdate fields. Under some circumstances, the CRL issuer may | and nextUpdate fields. Under some circumstances, the CRL issuer may | |||
publish one or more delta CRLs before the time indicated by the | publish one or more delta CRLs before the time indicated by the | |||
nextUpdate field. If more than one current delta CRL for a given | nextUpdate field. If more than one current delta CRL for a given | |||
scope is encountered, the application SHOULD consider the one with | scope is encountered, the application SHOULD consider the one with | |||
the latest value in thisUpdate to be the most current one. | the latest value in thisUpdate to be the most current one. | |||
id-ce-deltaCRLIndicator OBJECT IDENTIFIER ::= { id-ce 27 } | id-ce-deltaCRLIndicator OBJECT IDENTIFIER ::= { id-ce 27 } | |||
BaseCRLNumber ::= CRLNumber | BaseCRLNumber ::= CRLNumber | |||
5.2.5 Issuing Distribution Point | 5.2.5. Issuing Distribution Point | |||
The issuing distribution point is a critical CRL extension that | The issuing distribution point is a critical CRL extension that | |||
identifies the CRL distribution point and scope for a particular CRL, | identifies the CRL distribution point and scope for a particular CRL, | |||
and it indicates whether the CRL covers revocation for end entity | and it indicates whether the CRL covers revocation for end entity | |||
certificates only, CA certificates only, attribute certificates only, | certificates only, CA certificates only, attribute certificates only, | |||
or a limited set of reason codes. Although the extension is | or a limited set of reason codes. Although the extension is | |||
critical, conforming implementations are not required to support this | critical, conforming implementations are not required to support this | |||
extension. However, implementations that do not support this | extension. However, implementations that do not support this | |||
extension MUST either treat the status of any certificate not listed | extension MUST either treat the status of any certificate not listed | |||
on this CRL as unknown or locate another CRL that does not contain | on this CRL as unknown or locate another CRL that does not contain | |||
any unrecognized critical extensions. | any unrecognized critical extensions. | |||
The CRL is signed using the CRL issuer's private key. CRL | The CRL is signed using the CRL issuer's private key. CRL | |||
Distribution Points do not have their own key pairs. If the CRL is | distribution points do not have their own key pairs. If the CRL is | |||
stored in the X.500 directory, it is stored in the directory entry | stored in the X.500 directory, it is stored in the directory entry | |||
corresponding to the CRL distribution point, which may be different | corresponding to the CRL distribution point, which may be different | |||
than the directory entry of the CRL issuer. | from the directory entry of the CRL issuer. | |||
The reason codes associated with a distribution point MUST be | The reason codes associated with a distribution point MUST be | |||
specified in onlySomeReasons. If onlySomeReasons does not appear, | specified in onlySomeReasons. If onlySomeReasons does not appear, | |||
the distribution point MUST contain revocations for all reason codes. | the distribution point MUST contain revocations for all reason codes. | |||
CAs may use CRL distribution points to partition the CRL on the basis | CAs may use CRL distribution points to partition the CRL on the basis | |||
of compromise and routine revocation. In this case, the revocations | of compromise and routine revocation. In this case, the revocations | |||
with reason code keyCompromise (1), cACompromise (2), and | with reason code keyCompromise (1), cACompromise (2), and | |||
aACompromise (8) appear in one distribution point, and the | aACompromise (8) appear in one distribution point, and the | |||
revocations with other reason codes appear in another distribution | revocations with other reason codes appear in another distribution | |||
point. | point. | |||
skipping to change at page 64, line 32 ¶ | skipping to change at page 65, line 48 ¶ | |||
If a CRL includes an issuingDistributionPoint extension with | If a CRL includes an issuingDistributionPoint extension with | |||
onlySomeReasons present, then every certificate in the scope of the | onlySomeReasons present, then every certificate in the scope of the | |||
CRL that is revoked MUST be assigned a revocation reason other than | CRL that is revoked MUST be assigned a revocation reason other than | |||
unspecified. The assigned revocation reason is used to determine on | unspecified. The assigned revocation reason is used to determine on | |||
which CRL(s) to list the revoked certificate, however, there is no | which CRL(s) to list the revoked certificate, however, there is no | |||
requirement to include the reasonCode CRL entry extension in the | requirement to include the reasonCode CRL entry extension in the | |||
corresponding CRL entry. | corresponding CRL entry. | |||
The syntax and semantics for the distributionPoint field are the same | The syntax and semantics for the distributionPoint field are the same | |||
as for the distributionPoint field in the cRLDistributionPoints | as for the distributionPoint field in the cRLDistributionPoints | |||
extension (section 4.2.1.13). If the distributionPoint field is | extension (Section 4.2.1.13). If the distributionPoint field is | |||
present, then it MUST include at least one of names from the | present, then it MUST include at least one of names from the | |||
corresponding distributionPoint field of the cRLDistributionPoints | corresponding distributionPoint field of the cRLDistributionPoints | |||
extension of every certificate that is within the scope of this CRL. | extension of every certificate that is within the scope of this CRL. | |||
The identical encoding MUST be used in the distributionPoint fields | The identical encoding MUST be used in the distributionPoint fields | |||
of the certificate and the CRL. | of the certificate and the CRL. | |||
If the distributionPoint field is absent, the CRL MUST contain | If the distributionPoint field is absent, the CRL MUST contain | |||
entries for all revoked unexpired certificates issued by the CRL | entries for all revoked unexpired certificates issued by the CRL | |||
issuer, if any, within the scope of the CRL. | issuer, if any, within the scope of the CRL. | |||
If the scope of the CRL only includes certificates issued by the CRL | If the scope of the CRL only includes certificates issued by the CRL | |||
issuer then the indirectCRL boolean MUST be set to FALSE. Otherwise, | issuer, then the indirectCRL boolean MUST be set to FALSE. | |||
if the scope of the CRL includes certificates issued by one or more | Otherwise, if the scope of the CRL includes certificates issued by | |||
authorities other than the CRL issuer, the indirectCRL boolean MUST | one or more authorities other than the CRL issuer, the indirectCRL | |||
be set to TRUE. The authority responsible for each entry is | boolean MUST be set to TRUE. The authority responsible for each | |||
indicated by the certificate issuer CRL entry extension (section | entry is indicated by the certificate issuer CRL entry extension | |||
5.3.3). | (Section 5.3.3). | |||
If the scope of the CRL only includes end entity public key | If the scope of the CRL only includes end entity public key | |||
certificates then onlyContainsUserCerts MUST be set to TRUE. If the | certificates, then onlyContainsUserCerts MUST be set to TRUE. If the | |||
scope of the CRL only includes CA certificates then | scope of the CRL only includes CA certificates, then | |||
onlyContainsCACerts MUST be set to TRUE. If either | onlyContainsCACerts MUST be set to TRUE. If either | |||
onlyContainsUserCerts or onlyContainsCACerts is set to TRUE then the | onlyContainsUserCerts or onlyContainsCACerts is set to TRUE, then the | |||
scope of the CRL MUST NOT include any version 1 or version 2 | scope of the CRL MUST NOT include any version 1 or version 2 | |||
certificates. Conforming CRLs issuers MUST set the | certificates. Conforming CRLs issuers MUST set the | |||
onlyContainsAttributeCerts boolean to FALSE. | onlyContainsAttributeCerts boolean to FALSE. | |||
Conforming CRLs issuers MUST NOT issue CRLs where the DER encoding of | Conforming CRLs issuers MUST NOT issue CRLs where the DER encoding of | |||
the issuing distribution point extension is an empty sequence. That | the issuing distribution point extension is an empty sequence. That | |||
is, if onlyContainsUserCerts, onlyContainsCACerts, indirectCRL, and | is, if onlyContainsUserCerts, onlyContainsCACerts, indirectCRL, and | |||
onlyContainsAttributeCerts are all FALSE then either the | onlyContainsAttributeCerts are all FALSE, then either the | |||
distributionPoint field or the onlySomeReasons field MUST be present. | distributionPoint field or the onlySomeReasons field MUST be present. | |||
id-ce-issuingDistributionPoint OBJECT IDENTIFIER ::= { id-ce 28 } | id-ce-issuingDistributionPoint OBJECT IDENTIFIER ::= { id-ce 28 } | |||
IssuingDistributionPoint ::= SEQUENCE { | IssuingDistributionPoint ::= SEQUENCE { | |||
distributionPoint [0] DistributionPointName OPTIONAL, | distributionPoint [0] DistributionPointName OPTIONAL, | |||
onlyContainsUserCerts [1] BOOLEAN DEFAULT FALSE, | onlyContainsUserCerts [1] BOOLEAN DEFAULT FALSE, | |||
onlyContainsCACerts [2] BOOLEAN DEFAULT FALSE, | onlyContainsCACerts [2] BOOLEAN DEFAULT FALSE, | |||
onlySomeReasons [3] ReasonFlags OPTIONAL, | onlySomeReasons [3] ReasonFlags OPTIONAL, | |||
indirectCRL [4] BOOLEAN DEFAULT FALSE, | indirectCRL [4] BOOLEAN DEFAULT FALSE, | |||
onlyContainsAttributeCerts [5] BOOLEAN DEFAULT FALSE } | onlyContainsAttributeCerts [5] BOOLEAN DEFAULT FALSE } | |||
-- at most one of onlyContainsUserCerts, onlyContainsCACerts, | -- at most one of onlyContainsUserCerts, onlyContainsCACerts, | |||
-- and onlyContainsAttributeCerts may be set to TRUE. | -- and onlyContainsAttributeCerts may be set to TRUE. | |||
5.2.6 Freshest CRL (a.k.a. Delta CRL Distribution Point) | 5.2.6. Freshest CRL (a.k.a. Delta CRL Distribution Point) | |||
The freshest CRL extension identifies how delta CRL information for | The freshest CRL extension identifies how delta CRL information for | |||
this complete CRL is obtained. Conforming CRL issuers MUST mark this | this complete CRL is obtained. Conforming CRL issuers MUST mark this | |||
extension non-critical. This extension MUST NOT appear in delta | extension as non-critical. This extension MUST NOT appear in delta | |||
CRLs. | CRLs. | |||
The same syntax is used for this extension as the | The same syntax is used for this extension as the | |||
cRLDistributionPoints certificate extension, and is described in | cRLDistributionPoints certificate extension, and is described in | |||
section 4.2.1.13. However, only the distribution point field is | Section 4.2.1.13. However, only the distribution point field is | |||
meaningful in this context. The reasons and cRLIssuer fields MUST be | meaningful in this context. The reasons and cRLIssuer fields MUST be | |||
omitted from this CRL extension. | omitted from this CRL extension. | |||
Each distribution point name provides the location at which a delta | Each distribution point name provides the location at which a delta | |||
CRL for this complete CRL can be found. The scope of these delta | CRL for this complete CRL can be found. The scope of these delta | |||
CRLs MUST be the same as the scope of this complete CRL. The | CRLs MUST be the same as the scope of this complete CRL. The | |||
contents of this CRL extension are only used to locate delta CRLs; | contents of this CRL extension are only used to locate delta CRLs; | |||
the contents are not used to validate the CRL or the referenced delta | the contents are not used to validate the CRL or the referenced delta | |||
CRLs. The encoding conventions defined for distribution points in | CRLs. The encoding conventions defined for distribution points in | |||
section 4.2.1.13 apply to this extension. | Section 4.2.1.13 apply to this extension. | |||
id-ce-freshestCRL OBJECT IDENTIFIER ::= { id-ce 46 } | id-ce-freshestCRL OBJECT IDENTIFIER ::= { id-ce 46 } | |||
FreshestCRL ::= CRLDistributionPoints | FreshestCRL ::= CRLDistributionPoints | |||
5.2.7 Authority Information Access | 5.2.7. Authority Information Access | |||
This section defines the use of the Authority Information Access | This section defines the use of the Authority Information Access | |||
extension in a CRL. The syntax and semantics defined in section | extension in a CRL. The syntax and semantics defined in Section | |||
4.2.2.1 for the certificate extension are also used for the CRL | 4.2.2.1 for the certificate extension are also used for the CRL | |||
extension. | extension. | |||
This CRL extension MUST be marked non-critical. | This CRL extension MUST be marked as non-critical. | |||
When present in a CRL, this extension MUST include at least one | When present in a CRL, this extension MUST include at least one | |||
AccessDescription specifying id-ad-caIssuers as the accessMethod. | AccessDescription specifying id-ad-caIssuers as the accessMethod. | |||
The id-ad-caIssuers OID is used when the information that is | The id-ad-caIssuers OID is used when the information available lists | |||
available lists certificates that can be used to verify the signature | certificates that can be used to verify the signature on the CRL | |||
on the CRL (i.e., certificates that have a subject name that matches | (i.e., certificates that have a subject name that matches the issuer | |||
the issuer name on the CRL and that have a subject public key that | name on the CRL and that have a subject public key that corresponds | |||
corresponds to the private key used to sign the CRL). Access method | to the private key used to sign the CRL). Access method types other | |||
types other than id-ad-caIssuers MUST NOT be included. At least one | than id-ad-caIssuers MUST NOT be included. At least one instance of | |||
instance of AccessDescription SHOULD specify an accessLocation that | AccessDescription SHOULD specify an accessLocation that is an HTTP | |||
is an HTTP [RFC 2616] or LDAP [RFC 4516] URI. | [RFC2616] or LDAP [RFC4516] URI. | |||
Where the information is available via HTTP or FTP, accessLocation | Where the information is available via HTTP or FTP, accessLocation | |||
MUST be a uniformResourceIdentifier and the URI MUST point to either | MUST be a uniformResourceIdentifier and the URI MUST point to either | |||
a single DER encoded certificate as specified in [RFC 2585] or a | a single DER encoded certificate as specified in [RFC2585] or a | |||
collection of certificates in a BER or DER encoded "certs-only" CMS | collection of certificates in a BER or DER encoded "certs-only" CMS | |||
message as specified in [RFC 2797]. | message as specified in [RFC2797]. | |||
Conforming applications that support HTTP or FTP for accessing | Conforming applications that support HTTP or FTP for accessing | |||
certificates MUST be able to accept individual DER encoded | certificates MUST be able to accept individual DER encoded | |||
certificates and SHOULD be able to accept "certs-only" CMS messages. | certificates and SHOULD be able to accept "certs-only" CMS messages. | |||
HTTP server implementations accessed via the URI SHOULD specify the | HTTP server implementations accessed via the URI SHOULD specify the | |||
media type application/pkix-cert [RFC 2585] in the content-type | media type application/pkix-cert [RFC2585] in the content-type header | |||
header field of the response for a single DER encoded certificate and | field of the response for a single DER encoded certificate and SHOULD | |||
SHOULD specify the media type application/pkcs7-mime [RFC 2797] in | specify the media type application/pkcs7-mime [RFC2797] in the | |||
the content-type header field of the response for "certs-only" CMS | content-type header field of the response for "certs-only" CMS | |||
messages. For FTP, the name of a file that contains a single DER | messages. For FTP, the name of a file that contains a single DER | |||
encoded certificate SHOULD have a suffix of ".cer" [RFC 2585] and the | encoded certificate SHOULD have a suffix of ".cer" [RFC2585] and the | |||
name of a file that contains a "certs-only" CMS message SHOULD have a | name of a file that contains a "certs-only" CMS message SHOULD have a | |||
suffix of ".p7c" [RFC 2797]. Consuming clients may use the media | suffix of ".p7c" [RFC2797]. Consuming clients may use the media type | |||
type or file extension as a hint to the content, but should not | or file extension as a hint to the content, but should not depend | |||
depend solely on the presence of the correct media type or file | solely on the presence of the correct media type or file extension in | |||
extension in the server response. | the server response. | |||
When the accessLocation is a directoryName, the information is to be | When the accessLocation is a directoryName, the information is to be | |||
obtained by the application from whatever directory server is locally | obtained by the application from whatever directory server is locally | |||
configured. When one CA public key is used to validate signatures on | configured. When one CA public key is used to validate signatures on | |||
certificates and CRLs, the desired CA certificate is stored in the | certificates and CRLs, the desired CA certificate is stored in the | |||
crossCertificatePair and/or cACertificate attributes as specified in | crossCertificatePair and/or cACertificate attributes as specified in | |||
[RFC 4523]. When different public keys are used to validate | [RFC4523]. When different public keys are used to validate | |||
signatures on certificates and CRLs, the desired certificate is | signatures on certificates and CRLs, the desired certificate is | |||
stored in the userCertificate attribute as specified in [RFC 4523]. | stored in the userCertificate attribute as specified in [RFC4523]. | |||
Thus, implementations that support the directoryName form of | Thus, implementations that support the directoryName form of | |||
accessLocation MUST be prepared to find the needed certificate in any | accessLocation MUST be prepared to find the needed certificate in any | |||
of these three attributes. The protocol that an application uses to | of these three attributes. The protocol that an application uses to | |||
access the directory (e.g., DAP or LDAP) is a local matter. | access the directory (e.g., DAP or LDAP) is a local matter. | |||
Where the information is available via LDAP, the accessLocation | Where the information is available via LDAP, the accessLocation | |||
SHOULD be a uniformResourceIdentifier. The LDAP URI [RFC 4516] MUST | SHOULD be a uniformResourceIdentifier. The LDAP URI [RFC4516] MUST | |||
include a <dn> field containing the distinguished name of the entry | include a <dn> field containing the distinguished name of the entry | |||
holding the certificates, MUST include an <attributes> field that | holding the certificates, MUST include an <attributes> field that | |||
lists appropriate attribute descriptions for the attributes that hold | lists appropriate attribute descriptions for the attributes that hold | |||
the DER encoded certificates or cross-certificate pairs [RFC 4523], | the DER encoded certificates or cross-certificate pairs [RFC4523], | |||
and SHOULD include a <host> (e.g., <ldap://ldap.example.com/cn=CA, | and SHOULD include a <host> (e.g., <ldap://ldap.example.com/cn=CA, | |||
dc=example,dc=com?cACertificate;binary,crossCertificatePair;binary>). | dc=example,dc=com?cACertificate;binary,crossCertificatePair;binary>). | |||
Omitting the <host> (e.g., <ldap:///cn=exampleCA,dc=example,dc=com? | Omitting the <host> (e.g., <ldap:///cn=exampleCA,dc=example,dc=com? | |||
cACertificate;binary>) has the effect of relying on whatever a priori | cACertificate;binary>) has the effect of relying on whatever a priori | |||
knowledge the client might have to contact an appropriate server. | knowledge the client might have to contact an appropriate server. | |||
5.3 CRL Entry Extensions | 5.3. CRL Entry Extensions | |||
The CRL entry extensions defined by ISO/IEC, ITU-T, and ANSI X9 for | The CRL entry extensions defined by ISO/IEC, ITU-T, and ANSI X9 for | |||
X.509 v2 CRLs provide methods for associating additional attributes | X.509 v2 CRLs provide methods for associating additional attributes | |||
with CRL entries [X.509] [X9.55]. The X.509 v2 CRL format also | with CRL entries [X.509] [X9.55]. The X.509 v2 CRL format also | |||
allows communities to define private CRL entry extensions to carry | allows communities to define private CRL entry extensions to carry | |||
information unique to those communities. Each extension in a CRL | information unique to those communities. Each extension in a CRL | |||
entry may be designated as critical or non-critical. If a CRL | entry may be designated as critical or non-critical. If a CRL | |||
contains a critical CRL entry extension that the application cannot | contains a critical CRL entry extension that the application cannot | |||
process then the application MUST NOT use that CRL to determine the | process, then the application MUST NOT use that CRL to determine the | |||
status of any certificates. However, applications may ignore | status of any certificates. However, applications may ignore | |||
unrecognized non-critical CRL entry extensions. | unrecognized non-critical CRL entry extensions. | |||
The following subsections present recommended extensions used within | The following subsections present recommended extensions used within | |||
Internet CRL entries and standard locations for information. | Internet CRL entries and standard locations for information. | |||
Communities may elect to use additional CRL entry extensions; | Communities may elect to use additional CRL entry extensions; | |||
however, caution should be exercised in adopting any critical CRL | however, caution should be exercised in adopting any critical CRL | |||
entry extensions in CRLs that might be used in a general context. | entry extensions in CRLs that might be used in a general context. | |||
Support for the CRL entry extensions defined in this specification is | Support for the CRL entry extensions defined in this specification is | |||
optional for conforming CRL issuers and applications. However, CRL | optional for conforming CRL issuers and applications. However, CRL | |||
issuers SHOULD include reason codes (section 5.3.1) and invalidity | issuers SHOULD include reason codes (Section 5.3.1) and invalidity | |||
dates (section 5.3.2) whenever this information is available. | dates (Section 5.3.2) whenever this information is available. | |||
5.3.1 Reason Code | 5.3.1. Reason Code | |||
The reasonCode is a non-critical CRL entry extension that identifies | The reasonCode is a non-critical CRL entry extension that identifies | |||
the reason for the certificate revocation. CRL issuers are strongly | the reason for the certificate revocation. CRL issuers are strongly | |||
encouraged to include meaningful reason codes in CRL entries; | encouraged to include meaningful reason codes in CRL entries; | |||
however, the reason code CRL entry extension SHOULD be absent instead | however, the reason code CRL entry extension SHOULD be absent instead | |||
of using the unspecified (0) reasonCode value. | of using the unspecified (0) reasonCode value. | |||
The removeFromCRL (8) reasonCode value may only appear in delta CRLs | The removeFromCRL (8) reasonCode value may only appear in delta CRLs | |||
and indicates that a certificate is to be removed from a CRL because | and indicates that a certificate is to be removed from a CRL because | |||
either the certificate expired or was removed from hold. All other | either the certificate expired or was removed from hold. All other | |||
skipping to change at page 68, line 36 ¶ | skipping to change at page 70, line 22 ¶ | |||
cACompromise (2), | cACompromise (2), | |||
affiliationChanged (3), | affiliationChanged (3), | |||
superseded (4), | superseded (4), | |||
cessationOfOperation (5), | cessationOfOperation (5), | |||
certificateHold (6), | certificateHold (6), | |||
-- value 7 is not used | -- value 7 is not used | |||
removeFromCRL (8), | removeFromCRL (8), | |||
privilegeWithdrawn (9), | privilegeWithdrawn (9), | |||
aACompromise (10) } | aACompromise (10) } | |||
5.3.2 Invalidity Date | 5.3.2. Invalidity Date | |||
The invalidity date is a non-critical CRL entry extension that | The invalidity date is a non-critical CRL entry extension that | |||
provides the date on which it is known or suspected that the private | provides the date on which it is known or suspected that the private | |||
key was compromised or that the certificate otherwise became invalid. | key was compromised or that the certificate otherwise became invalid. | |||
This date may be earlier than the revocation date in the CRL entry, | This date may be earlier than the revocation date in the CRL entry, | |||
which is the date at which the CA processed the revocation. When a | which is the date at which the CA processed the revocation. When a | |||
revocation is first posted by a CRL issuer in a CRL, the invalidity | revocation is first posted by a CRL issuer in a CRL, the invalidity | |||
date may precede the date of issue of earlier CRLs, but the | date may precede the date of issue of earlier CRLs, but the | |||
revocation date SHOULD NOT precede the date of issue of earlier CRLs. | revocation date SHOULD NOT precede the date of issue of earlier CRLs. | |||
Whenever this information is available, CRL issuers are strongly | Whenever this information is available, CRL issuers are strongly | |||
encouraged to share it with CRL users. | encouraged to share it with CRL users. | |||
The GeneralizedTime values included in this field MUST be expressed | The GeneralizedTime values included in this field MUST be expressed | |||
in Greenwich Mean Time (Zulu), and MUST be specified and interpreted | in Greenwich Mean Time (Zulu), and MUST be specified and interpreted | |||
as defined in section 4.1.2.5.2. | as defined in Section 4.1.2.5.2. | |||
id-ce-invalidityDate OBJECT IDENTIFIER ::= { id-ce 24 } | id-ce-invalidityDate OBJECT IDENTIFIER ::= { id-ce 24 } | |||
InvalidityDate ::= GeneralizedTime | InvalidityDate ::= GeneralizedTime | |||
5.3.3 Certificate Issuer | 5.3.3. Certificate Issuer | |||
This CRL entry extension identifies the certificate issuer associated | This CRL entry extension identifies the certificate issuer associated | |||
with an entry in an indirect CRL, that is, a CRL that has the | with an entry in an indirect CRL, that is, a CRL that has the | |||
indirectCRL indicator set in its issuing distribution point | indirectCRL indicator set in its issuing distribution point | |||
extension. When present, the certificate issuer CRL entry extension | extension. When present, the certificate issuer CRL entry extension | |||
includes one or more names from the issuer field and/or issuer | includes one or more names from the issuer field and/or issuer | |||
alternative name extension of the certificate that corresponds to the | alternative name extension of the certificate that corresponds to the | |||
CRL entry. If this extension is not present on the first entry in an | CRL entry. If this extension is not present on the first entry in an | |||
indirect CRL, the certificate issuer defaults to the CRL issuer. On | indirect CRL, the certificate issuer defaults to the CRL issuer. On | |||
subsequent entries in an indirect CRL, if this extension is not | subsequent entries in an indirect CRL, if this extension is not | |||
skipping to change at page 69, line 37 ¶ | skipping to change at page 71, line 22 ¶ | |||
Conforming CRL issuers MUST include in this extension the | Conforming CRL issuers MUST include in this extension the | |||
distinguished name (DN) from the issuer field of the certificate that | distinguished name (DN) from the issuer field of the certificate that | |||
corresponds to this CRL entry. The encoding of the DN MUST be | corresponds to this CRL entry. The encoding of the DN MUST be | |||
identical to the encoding used in the certificate. | identical to the encoding used in the certificate. | |||
CRL issuers MUST mark this extension as critical since an | CRL issuers MUST mark this extension as critical since an | |||
implementation that ignored this extension could not correctly | implementation that ignored this extension could not correctly | |||
attribute CRL entries to certificates. This specification RECOMMENDS | attribute CRL entries to certificates. This specification RECOMMENDS | |||
that implementations recognize this extension. | that implementations recognize this extension. | |||
6 Certification Path Validation | 6. Certification Path Validation | |||
Certification path validation procedures for the Internet PKI are | Certification path validation procedures for the Internet PKI are | |||
based on the algorithm supplied in [X.509]. Certification path | based on the algorithm supplied in [X.509]. Certification path | |||
processing verifies the binding between the subject distinguished | processing verifies the binding between the subject distinguished | |||
name and/or subject alternative name and subject public key. The | name and/or subject alternative name and subject public key. The | |||
binding is limited by constraints that are specified in the | binding is limited by constraints that are specified in the | |||
certificates that comprise the path and inputs that are specified by | certificates that comprise the path and inputs that are specified by | |||
the relying party. The basic constraints and policy constraints | the relying party. The basic constraints and policy constraints | |||
extensions allow the certification path processing logic to automate | extensions allow the certification path processing logic to automate | |||
the decision making process. | the decision making process. | |||
skipping to change at page 70, line 4 ¶ | skipping to change at page 71, line 38 ¶ | |||
binding is limited by constraints that are specified in the | binding is limited by constraints that are specified in the | |||
certificates that comprise the path and inputs that are specified by | certificates that comprise the path and inputs that are specified by | |||
the relying party. The basic constraints and policy constraints | the relying party. The basic constraints and policy constraints | |||
extensions allow the certification path processing logic to automate | extensions allow the certification path processing logic to automate | |||
the decision making process. | the decision making process. | |||
This section describes an algorithm for validating certification | This section describes an algorithm for validating certification | |||
paths. Conforming implementations of this specification are not | paths. Conforming implementations of this specification are not | |||
required to implement this algorithm, but MUST provide functionality | required to implement this algorithm, but MUST provide functionality | |||
equivalent to the external behavior resulting from this procedure. | equivalent to the external behavior resulting from this procedure. | |||
Any algorithm may be used by a particular implementation so long as | Any algorithm may be used by a particular implementation so long as | |||
it derives the correct result. | it derives the correct result. | |||
In section 6.1, the text describes basic path validation. Valid | In Section 6.1, the text describes basic path validation. Valid | |||
paths begin with certificates issued by a trust anchor. The | paths begin with certificates issued by a trust anchor. The | |||
algorithm requires the public key of the CA, the CA's name, and any | algorithm requires the public key of the CA, the CA's name, and any | |||
constraints upon the set of paths that may be validated using this | constraints upon the set of paths that may be validated using this | |||
key. | key. | |||
The selection of a trust anchor is a matter of policy: it could be | The selection of a trust anchor is a matter of policy: it could be | |||
the top CA in a hierarchical PKI; the CA that issued the verifier's | the top CA in a hierarchical PKI, the CA that issued the verifier's | |||
own certificate(s); or any other CA in a network PKI. The path | own certificate(s), or any other CA in a network PKI. The path | |||
validation procedure is the same regardless of the choice of trust | validation procedure is the same regardless of the choice of trust | |||
anchor. In addition, different applications may rely on different | anchor. In addition, different applications may rely on different | |||
trust anchors, or may accept paths that begin with any of a set of | trust anchors, or may accept paths that begin with any of a set of | |||
trust anchors. | trust anchors. | |||
Section 6.2 describes methods for using the path validation algorithm | Section 6.2 describes methods for using the path validation algorithm | |||
in specific implementations. | in specific implementations. | |||
Section 6.3 describes the steps necessary to determine if a | Section 6.3 describes the steps necessary to determine if a | |||
certificate is revoked when CRLs are the revocation mechanism used by | certificate is revoked when CRLs are the revocation mechanism used by | |||
the certificate issuer. | the certificate issuer. | |||
6.1 Basic Path Validation | 6.1. Basic Path Validation | |||
This text describes an algorithm for X.509 path processing. A | This text describes an algorithm for X.509 path processing. A | |||
conforming implementation MUST include an X.509 path processing | conforming implementation MUST include an X.509 path processing | |||
procedure that is functionally equivalent to the external behavior of | procedure that is functionally equivalent to the external behavior of | |||
this algorithm. However, support for some of the certificate | this algorithm. However, support for some of the certificate | |||
extensions processed in this algorithm are OPTIONAL for compliant | extensions processed in this algorithm are OPTIONAL for compliant | |||
implementations. Clients that do not support these extensions MAY | implementations. Clients that do not support these extensions MAY | |||
omit the corresponding steps in the path validation algorithm. | omit the corresponding steps in the path validation algorithm. | |||
For example, clients are not required to support the policy mappings | For example, clients are not required to support the policy mappings | |||
extension. Clients that do not support this extension MAY omit the | extension. Clients that do not support this extension MAY omit the | |||
path validation steps where policy mappings are processed. Note that | path validation steps where policy mappings are processed. Note that | |||
clients MUST reject the certificate if it contains an unsupported | clients MUST reject the certificate if it contains an unsupported | |||
critical extension. | critical extension. | |||
While the certificate and CRL profiles specified in sections 4 and 5 | While the certificate and CRL profiles specified in Sections 4 and 5 | |||
of this document specify values for certificate and CRL fields and | of this document specify values for certificate and CRL fields and | |||
extensions that are considered to be appropriate for the Internet | extensions that are considered to be appropriate for the Internet | |||
PKI, the algorithm presented in this section is not limited to | PKI, the algorithm presented in this section is not limited to | |||
accepting certificates and CRLs that conform to these profiles. | accepting certificates and CRLs that conform to these profiles. | |||
Therefore, the algorithm only includes checks to verify that the | Therefore, the algorithm only includes checks to verify that the | |||
certification path is valid according to X.509 and does not include | certification path is valid according to X.509 and does not include | |||
checks to verify that the certificates and CRLs conform to this | checks to verify that the certificates and CRLs conform to this | |||
profile. While the algorithm could be extended to include checks for | profile. While the algorithm could be extended to include checks for | |||
conformance to the profiles in sections 4 and 5, this profile | conformance to the profiles in Sections 4 and 5, this profile | |||
RECOMMENDS against including such checks. | RECOMMENDS against including such checks. | |||
The algorithm presented in this section validates the certificate | The algorithm presented in this section validates the certificate | |||
with respect to the current date and time. A conforming | with respect to the current date and time. A conforming | |||
implementation MAY also support validation with respect to some point | implementation MAY also support validation with respect to some point | |||
in the past. Note that mechanisms are not available for validating a | in the past. Note that mechanisms are not available for validating a | |||
certificate with respect to a time outside the certificate validity | certificate with respect to a time outside the certificate validity | |||
period. | period. | |||
The trust anchor is an input to the algorithm. There is no | The trust anchor is an input to the algorithm. There is no | |||
requirement that the same trust anchor be used to validate all | requirement that the same trust anchor be used to validate all | |||
certification paths. Different trust anchors MAY be used to validate | certification paths. Different trust anchors MAY be used to validate | |||
different paths, as discussed further in section 6.2. | different paths, as discussed further in Section 6.2. | |||
The primary goal of path validation is to verify the binding between | The primary goal of path validation is to verify the binding between | |||
a subject distinguished name or a subject alternative name and | a subject distinguished name or a subject alternative name and | |||
subject public key, as represented in the target certificate, based | subject public key, as represented in the target certificate, based | |||
on the public key of the trust anchor. In most cases the target | on the public key of the trust anchor. In most cases, the target | |||
certificate will be an end entity certificate, but the target | certificate will be an end entity certificate, but the target | |||
certificate may be a CA certificate as long as the subject public key | certificate may be a CA certificate as long as the subject public key | |||
is to be used for a purpose other than verifying the signature on a | is to be used for a purpose other than verifying the signature on a | |||
public key certificate. Verifying the binding between the name and | public key certificate. Verifying the binding between the name and | |||
subject public key requires obtaining a sequence of certificates that | subject public key requires obtaining a sequence of certificates that | |||
support that binding. The procedure performed to obtain this | support that binding. The procedure performed to obtain this | |||
sequence of certificates is outside the scope of this specification. | sequence of certificates is outside the scope of this specification. | |||
To meet this goal, the path validation process verifies, among other | To meet this goal, the path validation process verifies, among other | |||
things, that a prospective certification path (a sequence of n | things, that a prospective certification path (a sequence of n | |||
certificates) satisfies the following conditions: | certificates) satisfies the following conditions: | |||
(a) for all x in {1, ..., n-1}, the subject of certificate x is | (a) for all x in {1, ..., n-1}, the subject of certificate x is | |||
the issuer of certificate x+1; | the issuer of certificate x+1; | |||
(b) certificate 1 is issued by the trust anchor; | (b) certificate 1 is issued by the trust anchor; | |||
(c) certificate n is the certificate to be validated (i.e., the | (c) certificate n is the certificate to be validated (i.e., the | |||
target certificate); and | target certificate); and | |||
(d) for all x in {1, ..., n}, the certificate was valid at the | (d) for all x in {1, ..., n}, the certificate was valid at the | |||
time in question. | time in question. | |||
A certificate MUST NOT appear more than once in a prospective | A certificate MUST NOT appear more than once in a prospective | |||
certification path. | certification path. | |||
When the trust anchor is provided in the form of a self-signed | When the trust anchor is provided in the form of a self-signed | |||
certificate, this self-signed certificate is not included as part of | certificate, this self-signed certificate is not included as part of | |||
the prospective certification path. Information about trust anchors | the prospective certification path. Information about trust anchors | |||
are provided as inputs to the certification path validation algorithm | is provided as inputs to the certification path validation algorithm | |||
(section 6.1.1). | (Section 6.1.1). | |||
A particular certification path may not, however, be appropriate for | A particular certification path may not, however, be appropriate for | |||
all applications. Therefore, an application MAY augment this | all applications. Therefore, an application MAY augment this | |||
algorithm to further limit the set of valid paths. The path | algorithm to further limit the set of valid paths. The path | |||
validation process also determines the set of certificate policies | validation process also determines the set of certificate policies | |||
that are valid for this path, based on the certificate policies | that are valid for this path, based on the certificate policies | |||
extension, policy mappings extension, policy constraints extension, | extension, policy mappings extension, policy constraints extension, | |||
and inhibit anyPolicy extension. To achieve this, the path | and inhibit anyPolicy extension. To achieve this, the path | |||
validation algorithm constructs a valid policy tree. If the set of | validation algorithm constructs a valid policy tree. If the set of | |||
certificate policies that are valid for this path is not empty, then | certificate policies that are valid for this path is not empty, then | |||
the result will be a valid policy tree of depth n, otherwise the | the result will be a valid policy tree of depth n, otherwise the | |||
result will be a null valid policy tree. | result will be a null valid policy tree. | |||
A certificate is self-issued if the same DN appears in the subject | A certificate is self-issued if the same DN appears in the subject | |||
and issuer fields (the two DNs are the same if they match according | and issuer fields (the two DNs are the same if they match according | |||
to the rules specified in section 7.1). In general, the issuer and | to the rules specified in Section 7.1). In general, the issuer and | |||
subject of the certificates that make up a path are different for | subject of the certificates that make up a path are different for | |||
each certificate. However, a CA may issue a certificate to itself to | each certificate. However, a CA may issue a certificate to itself to | |||
support key rollover or changes in certificate policies. These self- | support key rollover or changes in certificate policies. These | |||
issued certificates are not counted when evaluating path length or | self-issued certificates are not counted when evaluating path length | |||
name constraints. | or name constraints. | |||
This section presents the algorithm in four basic steps: (1) | This section presents the algorithm in four basic steps: (1) | |||
initialization, (2) basic certificate processing, (3) preparation for | initialization, (2) basic certificate processing, (3) preparation for | |||
the next certificate, and (4) wrap-up. Steps (1) and (4) are | the next certificate, and (4) wrap-up. Steps (1) and (4) are | |||
performed exactly once. Step (2) is performed for all certificates | performed exactly once. Step (2) is performed for all certificates | |||
in the path. Step (3) is performed for all certificates in the path | in the path. Step (3) is performed for all certificates in the path | |||
except the final certificate. Figure 2 provides a high-level | except the final certificate. Figure 2 provides a high-level | |||
flowchart of this algorithm. | flowchart of this algorithm. | |||
+-------+ | +-------+ | |||
skipping to change at page 73, line 40 ¶ | skipping to change at page 75, line 40 ¶ | |||
| Wrap up | | Prepare for | | | | Wrap up | | Prepare for | | | |||
+----------------+ | Next Cert | | | +----------------+ | Next Cert | | | |||
| +----------------+ | | | +----------------+ | | |||
V | | | V | | | |||
+-------+ +--------------+ | +-------+ +--------------+ | |||
| STOP | | | STOP | | |||
+-------+ | +-------+ | |||
Figure 2. Certification Path Processing Flowchart | Figure 2. Certification Path Processing Flowchart | |||
6.1.1 Inputs | 6.1.1. Inputs | |||
This algorithm assumes the following nine inputs are provided to the | This algorithm assumes that the following nine inputs are provided to | |||
path processing logic: | the path processing logic: | |||
(a) a prospective certification path of length n. | (a) a prospective certification path of length n. | |||
(b) the current date/time. | (b) the current date/time. | |||
(c) user-initial-policy-set: A set of certificate policy | (c) user-initial-policy-set: A set of certificate policy | |||
identifiers naming the policies that are acceptable to the | identifiers naming the policies that are acceptable to the | |||
certificate user. The user-initial-policy-set contains the | certificate user. The user-initial-policy-set contains the | |||
special value any-policy if the user is not concerned about | special value any-policy if the user is not concerned about | |||
certificate policy. | certificate policy. | |||
(d) trust anchor information, describing a CA that serves as a | (d) trust anchor information, describing a CA that serves as a | |||
trust anchor for the certification path. The trust anchor | trust anchor for the certification path. The trust anchor | |||
information includes: | information includes: | |||
(1) the trusted issuer name, | (1) the trusted issuer name, | |||
(2) the trusted public key algorithm, | (2) the trusted public key algorithm, | |||
(3) the trusted public key, and | (3) the trusted public key, and | |||
(4) optionally, the trusted public key parameters associated | (4) optionally, the trusted public key parameters associated | |||
with the public key. | with the public key. | |||
The trust anchor information may be provided to the path | The trust anchor information may be provided to the path | |||
processing procedure in the form of a self-signed certificate. | processing procedure in the form of a self-signed certificate. | |||
When the trust anchor information is provided in the form of a | When the trust anchor information is provided in the form of a | |||
certificate, the name in the subject field is used as the trusted | certificate, the name in the subject field is used as the trusted | |||
issuer name and the contents of the subjectPublicKeyInfo field is | issuer name and the contents of the subjectPublicKeyInfo field is | |||
used as the source of the trusted public key algorithm and the | used as the source of the trusted public key algorithm and the | |||
trusted public key. The trust anchor information is trusted | trusted public key. The trust anchor information is trusted | |||
because it was delivered to the path processing procedure by some | because it was delivered to the path processing procedure by some | |||
trustworthy out-of-band procedure. If the trusted public key | trustworthy out-of-band procedure. If the trusted public key | |||
algorithm requires parameters, then the parameters are provided | algorithm requires parameters, then the parameters are provided | |||
along with the trusted public key. | along with the trusted public key. | |||
(e) initial-policy-mapping-inhibit, which indicates if policy | (e) initial-policy-mapping-inhibit, which indicates if policy | |||
mapping is allowed in the certification path. | mapping is allowed in the certification path. | |||
(f) initial-explicit-policy, which indicates if the path must be | (f) initial-explicit-policy, which indicates if the path must be | |||
valid for at least one of the certificate policies in the user- | valid for at least one of the certificate policies in the | |||
initial-policy-set. | user-initial-policy-set. | |||
(g) initial-any-policy-inhibit, which indicates whether the | (g) initial-any-policy-inhibit, which indicates whether the | |||
anyPolicy OID should be processed if it is included in a | anyPolicy OID should be processed if it is included in a | |||
certificate. | certificate. | |||
(h) initial-permitted-subtrees, which indicates for each name type | (h) initial-permitted-subtrees, which indicates for each name | |||
(e.g., X.500 distinguished names, email addresses, or IP | type (e.g., X.500 distinguished names, email addresses, or IP | |||
addresses) a set of subtrees within which all subject names in | addresses) a set of subtrees within which all subject names | |||
every certificate in the certification path MUST fall. The | in every certificate in the certification path MUST fall. | |||
initial-permitted-subtrees input includes a set for each name | The initial-permitted-subtrees input includes a set for each | |||
type. For each name type, the set may consist of a single subtree | name type. For each name type, the set may consist of a | |||
that includes all names of that name type or one or more subtrees | single subtree that includes all names of that name type or | |||
that each specifies a subset of the names of that name type, or | one or more subtrees that each specifies a subset of the | |||
the set may be empty. If the set for a name type is empty, then | names of that name type, or the set may be empty. If the set | |||
the certificaton path will be considered invalid if any | for a name type is empty, then the certification path will be | |||
certificate in the certification path includes a name of that name | considered invalid if any certificate in the certification | |||
type. | path includes a name of that name type. | |||
(i) initial-excluded-subtrees, which indicates for each name type | (i) initial-excluded-subtrees, which indicates for each name type | |||
(e.g., X.500 distinguished names, email addresses, or IP | (e.g., X.500 distinguished names, email addresses, or IP | |||
addresses) a set of subtrees within which no subject name in any | addresses) a set of subtrees within which no subject name in | |||
certificate in the certification path may fall. The initial- | any certificate in the certification path may fall. The | |||
excluded-subtrees input includes a set for each name type. For | initial-excluded-subtrees input includes a set for each name | |||
each name type, the set may be empty or may consist of one or more | type. For each name type, the set may be empty or may | |||
subtrees that each specifies a subset of the names of that name | consist of one or more subtrees that each specifies a subset | |||
type. If the set for a name type is empty, then no names of that | of the names of that name type. If the set for a name type | |||
name type are excluded. | is empty, then no names of that name type are excluded. | |||
Conforming implementations are not required to support the setting of | Conforming implementations are not required to support the setting of | |||
all of these inputs. For example, a conforming implementation may be | all of these inputs. For example, a conforming implementation may be | |||
designed to validate all certification paths using a value of FALSE | designed to validate all certification paths using a value of FALSE | |||
for initial-any-policy-inhibit. | for initial-any-policy-inhibit. | |||
6.1.2 Initialization | 6.1.2. Initialization | |||
This initialization phase establishes eleven state variables based | This initialization phase establishes eleven state variables based | |||
upon the nine inputs: | upon the nine inputs: | |||
(a) valid_policy_tree: A tree of certificate policies with their | (a) valid_policy_tree: A tree of certificate policies with their | |||
optional qualifiers; each of the leaves of the tree represents a | optional qualifiers; each of the leaves of the tree | |||
valid policy at this stage in the certification path validation. | represents a valid policy at this stage in the certification | |||
If valid policies exist at this stage in the certification path | path validation. If valid policies exist at this stage in | |||
validation, the depth of the tree is equal to the number of | the certification path validation, the depth of the tree is | |||
certificates in the chain that have been processed. If valid | equal to the number of certificates in the chain that have | |||
policies do not exist at this stage in the certification path | been processed. If valid policies do not exist at this stage | |||
validation, the tree is set to NULL. Once the tree is set to | in the certification path validation, the tree is set to | |||
NULL, policy processing ceases. | NULL. Once the tree is set to NULL, policy processing | |||
ceases. | ||||
Each node in the valid_policy_tree includes three data objects: | Each node in the valid_policy_tree includes three data | |||
the valid policy, a set of associated policy qualifiers, and a set | objects: the valid policy, a set of associated policy | |||
of one or more expected policy values. If the node is at depth x, | qualifiers, and a set of one or more expected policy values. | |||
the components of the node have the following semantics: | If the node is at depth x, the components of the node have | |||
the following semantics: | ||||
(1) The valid_policy is a single policy OID representing a | (1) The valid_policy is a single policy OID representing a | |||
valid policy for the path of length x. | valid policy for the path of length x. | |||
(2) The qualifier_set is a set of policy qualifiers associated | (2) The qualifier_set is a set of policy qualifiers associated | |||
with the valid policy in certificate x. | with the valid policy in certificate x. | |||
(3) The expected_policy_set contains one or more policy OIDs | (3) The expected_policy_set contains one or more policy OIDs | |||
that would satisfy this policy in the certificate x+1. | that would satisfy this policy in the certificate x+1. | |||
The initial value of the valid_policy_tree is a single node with | The initial value of the valid_policy_tree is a single node with | |||
valid_policy anyPolicy, an empty qualifier_set, and an | valid_policy anyPolicy, an empty qualifier_set, and an | |||
expected_policy_set with the single value anyPolicy. This node is | expected_policy_set with the single value anyPolicy. This node is | |||
considered to be at depth zero. | considered to be at depth zero. | |||
Figure 3 is a graphic representation of the initial state of the | Figure 3 is a graphic representation of the initial state of the | |||
valid_policy_tree. Additional figures will use this format to | valid_policy_tree. Additional figures will use this format to | |||
describe changes in the valid_policy_tree during path processing. | describe changes in the valid_policy_tree during path processing. | |||
+----------------+ | +----------------+ | |||
| anyPolicy | <---- valid_policy | | anyPolicy | <---- valid_policy | |||
+----------------+ | +----------------+ | |||
| {} | <---- qualifier_set | | {} | <---- qualifier_set | |||
+----------------+ | +----------------+ | |||
| {anyPolicy} | <---- expected_policy_set | | {anyPolicy} | <---- expected_policy_set | |||
+----------------+ | +----------------+ | |||
Figure 3. Initial value of the valid_policy_tree state variable | Figure 3. Initial Value of the valid_policy_tree State Variable | |||
(b) permitted_subtrees: A set of root names for each name type | (b) permitted_subtrees: a set of root names for each name type | |||
(e.g., X.500 distinguished names, email addresses, or IP | (e.g., X.500 distinguished names, email addresses, or IP | |||
addresses) defining a set of subtrees within which all subject | addresses) defining a set of subtrees within which all | |||
names in subsequent certificates in the certification path MUST | subject names in subsequent certificates in the certification | |||
fall. This variable includes a set for each name type, and the | path MUST fall. This variable includes a set for each name | |||
initial value is initial-permitted-subtrees. | type, and the initial value is initial-permitted-subtrees. | |||
(c) excluded_subtrees: A set of root names for each name type | (c) excluded_subtrees: a set of root names for each name type | |||
(e.g., X.500 distinguished names, email addresses, or IP | (e.g., X.500 distinguished names, email addresses, or IP | |||
addresses) defining a set of subtrees within which no subject name | addresses) defining a set of subtrees within which no subject | |||
in subsequent certificates in the certification path may fall. | name in subsequent certificates in the certification path may | |||
This variable includes a set for each name type, and the initial | fall. This variable includes a set for each name type, and | |||
value is initial-excluded-subtrees. | the initial value is initial-excluded-subtrees. | |||
(d) explicit_policy: an integer that indicates if a non-NULL | (d) explicit_policy: an integer that indicates if a non-NULL | |||
valid_policy_tree is required. The integer indicates the number | valid_policy_tree is required. The integer indicates the | |||
of non-self-issued certificates to be processed before this | number of non-self-issued certificates to be processed before | |||
requirement is imposed. Once set, this variable may be decreased, | this requirement is imposed. Once set, this variable may be | |||
but may not be increased. That is, if a certificate in the path | decreased, but may not be increased. That is, if a | |||
requires a non-NULL valid_policy_tree, a later certificate cannot | certificate in the path requires a non-NULL | |||
remove this requirement. If initial-explicit-policy is set, then | valid_policy_tree, a later certificate cannot remove this | |||
the initial value is 0, otherwise the initial value is n+1. | requirement. If initial-explicit-policy is set, then the | |||
initial value is 0, otherwise the initial value is n+1. | ||||
(e) inhibit_anyPolicy: an integer that indicates whether the | (e) inhibit_anyPolicy: an integer that indicates whether the | |||
anyPolicy policy identifier is considered a match. The integer | anyPolicy policy identifier is considered a match. The | |||
indicates the number of non-self-issued certificates to be | integer indicates the number of non-self-issued certificates | |||
processed before the anyPolicy OID, if asserted in a certificate | to be processed before the anyPolicy OID, if asserted in a | |||
other than an intermediate self-issued certificate, is ignored. | certificate other than an intermediate self-issued | |||
Once set, this variable may be decreased, but may not be | certificate, is ignored. Once set, this variable may be | |||
increased. That is, if a certificate in the path inhibits | decreased, but may not be increased. That is, if a | |||
processing of anyPolicy, a later certificate cannot permit it. If | certificate in the path inhibits processing of anyPolicy, a | |||
initial-any-policy-inhibit is set, then the initial value is 0, | later certificate cannot permit it. If initial-any-policy- | |||
otherwise the initial value is n+1. | inhibit is set, then the initial value is 0, otherwise the | |||
initial value is n+1. | ||||
(f) policy_mapping: an integer that indicates if policy mapping | (f) policy_mapping: an integer that indicates if policy mapping | |||
is permitted. The integer indicates the number of non-self-issued | is permitted. The integer indicates the number of non-self- | |||
certificates to be processed before policy mapping is inhibited. | issued certificates to be processed before policy mapping is | |||
Once set, this variable may be decreased, but may not be | inhibited. Once set, this variable may be decreased, but may | |||
increased. That is, if a certificate in the path specifies policy | not be increased. That is, if a certificate in the path | |||
mapping is not permitted, it cannot be overridden by a later | specifies that policy mapping is not permitted, it cannot be | |||
certificate. If initial-policy-mapping-inhibit is set, then the | overridden by a later certificate. If initial-policy- | |||
initial value is 0, otherwise the initial value is n+1. | mapping-inhibit is set, then the initial value is 0, | |||
otherwise the initial value is n+1. | ||||
(g) working_public_key_algorithm: the digital signature | (g) working_public_key_algorithm: the digital signature | |||
algorithm used to verify the signature of a certificate. The | algorithm used to verify the signature of a certificate. The | |||
working_public_key_algorithm is initialized from the trusted | working_public_key_algorithm is initialized from the trusted | |||
public key algorithm provided in the trust anchor information. | public key algorithm provided in the trust anchor | |||
information. | ||||
(h) working_public_key: the public key used to verify the | (h) working_public_key: the public key used to verify the | |||
signature of a certificate. The working_public_key is initialized | signature of a certificate. The working_public_key is | |||
from the trusted public key provided in the trust anchor | initialized from the trusted public key provided in the trust | |||
information. | anchor information. | |||
(i) working_public_key_parameters: parameters associated with | (i) working_public_key_parameters: parameters associated with | |||
the current public key, that may be required to verify a signature | the current public key that may be required to verify a | |||
(depending upon the algorithm). The working_public_key_parameters | signature (depending upon the algorithm). The | |||
variable is initialized from the trusted public key parameters | working_public_key_parameters variable is initialized from | |||
provided in the trust anchor information. | the trusted public key parameters provided in the trust | |||
anchor information. | ||||
(j) working_issuer_name: the issuer distinguished name expected | (j) working_issuer_name: the issuer distinguished name expected | |||
in the next certificate in the chain. The working_issuer_name is | in the next certificate in the chain. The | |||
initialized to the trusted issuer name provided in the trust | working_issuer_name is initialized to the trusted issuer name | |||
anchor information. | provided in the trust anchor information. | |||
(k) max_path_length: this integer is initialized to n, is | (k) max_path_length: this integer is initialized to n, is | |||
decremented for each non-self-issued certificate in the path, and | decremented for each non-self-issued certificate in the path, | |||
may be reduced to the value in the path length constraint field | and may be reduced to the value in the path length constraint | |||
within the basic constraints extension of a CA certificate. | field within the basic constraints extension of a CA | |||
certificate. | ||||
Upon completion of the initialization steps, perform the basic | Upon completion of the initialization steps, perform the basic | |||
certificate processing steps specified in 6.1.3. | certificate processing steps specified in 6.1.3. | |||
6.1.3 Basic Certificate Processing | 6.1.3. Basic Certificate Processing | |||
The basic path processing actions to be performed for certificate i | The basic path processing actions to be performed for certificate i | |||
(for all i in [1..n]) are listed below. | (for all i in [1..n]) are listed below. | |||
(a) Verify the basic certificate information. The certificate | (a) Verify the basic certificate information. The certificate | |||
MUST satisfy each of the following: | MUST satisfy each of the following: | |||
(1) The signature on the certificate can be verified using | (1) The signature on the certificate can be verified using | |||
working_public_key_algorithm, the working_public_key, and the | working_public_key_algorithm, the working_public_key, and | |||
working_public_key_parameters. | the working_public_key_parameters. | |||
(2) The certificate validity period includes the current time. | (2) The certificate validity period includes the current time. | |||
(3) At the current time, the certificate is not revoked. This | (3) At the current time, the certificate is not revoked. This | |||
may be determined by obtaining the appropriate CRL (section | may be determined by obtaining the appropriate CRL | |||
6.3), status information, or by out-of-band mechanisms. | (Section 6.3), by status information, or by out-of-band | |||
mechanisms. | ||||
(4) The certificate issuer name is the working_issuer_name. | (4) The certificate issuer name is the working_issuer_name. | |||
(b) If certificate i is self-issued and it is not the final | (b) If certificate i is self-issued and it is not the final | |||
certificate in the path, skip this step for certificate i. | certificate in the path, skip this step for certificate i. | |||
Otherwise, verify that the subject name is within one of the | Otherwise, verify that the subject name is within one of the | |||
permitted_subtrees for X.500 distinguished names, and verify that | permitted_subtrees for X.500 distinguished names, and verify | |||
each of the alternative names in the subjectAltName extension | that each of the alternative names in the subjectAltName | |||
(critical or non-critical) is within one of the permitted_subtrees | extension (critical or non-critical) is within one of the | |||
for that name type. | permitted_subtrees for that name type. | |||
(c) If certificate i is self-issued and it is not the final | (c) If certificate i is self-issued and it is not the final | |||
certificate in the path, skip this step for certificate i. | certificate in the path, skip this step for certificate i. | |||
Otherwise, verify that the subject name is not within any of the | Otherwise, verify that the subject name is not within any of | |||
excluded_subtrees for X.500 distinguished names, and verify that | the excluded_subtrees for X.500 distinguished names, and | |||
each of the alternative names in the subjectAltName extension | verify that each of the alternative names in the | |||
(critical or non-critical) is not within any of the | subjectAltName extension (critical or non-critical) is not | |||
excluded_subtrees for that name type. | within any of the excluded_subtrees for that name type. | |||
(d) If the certificate policies extension is present in the | (d) If the certificate policies extension is present in the | |||
certificate and the valid_policy_tree is not NULL, process the | certificate and the valid_policy_tree is not NULL, process | |||
policy information by performing the following steps in order: | the policy information by performing the following steps in | |||
order: | ||||
(1) For each policy P not equal to anyPolicy in the | (1) For each policy P not equal to anyPolicy in the | |||
certificate policies extension, let P-OID denote the OID for | certificate policies extension, let P-OID denote the OID | |||
policy P and P-Q denote the qualifier set for policy P. | for policy P and P-Q denote the qualifier set for policy | |||
Perform the following steps in order: | P. Perform the following steps in order: | |||
(i) For each node of depth i-1 in the valid_policy_tree | (i) For each node of depth i-1 in the valid_policy_tree | |||
where P-OID is in the expected_policy_set, create a child | where P-OID is in the expected_policy_set, create a | |||
node as follows: set the valid_policy to P-OID; set the | child node as follows: set the valid_policy to P-OID, | |||
qualifier_set to P-Q, and set the expected_policy_set to | set the qualifier_set to P-Q, and set the | |||
{P-OID}. | expected_policy_set to | |||
{P-OID}. | ||||
For example, consider a valid_policy_tree with a node of | For example, consider a valid_policy_tree with a node | |||
depth i-1 where the expected_policy_set is {Gold, White}. | of depth i-1 where the expected_policy_set is {Gold, | |||
Assume the certificate policies Gold and Silver appear in | White}. Assume the certificate policies Gold and | |||
the certificate policies extension of certificate i. The | Silver appear in the certificate policies extension of | |||
Gold policy is matched but the Silver policy is not. This | certificate i. The Gold policy is matched, but the | |||
rule will generate a child node of depth i for the Gold | Silver policy is not. This rule will generate a child | |||
policy. The result is shown as Figure 4. | node of depth i for the Gold policy. The result is | |||
shown as Figure 4. | ||||
+-----------------+ | +-----------------+ | |||
| Red | | | Red | | |||
+-----------------+ | +-----------------+ | |||
| {} | | | {} | | |||
+-----------------+ node of depth i-1 | +-----------------+ node of depth i-1 | |||
| {Gold, White} | | | {Gold, White} | | |||
+-----------------+ | +-----------------+ | |||
| | | | |||
| | | | |||
| | | | |||
V | V | |||
+-----------------+ | +-----------------+ | |||
| Gold | | | Gold | | |||
+-----------------+ | +-----------------+ | |||
| {} | | | {} | | |||
+-----------------+ node of depth i | +-----------------+ node of depth i | |||
| {Gold} | | | {Gold} | | |||
+-----------------+ | +-----------------+ | |||
Figure 4. Processing an exact match | Figure 4. Processing an Exact Match | |||
(ii) If there was no match in step (i) and the | (ii) If there was no match in step (i) and the | |||
valid_policy_tree includes a node of depth i-1 with the | valid_policy_tree includes a node of depth i-1 with | |||
valid_policy anyPolicy, generate a child node with the | the valid_policy anyPolicy, generate a child node with | |||
following values: set the valid_policy to P-OID; set the | the following values: set the valid_policy to P-OID, | |||
qualifier_set to P-Q, and set the expected_policy_set to | set the qualifier_set to P-Q, and set the | |||
{P-OID}. | expected_policy_set to {P-OID}. | |||
For example, consider a valid_policy_tree with a node of | For example, consider a valid_policy_tree with a node | |||
depth i-1 where the valid_policy is anyPolicy. Assume the | of depth i-1 where the valid_policy is anyPolicy. | |||
certificate policies Gold and Silver appear in the | Assume the certificate policies Gold and Silver appear | |||
certificate policies extension of certificate i. The Gold | in the certificate policies extension of certificate | |||
policy does not have a qualifier, but the Silver policy has | i. The Gold policy does not have a qualifier, but the | |||
the qualifier Q-Silver. If Gold and Silver were not matched | Silver policy has the qualifier Q-Silver. If Gold and | |||
in (i) above, this rule will generate two child nodes of | Silver were not matched in (i) above, this rule will | |||
depth i, one for each policy. The result is shown as Figure | generate two child nodes of depth i, one for each | |||
5. | policy. The result is shown as Figure 5. | |||
+-----------------+ | +-----------------+ | |||
| anyPolicy | | | anyPolicy | | |||
+-----------------+ | +-----------------+ | |||
| {} | | | {} | | |||
+-----------------+ node of depth i-1 | +-----------------+ node of depth i-1 | |||
| {anyPolicy} | | | {anyPolicy} | | |||
+-----------------+ | +-----------------+ | |||
/ \ | / \ | |||
/ \ | / \ | |||
/ \ | / \ | |||
/ \ | / \ | |||
+-----------------+ +-----------------+ | +-----------------+ +-----------------+ | |||
| Gold | | Silver | | | Gold | | Silver | | |||
+-----------------+ +-----------------+ | +-----------------+ +-----------------+ | |||
| {} | | {Q-Silver} | | | {} | | {Q-Silver} | | |||
+-----------------+ nodes of +-----------------+ | +-----------------+ nodes of +-----------------+ | |||
| {Gold} | depth i | {Silver} | | | {Gold} | depth i | {Silver} | | |||
+-----------------+ +-----------------+ | +-----------------+ +-----------------+ | |||
Figure 5. Processing unmatched policies when a leaf node | Figure 5. Processing Unmatched Policies when a | |||
specifies anyPolicy | Leaf Node Specifies anyPolicy | |||
(2) If the certificate policies extension includes the policy | (2) If the certificate policies extension includes the policy | |||
anyPolicy with the qualifier set AP-Q and either (a) | anyPolicy with the qualifier set AP-Q and either (a) | |||
inhibit_anyPolicy is greater than 0 or (b) i<n and the | inhibit_anyPolicy is greater than 0 or (b) i<n and the | |||
certificate is self-issued, then: | certificate is self-issued, then: | |||
For each node in the valid_policy_tree of depth i-1, for each | For each node in the valid_policy_tree of depth i-1, for | |||
value in the expected_policy_set (including anyPolicy) that | each value in the expected_policy_set (including | |||
does not appear in a child node, create a child node with the | anyPolicy) that does not appear in a child node, create a | |||
following values: set the valid_policy to the value from the | child node with the following values: set the valid_policy | |||
expected_policy_set in the parent node; set the qualifier_set | to the value from the expected_policy_set in the parent | |||
to AP-Q, and set the expected_policy_set to the value in the | node, set the qualifier_set to AP-Q, and set the | |||
valid_policy from this node. | expected_policy_set to the value in the valid_policy from | |||
this node. | ||||
For example, consider a valid_policy_tree with a node of depth | For example, consider a valid_policy_tree with a node of | |||
i-1 where the expected_policy_set is {Gold, Silver}. Assume | depth i-1 where the expected_policy_set is {Gold, Silver}. | |||
anyPolicy appears in the certificate policies extension of | Assume anyPolicy appears in the certificate policies | |||
certificate i with no policy qualifiers, but Gold and Silver do | extension of certificate i with no policy qualifiers, but | |||
not appear. This rule will generate two child nodes of depth | Gold and Silver do not appear. This rule will generate | |||
i, one for each policy. The result is shown below as Figure 6. | two child nodes of depth i, one for each policy. The | |||
result is shown below as Figure 6. | ||||
+-----------------+ | +-----------------+ | |||
| Red | | | Red | | |||
+-----------------+ | +-----------------+ | |||
| {} | | | {} | | |||
+-----------------+ node of depth i-1 | +-----------------+ node of depth i-1 | |||
| {Gold, Silver} | | | {Gold, Silver} | | |||
+-----------------+ | +-----------------+ | |||
/ \ | / \ | |||
/ \ | / \ | |||
/ \ | / \ | |||
/ \ | / \ | |||
+-----------------+ +-----------------+ | +-----------------+ +-----------------+ | |||
| Gold | | Silver | | | Gold | | Silver | | |||
+-----------------+ +-----------------+ | +-----------------+ +-----------------+ | |||
| {} | | {} | | | {} | | {} | | |||
+-----------------+ nodes of +-----------------+ | +-----------------+ nodes of +-----------------+ | |||
| {Gold} | depth i | {Silver} | | | {Gold} | depth i | {Silver} | | |||
+-----------------+ +-----------------+ | +-----------------+ +-----------------+ | |||
Figure 6. Processing unmatched policies when the certificate | Figure 6. Processing Unmatched Policies When the | |||
policies extension specifies anyPolicy | Certificate Policies Extension Specifies anyPolicy | |||
(3) If there is a node in the valid_policy_tree of depth i-1 | (3) If there is a node in the valid_policy_tree of depth i-1 | |||
or less without any child nodes, delete that node. Repeat this | or less without any child nodes, delete that node. Repeat | |||
step until there are no nodes of depth i-1 or less without | this step until there are no nodes of depth i-1 or less | |||
children. | without children. | |||
For example, consider the valid_policy_tree shown in Figure 7 | For example, consider the valid_policy_tree shown in | |||
below. The two nodes at depth i-1 that are marked with an 'X' | Figure 7 below. The two nodes at depth i-1 that are | |||
have no children, and are deleted. Applying this rule to the | marked with an 'X' have no children, and they are deleted. | |||
resulting tree will cause the node at depth i-2 that is marked | Applying this rule to the resulting tree will cause the | |||
with an 'Y' to be deleted. In the resulting tree there are no | node at depth i-2 that is marked with a 'Y' to be deleted. | |||
nodes of depth i-1 or less without children, and this step is | In the resulting tree, there are no nodes of depth i-1 or | |||
complete. | less without children, and this step is complete. | |||
(e) If the certificate policies extension is not present, set the | (e) If the certificate policies extension is not present, set the | |||
valid_policy_tree to NULL. | valid_policy_tree to NULL. | |||
(f) Verify that either explicit_policy is greater than 0 or the | (f) Verify that either explicit_policy is greater than 0 or the | |||
valid_policy_tree is not equal to NULL; | valid_policy_tree is not equal to NULL; | |||
If any of steps (a), (b), (c), or (f) fails, the procedure | If any of steps (a), (b), (c), or (f) fails, the procedure | |||
terminates, returning a failure indication and an appropriate reason. | terminates, returning a failure indication and an appropriate reason. | |||
If i is not equal to n, continue by performing the preparatory steps | If i is not equal to n, continue by performing the preparatory steps | |||
listed in 6.1.4. If i is equal to n, perform the wrap-up steps | listed in Section 6.1.4. If i is equal to n, perform the wrap-up | |||
listed in 6.1.5. | steps listed in Section 6.1.5. | |||
+-----------+ | +-----------+ | |||
| | node of depth i-3 | | | node of depth i-3 | |||
+-----------+ | +-----------+ | |||
/ | \ | / | \ | |||
/ | \ | / | \ | |||
/ | \ | / | \ | |||
+-----------+ +-----------+ +-----------+ | +-----------+ +-----------+ +-----------+ | |||
| | | | | Y | nodes of | | | | | | Y | nodes of | |||
+-----------+ +-----------+ +-----------+ depth i-2 | +-----------+ +-----------+ +-----------+ depth i-2 | |||
skipping to change at page 82, line 29 ¶ | skipping to change at page 84, line 42 ¶ | |||
+-----------+ +-----------+ +-----------+ +-----------+ i-1 | +-----------+ +-----------+ +-----------+ +-----------+ i-1 | |||
| / | \ | | / | \ | |||
| / | \ | | / | \ | |||
| / | \ | | / | \ | |||
+-----------+ +-----------+ +-----------+ +-----------+ nodes of | +-----------+ +-----------+ +-----------+ +-----------+ nodes of | |||
| | | | | | | | depth | | | | | | | | | depth | |||
+-----------+ +-----------+ +-----------+ +-----------+ i | +-----------+ +-----------+ +-----------+ +-----------+ i | |||
Figure 7. Pruning the valid_policy_tree | Figure 7. Pruning the valid_policy_tree | |||
6.1.4 Preparation for Certificate i+1 | 6.1.4. Preparation for Certificate i+1 | |||
To prepare for processing of certificate i+1, perform the | To prepare for processing of certificate i+1, perform the | |||
following steps for certificate i: | following steps for certificate i: | |||
(a) If a policy mappings extension is present, verify that the | (a) If a policy mappings extension is present, verify that the | |||
special value anyPolicy does not appear as an issuerDomainPolicy | special value anyPolicy does not appear as an | |||
or a subjectDomainPolicy. | issuerDomainPolicy or a subjectDomainPolicy. | |||
(b) If a policy mappings extension is present, then for each | (b) If a policy mappings extension is present, then for each | |||
issuerDomainPolicy ID-P in the policy mappings extension: | issuerDomainPolicy ID-P in the policy mappings extension: | |||
(1) If the policy_mapping variable is greater than 0, for each | (1) If the policy_mapping variable is greater than 0, for each | |||
node in the valid_policy_tree of depth i where ID-P is the | node in the valid_policy_tree of depth i where ID-P is the | |||
valid_policy, set expected_policy_set to the set of | valid_policy, set expected_policy_set to the set of | |||
subjectDomainPolicy values that are specified as equivalent to | subjectDomainPolicy values that are specified as | |||
ID-P by the policy mappings extension. | equivalent to ID-P by the policy mappings extension. | |||
If no node of depth i in the valid_policy_tree has a | If no node of depth i in the valid_policy_tree has a | |||
valid_policy of ID-P but there is a node of depth i with a | valid_policy of ID-P but there is a node of depth i with a | |||
valid_policy of anyPolicy, then generate a child node of the | valid_policy of anyPolicy, then generate a child node of | |||
node of depth i-1 that has a valid_policy of anyPolicy as | the node of depth i-1 that has a valid_policy of anyPolicy | |||
follows: | as follows: | |||
(i) set the valid_policy to ID-P; | (i) set the valid_policy to ID-P; | |||
(ii) set the qualifier_set to the qualifier set of the | (ii) set the qualifier_set to the qualifier set of the | |||
policy anyPolicy in the certificate policies extension of | policy anyPolicy in the certificate policies | |||
certificate i; and | extension of certificate i; and | |||
(iii) set the expected_policy_set to the set of | (iii) set the expected_policy_set to the set of | |||
subjectDomainPolicy values that are specified as equivalent | subjectDomainPolicy values that are specified as | |||
to ID-P by the policy mappings extension. | equivalent to ID-P by the policy mappings extension. | |||
(2) If the policy_mapping variable is equal to 0: | (2) If the policy_mapping variable is equal to 0: | |||
(i) delete each node of depth i in the valid_policy_tree | (i) delete each node of depth i in the valid_policy_tree | |||
where ID-P is the valid_policy. | where ID-P is the valid_policy. | |||
(ii) If there is a node in the valid_policy_tree of depth | (ii) If there is a node in the valid_policy_tree of depth | |||
i-1 or less without any child nodes, delete that node. | i-1 or less without any child nodes, delete that | |||
Repeat this step until there are no nodes of depth i-1 or | node. Repeat this step until there are no nodes of | |||
less without children. | depth i-1 or less without children. | |||
(c) Assign the certificate subject name to working_issuer_name. | (c) Assign the certificate subject name to working_issuer_name. | |||
(d) Assign the certificate subjectPublicKey to | (d) Assign the certificate subjectPublicKey to | |||
working_public_key. | working_public_key. | |||
(e) If the subjectPublicKeyInfo field of the certificate contains | (e) If the subjectPublicKeyInfo field of the certificate contains | |||
an algorithm field with non-null parameters, assign the parameters | an algorithm field with non-null parameters, assign the | |||
to the working_public_key_parameters variable. | parameters to the working_public_key_parameters variable. | |||
If the subjectPublicKeyInfo field of the certificate contains an | If the subjectPublicKeyInfo field of the certificate contains | |||
algorithm field with null parameters or parameters are omitted, | an algorithm field with null parameters or parameters are | |||
compare the certificate subjectPublicKey algorithm to the | omitted, compare the certificate subjectPublicKey algorithm | |||
working_public_key_algorithm. If the certificate subjectPublicKey | to the working_public_key_algorithm. If the certificate | |||
algorithm and the working_public_key_algorithm are different, set | subjectPublicKey algorithm and the | |||
the working_public_key_parameters to null. | working_public_key_algorithm are different, set the | |||
working_public_key_parameters to null. | ||||
(f) Assign the certificate subjectPublicKey algorithm to the | (f) Assign the certificate subjectPublicKey algorithm to the | |||
working_public_key_algorithm variable. | working_public_key_algorithm variable. | |||
(g) If a name constraints extension is included in the | (g) If a name constraints extension is included in the | |||
certificate, modify the permitted_subtrees and excluded_subtrees | certificate, modify the permitted_subtrees and | |||
state variables as follows: | excluded_subtrees state variables as follows: | |||
(1) If permittedSubtrees is present in the certificate, set | (1) If permittedSubtrees is present in the certificate, set | |||
the permitted_subtrees state variable to the intersection of | the permitted_subtrees state variable to the intersection | |||
its previous value and the value indicated in the extension | of its previous value and the value indicated in the | |||
field. If permittedSubtrees does not include a particular name | extension field. If permittedSubtrees does not include a | |||
type, the permitted_subtrees state variable is unchanged for | particular name type, the permitted_subtrees state | |||
that name type. For example, the intersection of example.com | variable is unchanged for that name type. For example, | |||
and foo.example.com is foo.example.com. And, the intersection | the intersection of example.com and foo.example.com is | |||
of example.com and example.net is the empty set. | foo.example.com. And the intersection of example.com and | |||
example.net is the empty set. | ||||
(2) If excludedSubtrees is present in the certificate, set the | (2) If excludedSubtrees is present in the certificate, set the | |||
excluded_subtrees state variable to the union of its previous | excluded_subtrees state variable to the union of its | |||
value and the value indicated in the extension field. If | previous value and the value indicated in the extension | |||
excludedSubtrees does not include a particular name type, the | field. If excludedSubtrees does not include a particular | |||
excluded_subtrees state variable is unchanged for that name | name type, the excluded_subtrees state variable is | |||
type. For example, the union of the name spaces example.com | unchanged for that name type. For example, the union of | |||
and foo.example.com is example.com. And, the union of | the name spaces example.com and foo.example.com is | |||
example.com and example.net is both name spaces. | example.com. And the union of example.com and example.net | |||
is both name spaces. | ||||
(h) If certificate i is not self-issued: | (h) If certificate i is not self-issued: | |||
(1) If explicit_policy is not 0, decrement explicit_policy by | (1) If explicit_policy is not 0, decrement explicit_policy by | |||
1. | 1. | |||
(2) If policy_mapping is not 0, decrement policy_mapping by 1. | (2) If policy_mapping is not 0, decrement policy_mapping by 1. | |||
(3) If inhibit_anyPolicy is not 0, decrement inhibit_anyPolicy | (3) If inhibit_anyPolicy is not 0, decrement inhibit_anyPolicy | |||
by 1. | by 1. | |||
(i) If a policy constraints extension is included in the | (i) If a policy constraints extension is included in the | |||
certificate, modify the explicit_policy and policy_mapping state | certificate, modify the explicit_policy and policy_mapping | |||
variables as follows: | state variables as follows: | |||
(1) If requireExplicitPolicy is present and is less than | (1) If requireExplicitPolicy is present and is less than | |||
explicit_policy, set explicit_policy to the value of | explicit_policy, set explicit_policy to the value of | |||
requireExplicitPolicy. | requireExplicitPolicy. | |||
(2) If inhibitPolicyMapping is present and is less than | (2) If inhibitPolicyMapping is present and is less than | |||
policy_mapping, set policy_mapping to the value of | policy_mapping, set policy_mapping to the value of | |||
inhibitPolicyMapping. | inhibitPolicyMapping. | |||
(j) If the inhibitAnyPolicy extension is included in the | (j) If the inhibitAnyPolicy extension is included in the | |||
certificate and is less than inhibit_anyPolicy, set | certificate and is less than inhibit_anyPolicy, set | |||
inhibit_anyPolicy to the value of inhibitAnyPolicy. | inhibit_anyPolicy to the value of inhibitAnyPolicy. | |||
(k) If certificate i is a version 3 certificate, verify that the | (k) If certificate i is a version 3 certificate, verify that the | |||
basicConstraints extension is present and that cA is set to TRUE. | basicConstraints extension is present and that cA is set to | |||
(If certificate i is a version 1 or version 2 certificate, then | TRUE. (If certificate i is a version 1 or version 2 | |||
the application MUST either verify that certificate i is a CA | certificate, then the application MUST either verify that | |||
certificate through out-of-band means or reject the certificate. | certificate i is a CA certificate through out-of-band means | |||
Conforming implementations may choose to reject all version 1 and | or reject the certificate. Conforming implementations may | |||
version 2 intermediate certificates.) | choose to reject all version 1 and version 2 intermediate | |||
certificates.) | ||||
(l) If the certificate was not self-issued, verify that | (l) If the certificate was not self-issued, verify that | |||
max_path_length is greater than zero and decrement max_path_length | max_path_length is greater than zero and decrement | |||
by 1. | max_path_length by 1. | |||
(m) If pathLenConstraint is present in the certificate and is | (m) If pathLenConstraint is present in the certificate and is | |||
less than max_path_length, set max_path_length to the value of | less than max_path_length, set max_path_length to the value | |||
pathLenConstraint. | of pathLenConstraint. | |||
(n) If a key usage extension is present, verify that the | (n) If a key usage extension is present, verify that the | |||
keyCertSign bit is set. | keyCertSign bit is set. | |||
(o) Recognize and process any other critical extension present in | (o) Recognize and process any other critical extension present in | |||
the certificate. Process any other recognized non-critical | the certificate. Process any other recognized non-critical | |||
extension present in the certificate that is relevant to path | extension present in the certificate that is relevant to path | |||
processing. | processing. | |||
If check (a), (k), (l), (n) or (o) fails, the procedure terminates, | If check (a), (k), (l), (n), or (o) fails, the procedure terminates, | |||
returning a failure indication and an appropriate reason. | returning a failure indication and an appropriate reason. | |||
If (a), (k), (l), (n) and (o) have completed successfully, increment | If (a), (k), (l), (n), and (o) have completed successfully, increment | |||
i and perform the basic certificate processing specified in 6.1.3. | i and perform the basic certificate processing specified in Section | |||
6.1.3. | ||||
6.1.5 Wrap-up procedure | 6.1.5. Wrap-Up Procedure | |||
To complete the processing of the target certificate, perform the | To complete the processing of the target certificate, perform the | |||
following steps for certificate n: | following steps for certificate n: | |||
(a) If explicit_policy is not 0, decrement explicit_policy by 1. | (a) If explicit_policy is not 0, decrement explicit_policy by 1. | |||
(b) If a policy constraints extension is included in the | (b) If a policy constraints extension is included in the | |||
certificate and requireExplicitPolicy is present and has a value | certificate and requireExplicitPolicy is present and has a | |||
of 0, set the explicit_policy state variable to 0. | value of 0, set the explicit_policy state variable to 0. | |||
(c) Assign the certificate subjectPublicKey to | (c) Assign the certificate subjectPublicKey to | |||
working_public_key. | working_public_key. | |||
(d) If the subjectPublicKeyInfo field of the certificate contains | (d) If the subjectPublicKeyInfo field of the certificate contains | |||
an algorithm field with non-null parameters, assign the parameters | an algorithm field with non-null parameters, assign the | |||
to the working_public_key_parameters variable. | parameters to the working_public_key_parameters variable. | |||
If the subjectPublicKeyInfo field of the certificate contains an | If the subjectPublicKeyInfo field of the certificate contains | |||
algorithm field with null parameters or parameters are omitted, | an algorithm field with null parameters or parameters are | |||
compare the certificate subjectPublicKey algorithm to the | omitted, compare the certificate subjectPublicKey algorithm | |||
working_public_key_algorithm. If the certificate subjectPublicKey | to the working_public_key_algorithm. If the certificate | |||
algorithm and the working_public_key_algorithm are different, set | subjectPublicKey algorithm and the | |||
the working_public_key_parameters to null. | working_public_key_algorithm are different, set the | |||
working_public_key_parameters to null. | ||||
(e) Assign the certificate subjectPublicKey algorithm to the | (e) Assign the certificate subjectPublicKey algorithm to the | |||
working_public_key_algorithm variable. | working_public_key_algorithm variable. | |||
(f) Recognize and process any other critical extension present in | (f) Recognize and process any other critical extension present in | |||
the certificate n. Process any other recognized non-critical | the certificate n. Process any other recognized non-critical | |||
extension present in certificate n that is relevant to path | extension present in certificate n that is relevant to path | |||
processing. | processing. | |||
(g) Calculate the intersection of the valid_policy_tree and the | (g) Calculate the intersection of the valid_policy_tree and the | |||
user-initial-policy-set, as follows: | user-initial-policy-set, as follows: | |||
(i) If the valid_policy_tree is NULL, the intersection is | (i) If the valid_policy_tree is NULL, the intersection is | |||
NULL. | NULL. | |||
(ii) If the valid_policy_tree is not NULL and the user- | (ii) If the valid_policy_tree is not NULL and the user- | |||
initial-policy-set is any-policy, the intersection is the | initial-policy-set is any-policy, the intersection is | |||
entire valid_policy_tree. | the entire valid_policy_tree. | |||
(iii) If the valid_policy_tree is not NULL and the user- | (iii) If the valid_policy_tree is not NULL and the user- | |||
initial-policy-set is not any-policy, calculate the | initial-policy-set is not any-policy, calculate the | |||
intersection of the valid_policy_tree and the user-initial- | intersection of the valid_policy_tree and the user- | |||
policy-set as follows: | initial-policy-set as follows: | |||
1. Determine the set of policy nodes whose parent nodes | 1. Determine the set of policy nodes whose parent nodes | |||
have a valid_policy of anyPolicy. This is the | have a valid_policy of anyPolicy. This is the | |||
valid_policy_node_set. | valid_policy_node_set. | |||
2. If the valid_policy of any node in the | 2. If the valid_policy of any node in the | |||
valid_policy_node_set is not in the user-initial-policy-set | valid_policy_node_set is not in the user-initial- | |||
and is not anyPolicy, delete this node and all its children. | policy-set and is not anyPolicy, delete this node and | |||
all its children. | ||||
3. If the valid_policy_tree includes a node of depth n with | 3. If the valid_policy_tree includes a node of depth n | |||
the valid_policy anyPolicy and the user-initial-policy-set | with the valid_policy anyPolicy and the user-initial- | |||
is not any-policy perform the following steps: | policy-set is not any-policy, perform the following | |||
steps: | ||||
a. Set P-Q to the qualifier_set in the node of depth n | a. Set P-Q to the qualifier_set in the node of depth n | |||
with valid_policy anyPolicy. | with valid_policy anyPolicy. | |||
b. For each P-OID in the user-initial-policy-set that is | b. For each P-OID in the user-initial-policy-set that is | |||
not the valid_policy of a node in the | not the valid_policy of a node in the | |||
valid_policy_node_set, create a child node whose parent | valid_policy_node_set, create a child node whose | |||
is the node of depth n-1 with the valid_policy anyPolicy. | parent is the node of depth n-1 with the valid_policy | |||
Set the values in the child node as follows: set the | anyPolicy. Set the values in the child node as | |||
valid_policy to P-OID; set the qualifier_set to P-Q; and | follows: set the valid_policy to P-OID, set the | |||
set the expected_policy_set to {P-OID}. | qualifier_set to P-Q, and set the expected_policy_set | |||
to {P-OID}. | ||||
c. Delete the node of depth n with the valid_policy | c. Delete the node of depth n with the valid_policy | |||
anyPolicy. | anyPolicy. | |||
4. If there is a node in the valid_policy_tree of depth n-1 | 4. If there is a node in the valid_policy_tree of depth | |||
or less without any child nodes, delete that node. Repeat | n-1 or less without any child nodes, delete that node. | |||
this step until there are no nodes of depth n-1 or less | Repeat this step until there are no nodes of depth n-1 | |||
without children. | or less without children. | |||
If either (1) the value of explicit_policy variable is greater than | If either (1) the value of explicit_policy variable is greater than | |||
zero, or (2) the valid_policy_tree is not NULL, then path processing | zero or (2) the valid_policy_tree is not NULL, then path processing | |||
has succeeded. | has succeeded. | |||
6.1.6 Outputs | 6.1.6. Outputs | |||
If path processing succeeds, the procedure terminates, returning a | If path processing succeeds, the procedure terminates, returning a | |||
success indication together with final value of the | success indication together with final value of the | |||
valid_policy_tree, the working_public_key, the | valid_policy_tree, the working_public_key, the | |||
working_public_key_algorithm, and the working_public_key_parameters. | working_public_key_algorithm, and the working_public_key_parameters. | |||
6.2 Using the Path Validation Algorithm | 6.2. Using the Path Validation Algorithm | |||
The path validation algorithm describes the process of validating a | The path validation algorithm describes the process of validating a | |||
single certification path. While each certification path begins with | single certification path. While each certification path begins with | |||
a specific trust anchor, there is no requirement that all | a specific trust anchor, there is no requirement that all | |||
certification paths validated by a particular system share a single | certification paths validated by a particular system share a single | |||
trust anchor. The selection of one or more trusted CAs is a local | trust anchor. The selection of one or more trusted CAs is a local | |||
decision. A system may provide any one of its trusted CAs as the | decision. A system may provide any one of its trusted CAs as the | |||
trust anchor for a particular path. The inputs to the path | trust anchor for a particular path. The inputs to the path | |||
validation algorithm may be different for each path. The inputs used | validation algorithm may be different for each path. The inputs used | |||
to process a path may reflect application-specific requirements or | to process a path may reflect application-specific requirements or | |||
limitations in the trust accorded a particular trust anchor. For | limitations in the trust accorded a particular trust anchor. For | |||
example, a trusted CA may only be trusted for a particular | example, a trusted CA may only be trusted for a particular | |||
certificate policy. This restriction can be expressed through the | certificate policy. This restriction can be expressed through the | |||
inputs to the path validation procedure. | inputs to the path validation procedure. | |||
An implementation MAY augment the algorithm presented in section 6.1 | An implementation MAY augment the algorithm presented in Section 6.1 | |||
to further limit the set of valid certification paths that begin with | to further limit the set of valid certification paths that begin with | |||
a particular trust anchor. For example, an implementation MAY modify | a particular trust anchor. For example, an implementation MAY modify | |||
the algorithm to apply a path length constraint to a specific trust | the algorithm to apply a path length constraint to a specific trust | |||
anchor during the initialization phase, or the application MAY | anchor during the initialization phase, or the application MAY | |||
require the presence of a particular alternative name form in the | require the presence of a particular alternative name form in the | |||
target certificate, or the application MAY impose requirements on | target certificate, or the application MAY impose requirements on | |||
application-specific extensions. Thus, the path validation algorithm | application-specific extensions. Thus, the path validation algorithm | |||
presented in section 6.1 defines the minimum conditions for a path to | presented in Section 6.1 defines the minimum conditions for a path to | |||
be considered valid. | be considered valid. | |||
Where a CA distributes self-signed certificates to specify trust | Where a CA distributes self-signed certificates to specify trust | |||
anchor information, certificate extensions can be used to specify | anchor information, certificate extensions can be used to specify | |||
recommended inputs to path validation. For example, a policy | recommended inputs to path validation. For example, a policy | |||
constraints extension could be included in the self-signed | constraints extension could be included in the self-signed | |||
certificate to indicate that paths beginning with this trust anchor | certificate to indicate that paths beginning with this trust anchor | |||
should be trusted only for the specified policies. Similarly, a name | should be trusted only for the specified policies. Similarly, a name | |||
constraints extension could be included to indicate paths beginning | constraints extension could be included to indicate that paths | |||
with this trust anchor should be trusted only for the specified name | beginning with this trust anchor should be trusted only for the | |||
spaces. The path validation algorithm presented in section 6.1 does | specified name spaces. The path validation algorithm presented in | |||
not assume that trust anchor information is provided in self-signed | Section 6.1 does not assume that trust anchor information is provided | |||
certificates and does not specify processing rules for additional | in self-signed certificates and does not specify processing rules for | |||
information included in such certificates. Implementations that use | additional information included in such certificates. | |||
self-signed certificates to specify trust anchor information are free | Implementations that use self-signed certificates to specify trust | |||
to process or ignore such information. | anchor information are free to process or ignore such information. | |||
6.3 CRL Validation | 6.3. CRL Validation | |||
This section describes the steps necessary to determine if a | This section describes the steps necessary to determine if a | |||
certificate is revoked when CRLs are the revocation mechanism used by | certificate is revoked when CRLs are the revocation mechanism used by | |||
the certificate issuer. Conforming implementations that support CRLs | the certificate issuer. Conforming implementations that support CRLs | |||
are not required to implement this algorithm, but they MUST be | are not required to implement this algorithm, but they MUST be | |||
functionally equivalent to the external behavior resulting from this | functionally equivalent to the external behavior resulting from this | |||
procedure when processing CRLs that are issued in conformance with | procedure when processing CRLs that are issued in conformance with | |||
this profile. Any algorithm may be used by a particular | this profile. Any algorithm may be used by a particular | |||
implementation so long as it derives the correct result. | implementation so long as it derives the correct result. | |||
This algorithm assumes that all of the needed CRLs are available in a | This algorithm assumes that all of the needed CRLs are available in a | |||
local cache. Further, if the next update time of a CRL has passed, | local cache. Further, if the next update time of a CRL has passed, | |||
the algorithm assumes a mechanism to fetch a current CRL and place it | the algorithm assumes a mechanism to fetch a current CRL and place it | |||
in the local CRL cache. | in the local CRL cache. | |||
This algorithm defines a set of inputs, a set of state variables, and | This algorithm defines a set of inputs, a set of state variables, and | |||
processing steps that are performed for each certificate in the path. | processing steps that are performed for each certificate in the path. | |||
The algorithm output is the revocation status of the certificate. | The algorithm output is the revocation status of the certificate. | |||
6.3.1 Revocation Inputs | 6.3.1. Revocation Inputs | |||
To support revocation processing, the algorithm requires two inputs: | To support revocation processing, the algorithm requires two inputs: | |||
(a) certificate: The algorithm requires the certificate serial | (a) certificate: The algorithm requires the certificate serial | |||
number and issuer name to determine whether a certificate is on a | number and issuer name to determine whether a certificate is | |||
particular CRL. The basicConstraints extension is used to | on a particular CRL. The basicConstraints extension is used | |||
determine whether the supplied certificate is associated with a CA | to determine whether the supplied certificate is associated | |||
or an end entity. If present, the algorithm uses the | with a CA or an end entity. If present, the algorithm uses | |||
cRLDistributionPoints and freshestCRL extensions to determine | the cRLDistributionPoints and freshestCRL extensions to | |||
revocation status. | determine revocation status. | |||
(b) use-deltas: This boolean input determines whether delta CRLs | (b) use-deltas: This boolean input determines whether delta CRLs | |||
are applied to CRLs. | are applied to CRLs. | |||
6.3.2 Initialization and Revocation State Variables | 6.3.2. Initialization and Revocation State Variables | |||
To support CRL processing, the algorithm requires the following state | To support CRL processing, the algorithm requires the following state | |||
variables: | variables: | |||
(a) reasons_mask: This variable contains the set of revocation | (a) reasons_mask: This variable contains the set of revocation | |||
reasons supported by the CRLs and delta CRLs processed so far. | reasons supported by the CRLs and delta CRLs processed so | |||
The legal members of the set are the possible revocation reason | far. The legal members of the set are the possible | |||
values minus unspecified: keyCompromise, cACompromise, | revocation reason values minus unspecified: keyCompromise, | |||
affiliationChanged, superseded, cessationOfOperation, | cACompromise, affiliationChanged, superseded, | |||
certificateHold, privilegeWithdrawn, and aACompromise. The | cessationOfOperation, certificateHold, privilegeWithdrawn, | |||
special value all-reasons is used to denote the set of all legal | and aACompromise. The special value all-reasons is used to | |||
members. This variable is initialized to the empty set. | denote the set of all legal members. This variable is | |||
initialized to the empty set. | ||||
(b) cert_status: This variable contains the status of the | (b) cert_status: This variable contains the status of the | |||
certificate. This variable may be assigned one of the following | certificate. This variable may be assigned one of the | |||
values: unspecified, keyCompromise, cACompromise, | following values: unspecified, keyCompromise, cACompromise, | |||
affiliationChanged, superseded, cessationOfOperation, | affiliationChanged, superseded, cessationOfOperation, | |||
certificateHold, removeFromCRL, privilegeWithdrawn, aACompromise, | certificateHold, removeFromCRL, privilegeWithdrawn, | |||
the special value UNREVOKED, or the special value UNDETERMINED. | aACompromise, the special value UNREVOKED, or the special | |||
This variable is initialized to the special value UNREVOKED. | value UNDETERMINED. This variable is initialized to the | |||
special value UNREVOKED. | ||||
(c) interim_reasons_mask: This contains the set of revocation | (c) interim_reasons_mask: This contains the set of revocation | |||
reasons supported by the CRL or delta CRL currently being | reasons supported by the CRL or delta CRL currently being | |||
processed. | processed. | |||
Note: In some environments, it is not necessary to check all reason | Note: In some environments, it is not necessary to check all reason | |||
codes. For example, some environments are only concerned with | codes. For example, some environments are only concerned with | |||
cACompromise and keyCompromise for CA certificates. This algorithm | cACompromise and keyCompromise for CA certificates. This algorithm | |||
checks all reason codes. Additional processing and state variables | checks all reason codes. Additional processing and state variables | |||
may be necessary to limit the checking to a subset of the reason | may be necessary to limit the checking to a subset of the reason | |||
codes. | codes. | |||
6.3.3 CRL Processing | 6.3.3. CRL Processing | |||
This algorithm begins by assuming the certificate is not revoked. | This algorithm begins by assuming that the certificate is not | |||
The algorithm checks one or more CRLs until either the certificate | revoked. The algorithm checks one or more CRLs until either the | |||
status is determined to be revoked or sufficient CRLs have been | certificate status is determined to be revoked or sufficient CRLs | |||
checked to cover all reason codes. | have been checked to cover all reason codes. | |||
For each distribution point (DP) in the certificate's CRL | For each distribution point (DP) in the certificate's CRL | |||
distribution points extension, for each corresponding CRL in the | distribution points extension, for each corresponding CRL in the | |||
local CRL cache, while ((reasons_mask is not all-reasons) and | local CRL cache, while ((reasons_mask is not all-reasons) and | |||
(cert_status is UNREVOKED)) perform the following: | (cert_status is UNREVOKED)) perform the following: | |||
(a) Update the local CRL cache by obtaining a complete CRL, a | (a) Update the local CRL cache by obtaining a complete CRL, a | |||
delta CRL, or both, as required: | delta CRL, or both, as required: | |||
(1) If the current time is after the value of the CRL next | (1) If the current time is after the value of the CRL next | |||
update field, then do one of the following: | update field, then do one of the following: | |||
(i) If use-deltas is set and either the certificate or the | (i) If use-deltas is set and either the certificate or the | |||
CRL contains the freshest CRL extension, obtain a delta CRL | CRL contains the freshest CRL extension, obtain a | |||
with the a next update value that is after the current time | delta CRL with a next update value that is after the | |||
and can be used to update the locally cached CRL as | current time and can be used to update the locally | |||
specified in section 5.2.4. | cached CRL as specified in Section 5.2.4. | |||
(ii) Update the local CRL cache with a current complete | (ii) Update the local CRL cache with a current complete | |||
CRL, verify that the current time is before the next update | CRL, verify that the current time is before the next | |||
value in the new CRL, and continue processing with the new | update value in the new CRL, and continue processing | |||
CRL. If use-deltas is set and either the certificate or the | with the new CRL. If use-deltas is set and either the | |||
CRL contains the freshest CRL extension, then obtain the | certificate or the CRL contains the freshest CRL | |||
current delta CRL that can be used to update the new locally | extension, then obtain the current delta CRL that can | |||
cached complete CRL as specified in section 5.2.4. | be used to update the new locally cached complete CRL | |||
as specified in Section 5.2.4. | ||||
(2) If the current time is before the value of the next update | (2) If the current time is before the value of the next update | |||
field, use-deltas is set, and either the certificate or the CRL | field, use-deltas is set, and either the certificate or | |||
contains the freshest CRL extension, then obtain the current | the CRL contains the freshest CRL extension, then obtain | |||
delta CRL that can be used to update the locally cached | the current delta CRL that can be used to update the | |||
complete CRL as specified in section 5.2.4. | locally cached complete CRL as specified in Section 5.2.4. | |||
(b) Verify the issuer and scope of the complete CRL as follows: | (b) Verify the issuer and scope of the complete CRL as follows: | |||
(1) If the DP includes cRLIssuer, then verify that the issuer | (1) If the DP includes cRLIssuer, then verify that the issuer | |||
field in the complete CRL matches cRLIssuer in the DP and that | field in the complete CRL matches cRLIssuer in the DP and | |||
the complete CRL contains an issuing distribution point | that the complete CRL contains an issuing distribution | |||
extension with the indirectCRL boolean asserted. Otherwise, | point extension with the indirectCRL boolean asserted. | |||
verify that the CRL issuer matches the certificate issuer. | Otherwise, verify that the CRL issuer matches the | |||
certificate issuer. | ||||
(2) If the complete CRL includes an issuing distribution point | (2) If the complete CRL includes an issuing distribution point | |||
(IDP) CRL extension check the following: | (IDP) CRL extension, check the following: | |||
(i) If the distribution point name is present in the IDP | (i) If the distribution point name is present in the IDP | |||
CRL extension and the distribution field is present in the | CRL extension and the distribution field is present in | |||
DP, then verify that one of the names in the IDP matches one | the DP, then verify that one of the names in the IDP | |||
of the names in the DP. If the distribution point name is | matches one of the names in the DP. If the | |||
present in the IDP CRL extension and the distribution field | distribution point name is present in the IDP CRL | |||
is omitted from the DP, then verify that one of the names in | extension and the distribution field is omitted from | |||
the IDP matches one of the names in the cRLIssuer field of | the DP, then verify that one of the names in the IDP | |||
the DP. | matches one of the names in the cRLIssuer field of the | |||
DP. | ||||
(ii) If the onlyContainsUserCerts boolean is asserted in | (ii) If the onlyContainsUserCerts boolean is asserted in | |||
the IDP CRL extension, verify that the certificate does not | the IDP CRL extension, verify that the certificate | |||
include the basic constraints extension with the cA boolean | does not include the basic constraints extension with | |||
asserted. | the cA boolean asserted. | |||
(iii) If the onlyContainsCACerts boolean is asserted in the | (iii) If the onlyContainsCACerts boolean is asserted in the | |||
IDP CRL extension, verify that the certificate includes the | IDP CRL extension, verify that the certificate | |||
basic constraints extension with the cA boolean asserted. | includes the basic constraints extension with the cA | |||
boolean asserted. | ||||
(iv) Verify that the onlyContainsAttributeCerts boolean is | (iv) Verify that the onlyContainsAttributeCerts boolean is | |||
not asserted. | not asserted. | |||
(c) If use-deltas is set, verify the issuer and scope of the | (c) If use-deltas is set, verify the issuer and scope of the | |||
delta CRL as follows: | delta CRL as follows: | |||
(1) Verify that the delta CRL issuer matches complete CRL | (1) Verify that the delta CRL issuer matches the complete CRL | |||
issuer. | issuer. | |||
(2) If the complete CRL includes an issuing distribution point | (2) If the complete CRL includes an issuing distribution point | |||
(IDP) CRL extension, verify that the delta CRL contains a | (IDP) CRL extension, verify that the delta CRL contains a | |||
matching IDP CRL extension. If the complete CRL omits an IDP | matching IDP CRL extension. If the complete CRL omits an | |||
CRL extension, verify that the delta CRL also omits an IDP CRL | IDP CRL extension, verify that the delta CRL also omits an | |||
extension. | IDP CRL extension. | |||
(3) Verify that the delta CRL authority key identifier | (3) Verify that the delta CRL authority key identifier | |||
extension matches complete CRL authority key identifier | extension matches the complete CRL authority key | |||
extension. | identifier extension. | |||
(d) Compute the interim_reasons_mask for this CRL as follows: | (d) Compute the interim_reasons_mask for this CRL as follows: | |||
(1) If the issuing distribution point (IDP) CRL extension is | (1) If the issuing distribution point (IDP) CRL extension is | |||
present and includes onlySomeReasons and the DP includes | present and includes onlySomeReasons and the DP includes | |||
reasons, then set interim_reasons_mask to the intersection of | reasons, then set interim_reasons_mask to the intersection | |||
reasons in the DP and onlySomeReasons in IDP CRL extension. | of reasons in the DP and onlySomeReasons in the IDP CRL | |||
extension. | ||||
(2) If the IDP CRL extension includes onlySomeReasons but the | (2) If the IDP CRL extension includes onlySomeReasons but the | |||
DP omits reasons, then set interim_reasons_mask to the value of | DP omits reasons, then set interim_reasons_mask to the | |||
onlySomeReasons in IDP CRL extension. | value of onlySomeReasons in the IDP CRL extension. | |||
(3) If the IDP CRL extension is not present or omits | (3) If the IDP CRL extension is not present or omits | |||
onlySomeReasons but the DP includes reasons, then set | onlySomeReasons but the DP includes reasons, then set | |||
interim_reasons_mask to the value of DP reasons. | interim_reasons_mask to the value of DP reasons. | |||
(4) If the IDP CRL extension is not present or omits | (4) If the IDP CRL extension is not present or omits | |||
onlySomeReasons and the DP omits reasons, then set | onlySomeReasons and the DP omits reasons, then set | |||
interim_reasons_mask to the special value all-reasons. | interim_reasons_mask to the special value all-reasons. | |||
(e) Verify that interim_reasons_mask includes one or more reasons | (e) Verify that interim_reasons_mask includes one or more reasons | |||
that is not included in the reasons_mask. | that are not included in the reasons_mask. | |||
(f) Obtain and validate the certification path for the issuer of | (f) Obtain and validate the certification path for the issuer of | |||
the complete CRL. The trust anchor for the certification path | the complete CRL. The trust anchor for the certification | |||
MUST be the same as the trust anchor used to validate the target | path MUST be the same as the trust anchor used to validate | |||
certificate. If a key usage extension is present in the CRL | the target certificate. If a key usage extension is present | |||
issuer's certificate, verify that the cRLSign bit is set. | in the CRL issuer's certificate, verify that the cRLSign bit | |||
is set. | ||||
(g) Validate the signature on the complete CRL using the public | (g) Validate the signature on the complete CRL using the public | |||
key validated in step (f). | key validated in step (f). | |||
(h) If use-deltas is set, then validate the signature on the | (h) If use-deltas is set, then validate the signature on the | |||
delta CRL using the public key validated in step (f). | delta CRL using the public key validated in step (f). | |||
(i) If use-deltas is set, then search for the certificate on the | (i) If use-deltas is set, then search for the certificate on the | |||
delta CRL. If an entry is found that matches the certificate | delta CRL. If an entry is found that matches the certificate | |||
issuer and serial number as described in section 5.3.3, then set | issuer and serial number as described in Section 5.3.3, then | |||
the cert_status variable to the indicated reason as follows: | set the cert_status variable to the indicated reason as | |||
follows: | ||||
(1) If the reason code CRL entry extension is present, set the | (1) If the reason code CRL entry extension is present, set the | |||
cert_status variable to the value of the reason code CRL entry | cert_status variable to the value of the reason code CRL | |||
extension. | entry extension. | |||
(2) If the reason code CRL entry extension is not present, set | (2) If the reason code CRL entry extension is not present, set | |||
the cert_status variable to the value unspecified. | the cert_status variable to the value unspecified. | |||
(j) If (cert_status is UNREVOKED), then search for the | (j) If (cert_status is UNREVOKED), then search for the | |||
certificate on the complete CRL. If an entry is found that | certificate on the complete CRL. If an entry is found that | |||
matches the certificate issuer and serial number as described in | matches the certificate issuer and serial number as described | |||
section 5.3.3, then set the cert_status variable to the indicated | in Section 5.3.3, then set the cert_status variable to the | |||
reason as described in step (i). | indicated reason as described in step (i). | |||
(k) If (cert_status is removeFromCRL), then set cert_status to | (k) If (cert_status is removeFromCRL), then set cert_status to | |||
UNREVOKED. | UNREVOKED. | |||
(l) Set the reasons_mask state variable to the union of its | (l) Set the reasons_mask state variable to the union of its | |||
previous value and the value of the interim_reasons_mask state | previous value and the value of the interim_reasons_mask | |||
variable. | state variable. | |||
If ((reasons_mask is all-reasons) OR (cert_status is not UNREVOKED)), | If ((reasons_mask is all-reasons) OR (cert_status is not UNREVOKED)), | |||
then the revocation status has been determined, so return | then the revocation status has been determined, so return | |||
cert_status. | cert_status. | |||
If the revocation status has not been determined, repeat the process | If the revocation status has not been determined, repeat the process | |||
above with any available CRLs not specified in a distribution point | above with any available CRLs not specified in a distribution point | |||
but issued by the certificate issuer. For the processing of such a | but issued by the certificate issuer. For the processing of such a | |||
CRL, assume a DP with both the reasons and the cRLIssuer fields | CRL, assume a DP with both the reasons and the cRLIssuer fields | |||
omitted and a distribution point name of the certificate issuer. | omitted and a distribution point name of the certificate issuer. | |||
That is, the sequence of names in fullName is generated from the | That is, the sequence of names in fullName is generated from the | |||
certificate issuer field as well as the certificate issuerAltName | certificate issuer field as well as the certificate issuerAltName | |||
extension. After processing such CRLs, if the revocation status has | extension. After processing such CRLs, if the revocation status has | |||
still not been determined then return the cert_status UNDETERMINED. | still not been determined, then return the cert_status UNDETERMINED. | |||
7 Processing Rules for Internationalized Names | 7. Processing Rules for Internationalized Names | |||
Internationalized names may be encountered in numerous certificate | Internationalized names may be encountered in numerous certificate | |||
and CRL fields and extensions, including distinguished names, | and CRL fields and extensions, including distinguished names, | |||
internationalized domain names, electronic mail addresses, and | internationalized domain names, electronic mail addresses, and | |||
internationalized resource identifiers (IRIs). Storage, comparison, | Internationalized Resource Identifiers (IRIs). Storage, comparison, | |||
and presentation of such names require special care. Some characters | and presentation of such names require special care. Some characters | |||
may be encoded in multiple ways. The same names could be represented | may be encoded in multiple ways. The same names could be represented | |||
in multiple encodings (e.g., ASCII or UTF8). This section | in multiple encodings (e.g., ASCII or UTF8). This section | |||
establishes conformance requirements for storage or comparison of | establishes conformance requirements for storage or comparison of | |||
each of these name forms. Informative guidance on presentation is | each of these name forms. Informative guidance on presentation is | |||
provided for some of these name forms. | provided for some of these name forms. | |||
7.1 Internationalized Names in Distinguished Names | 7.1. Internationalized Names in Distinguished Names | |||
Representation of internationalized names in distinguished names is | Representation of internationalized names in distinguished names is | |||
covered in sections 4.1.2.4, Issuer Name, and 4.1.2.6, Subject Name. | covered in Sections 4.1.2.4, Issuer Name, and 4.1.2.6, Subject Name. | |||
Standard naming attributes, such as common name, employ the | Standard naming attributes, such as common name, employ the | |||
DirectoryString type, which supports internationalized names through | DirectoryString type, which supports internationalized names through | |||
a variety of language encodings. Conforming implementations MUST | a variety of language encodings. Conforming implementations MUST | |||
support UTF8String and PrintableString. RFC 3280 required only | support UTF8String and PrintableString. RFC 3280 required only | |||
binary comparison of attribute values encoded in UTF8String, however, | binary comparison of attribute values encoded in UTF8String, however, | |||
this specification requires a more comprehensive handling of | this specification requires a more comprehensive handling of | |||
comparison. Implementations may encounter certificates and CRLs with | comparison. Implementations may encounter certificates and CRLs with | |||
names encoded using TeletexString, BMPString, or UniversalString but | names encoded using TeletexString, BMPString, or UniversalString, but | |||
support for these is OPTIONAL. | support for these is OPTIONAL. | |||
Conforming implementations MUST use the LDAP StringPrep profile | Conforming implementations MUST use the LDAP StringPrep profile | |||
(including insignificant space handling), as specified in [RFC 4518], | (including insignificant space handling), as specified in [RFC4518], | |||
as the basis for comparison of distinguished name attributes encoded | as the basis for comparison of distinguished name attributes encoded | |||
in either PrintableString or UTF8String. Conforming implementations | in either PrintableString or UTF8String. Conforming implementations | |||
MUST support name comparisons using caseIgnoreMatch. Support for | MUST support name comparisons using caseIgnoreMatch. Support for | |||
attribute types that use other equality matching rules is optional. | attribute types that use other equality matching rules is optional. | |||
Before comparing names using the caseIgnoreMatch matching rule, | Before comparing names using the caseIgnoreMatch matching rule, | |||
conforming implementations MUST perform the six step string | conforming implementations MUST perform the six-step string | |||
preparation algorithm described in [RFC 4518] for each attribute of | preparation algorithm described in [RFC4518] for each attribute of | |||
type DirectoryString, with the following clarifications: | type DirectoryString, with the following clarifications: | |||
* In step 2, Map, the mapping shall include case folding as | * In step 2, Map, the mapping shall include case folding as | |||
specified in appendix B.2 of [RFC 3454]. | specified in Appendix B.2 of [RFC3454]. | |||
* In step 6, Insignificant Character Removal, perform white space | * In step 6, Insignificant Character Removal, perform white space | |||
compression as specified in section 2.6.1, Insignificant Space | compression as specified in Section 2.6.1, Insignificant Space | |||
Handling of [RFC 4518]. | Handling, of [RFC4518]. | |||
When performing the string preparation algorithm, attributes MUST be | When performing the string preparation algorithm, attributes MUST be | |||
treated as stored values. | treated as stored values. | |||
Comparisons of domainComponent attributes MUST be performed as | Comparisons of domainComponent attributes MUST be performed as | |||
specified in section 7.3. | specified in Section 7.3. | |||
Two naming attributes match if the attribute types are the same and | Two naming attributes match if the attribute types are the same and | |||
the values of the attributes are an exact match after processing with | the values of the attributes are an exact match after processing with | |||
the string preparation algorithm. Two relative distinguished names | the string preparation algorithm. Two relative distinguished names | |||
RDN1 and RDN2 match if they have the same number of naming attributes | RDN1 and RDN2 match if they have the same number of naming attributes | |||
and for each naming attribute in RDN1 there is a matching naming | and for each naming attribute in RDN1 there is a matching naming | |||
attribute in RDN2. Two distinguished names DN1 and DN2 match if they | attribute in RDN2. Two distinguished names DN1 and DN2 match if they | |||
have the same number of RDNs, for each RDN in DN1 there is a matching | have the same number of RDNs, for each RDN in DN1 there is a matching | |||
RDN in DN2, and the matching RDNs appear in the same order in both | RDN in DN2, and the matching RDNs appear in the same order in both | |||
DNs. A distinguished name DN1 is within the subtree defined by the | DNs. A distinguished name DN1 is within the subtree defined by the | |||
distinguished name DN2 if DN1 contains at least as many RDNs as DN2, | distinguished name DN2 if DN1 contains at least as many RDNs as DN2, | |||
and DN1 and DN2 are a match when trailing RDNs in DN1 are ignored. | and DN1 and DN2 are a match when trailing RDNs in DN1 are ignored. | |||
7.2 Internationalized Domain Names in GeneralName | 7.2. Internationalized Domain Names in GeneralName | |||
Internationalized domain names (IDNs) may be included in certificates | Internationalized Domain Names (IDNs) may be included in certificates | |||
and CRLs in the subjectAltName and issuerAltName extensions, the name | and CRLs in the subjectAltName and issuerAltName extensions, name | |||
constraints extension, authority information access extension, | constraints extension, authority information access extension, | |||
subject information access extension, CRL distribution points | subject information access extension, CRL distribution points | |||
extension, and issuing distribution point extension. Each of these | extension, and issuing distribution point extension. Each of these | |||
extensions uses the GeneralName type; one choice in GeneralName is | extensions uses the GeneralName type; one choice in GeneralName is | |||
the dNSName field, which is defined as type IA5String. | the dNSName field, which is defined as type IA5String. | |||
IA5String is limited to the set of ASCII characters. To accommodate | IA5String is limited to the set of ASCII characters. To accommodate | |||
internationalized domain names in the current structure, conforming | internationalized domain names in the current structure, conforming | |||
implementations MUST convert internationalized domain names to the | implementations MUST convert internationalized domain names to the | |||
ASCII Compatible Encoding (ACE) format as specified in section 4 of | ASCII Compatible Encoding (ACE) format as specified in Section 4 of | |||
RFC 3490 before storage in the dNSName field. Specifically, | RFC 3490 before storage in the dNSName field. Specifically, | |||
conforming implementations MUST perform the conversion operation | conforming implementations MUST perform the conversion operation | |||
specified in section 4 of RFC 3490, with the following | specified in Section 4 of RFC 3490, with the following | |||
clarifications: | clarifications: | |||
* in step 1, the domain name SHALL be considered a "stored | * in step 1, the domain name SHALL be considered a "stored | |||
string". That is, the AllowUnassigned flag SHALL NOT be set; | string". That is, the AllowUnassigned flag SHALL NOT be set; | |||
* in step 3, set the flag called "UseSTD3ASCIIRules"; | * in step 3, set the flag called "UseSTD3ASCIIRules"; | |||
* in step 4, process each label with the "ToASCII" operation; and | * in step 4, process each label with the "ToASCII" operation; and | |||
* in step 5, change all label separators to U+002E (full stop). | * in step 5, change all label separators to U+002E (full stop). | |||
When comparing DNS names for equality, conforming implementations | When comparing DNS names for equality, conforming implementations | |||
MUST perform a case-insensitive exact match on the entire DNS name. | MUST perform a case-insensitive exact match on the entire DNS name. | |||
When evaluating name constraints, conforming implementations MUST | When evaluating name constraints, conforming implementations MUST | |||
perform a case-insensitive exact match on a label-by-label basis. As | perform a case-insensitive exact match on a label-by-label basis. As | |||
noted in 4.2.1.10, any DNS name that may be constructed by adding | noted in Section 4.2.1.10, any DNS name that may be constructed by | |||
labels to the left hand side of the domain name given as the | adding labels to the left-hand side of the domain name given as the | |||
constraint is considered to fall within the indicated subtree. | constraint is considered to fall within the indicated subtree. | |||
Implementations should convert IDNs to Unicode before display. | Implementations should convert IDNs to Unicode before display. | |||
Specifically, conforming implementations should perform the | Specifically, conforming implementations should perform the | |||
conversion operation specified in section 4 of RFC 3490, with the | conversion operation specified in Section 4 of RFC 3490, with the | |||
following clarifications: | following clarifications: | |||
* in step 1, the domain name SHALL be considered a "stored | * in step 1, the domain name SHALL be considered a "stored | |||
string". That is, the AllowUnassigned flag SHALL NOT be set; | string". That is, the AllowUnassigned flag SHALL NOT be set; | |||
* in step 3, set the flag called "UseSTD3ASCIIRules"; | * in step 3, set the flag called "UseSTD3ASCIIRules"; | |||
* in step 4, process each label with the "ToUnicode" operation; | * in step 4, process each label with the "ToUnicode" operation; | |||
and | and | |||
* skip step 5. | * skip step 5. | |||
Note: Implementations MUST allow for increased space requirements | Note: Implementations MUST allow for increased space requirements | |||
for IDNs. An IDN ACE label will begin with the four additional | for IDNs. An IDN ACE label will begin with the four additional | |||
characters "xn--" and may require as many as five ASCII characters to | characters "xn--" and may require as many as five ASCII characters to | |||
specify a single international character. | specify a single international character. | |||
7.3 Internationalized Domain Names in Distinguished Names | 7.3. Internationalized Domain Names in Distinguished Names | |||
Domain Names may also be represented as distinguished names using | Domain Names may also be represented as distinguished names using | |||
domain components in the subject field, the issuer field, the | domain components in the subject field, the issuer field, the | |||
subjectAltName extension, or the issuerAltName extension. As with | subjectAltName extension, or the issuerAltName extension. As with | |||
the dNSName in the GeneralName type, the value of this attribute is | the dNSName in the GeneralName type, the value of this attribute is | |||
defined as an IA5String. Each domainComponent attribute represents a | defined as an IA5String. Each domainComponent attribute represents a | |||
single label. To represent a label from an IDN in the distinguished | single label. To represent a label from an IDN in the distinguished | |||
name, the implementation MUST perform the "ToASCII" label conversion | name, the implementation MUST perform the "ToASCII" label conversion | |||
specified in section 4.1 of RFC 3490. The label SHALL be considered | specified in Section 4.1 of RFC 3490. The label SHALL be considered | |||
a "stored string". That is, the AllowUnassigned flag SHALL NOT be | a "stored string". That is, the AllowUnassigned flag SHALL NOT be | |||
set. | set. | |||
Conforming implementations shall perform case-insensitive exact match | Conforming implementations shall perform a case-insensitive exact | |||
when comparing domainComponent attributes in distinguished names, as | match when comparing domainComponent attributes in distinguished | |||
described in section 7.2. | names, as described in Section 7.2. | |||
Implementations should convert ACE labels to Unicode before display. | Implementations should convert ACE labels to Unicode before display. | |||
Specifically, conforming implementations should perform the | Specifically, conforming implementations should perform the | |||
"ToUnicode" conversion operation specified, as described in section | "ToUnicode" conversion operation specified, as described in Section | |||
7.2, on each ACE label before displaying the name. | 7.2, on each ACE label before displaying the name. | |||
7.4 Internationalized Resource Identifiers | 7.4. Internationalized Resource Identifiers | |||
Internationalized Resource Identifiers (IRIs) are the | Internationalized Resource Identifiers (IRIs) are the | |||
internationalized complement to the Uniform Resource Identifier | internationalized complement to the Uniform Resource Identifier | |||
(URI). IRIs are sequences of characters from Unicode, while URIs are | (URI). IRIs are sequences of characters from Unicode, while URIs are | |||
sequences of characters from the ASCII character set. [RFC 3987] | sequences of characters from the ASCII character set. [RFC3987] | |||
defines a mapping from IRIs to URIs. While IRIs are not encoded | defines a mapping from IRIs to URIs. While IRIs are not encoded | |||
directly in any certificate fields or extensions, their mapped URIs | directly in any certificate fields or extensions, their mapped URIs | |||
may be included in certificates and CRLs. URIs may appear in the | may be included in certificates and CRLs. URIs may appear in the | |||
subjectAltName and issuerAltName extensions, the name constraints | subjectAltName and issuerAltName extensions, name constraints | |||
extension, authority information access extension, subject | extension, authority information access extension, subject | |||
information access extension, issuing distribution point extension, | information access extension, issuing distribution point extension, | |||
and CRL distribution points extension. Each of these extensions uses | and CRL distribution points extension. Each of these extensions uses | |||
the GeneralName type; URIs are encoded in the | the GeneralName type; URIs are encoded in the | |||
uniformResourceIdentifier field in GeneralName, which is defined as | uniformResourceIdentifier field in GeneralName, which is defined as | |||
type IA5String. | type IA5String. | |||
To accommodate IRIs in the current structure, conforming | To accommodate IRIs in the current structure, conforming | |||
implementations MUST map IRIs to URIs as specified in section 3.1 of | implementations MUST map IRIs to URIs as specified in Section 3.1 of | |||
[RFC 3987], with the following clarifications: | [RFC3987], with the following clarifications: | |||
* in step 1, generate a UCS character sequence from the original | * in step 1, generate a UCS character sequence from the original | |||
IRI format normalizing according to the NFC as specified in | IRI format normalizing according to the NFC as specified in | |||
Variant b (normalization according to NFC); | Variant b (normalization according to NFC); | |||
* perform step 2 using the output from step 1. | * perform step 2 using the output from step 1. | |||
Implementations MUST NOT convert the ireg-name component before | Implementations MUST NOT convert the ireg-name component before | |||
performing step 2. | performing step 2. | |||
Before URIs may be compared, conforming implementations MUST perform | Before URIs may be compared, conforming implementations MUST perform | |||
a combination of the syntax-based and scheme-based normalization | a combination of the syntax-based and scheme-based normalization | |||
techniques described in [RFC 3987]. Specifically, conforming | techniques described in [RFC3987]. Specifically, conforming | |||
implementations MUST prepare URIs for comparison as follows: | implementations MUST prepare URIs for comparison as follows: | |||
* Step 1: Where IRIs allow the usage of IDNs, those names MUST be | * Step 1: Where IRIs allow the usage of IDNs, those names MUST be | |||
converted to ASCII Compatible Encoding as specified in section 7.2 | converted to ASCII Compatible Encoding as specified in Section | |||
above. | 7.2 above. | |||
* Step 2: The scheme and host are normalized to lowercase, as | * Step 2: The scheme and host are normalized to lowercase, as | |||
described in section 5.3.2.1 of [RFC 3987]. | described in Section 5.3.2.1 of [RFC3987]. | |||
* Step 3: Perform percent-encoding normalization, as specified in | * Step 3: Perform percent-encoding normalization, as specified in | |||
section 5.3.2.3 of [RFC 3987]. | Section 5.3.2.3 of [RFC3987]. | |||
* Step 4: Perform path segment normalization, as specified in | * Step 4: Perform path segment normalization, as specified in | |||
section 5.3.2.4 of [RFC 3987]. | Section 5.3.2.4 of [RFC3987]. | |||
* Step 5: If recognized, the implementation MUST perform scheme- | * Step 5: If recognized, the implementation MUST perform scheme- | |||
based normalization as specified in section 5.3.3 of [RFC 3987]. | based normalization as specified in Section 5.3.3 of [RFC3987]. | |||
Conforming implementations MUST recognize and perform scheme-based | Conforming implementations MUST recognize and perform scheme-based | |||
normalization for the following schemes: ldap, http, https, and ftp. | normalization for the following schemes: ldap, http, https, and ftp. | |||
If the scheme is not recognized, Step (5) is omitted. | If the scheme is not recognized, step 5 is omitted. | |||
When comparing URIs for equivalence, conforming implementations shall | When comparing URIs for equivalence, conforming implementations shall | |||
perform a case-sensitive exact match. | perform a case-sensitive exact match. | |||
Implementations should convert URIs to Unicode before display. | Implementations should convert URIs to Unicode before display. | |||
Specifically, conforming implementations should perform the | Specifically, conforming implementations should perform the | |||
conversion operation specified in section 3.2 of [RFC 3987]. | conversion operation specified in Section 3.2 of [RFC3987]. | |||
7.5 Internationalized Electronic Mail Addresses | 7.5. Internationalized Electronic Mail Addresses | |||
Electronic Mail addresses may be included in certificates and CRLs in | Electronic Mail addresses may be included in certificates and CRLs in | |||
the subjectAltName and issuerAltName extensions, the name constraints | the subjectAltName and issuerAltName extensions, name constraints | |||
extension, authority information access extension, subject | extension, authority information access extension, subject | |||
information access extension, issuing distribution point extension, | information access extension, issuing distribution point extension, | |||
or CRL distribution points extension. Each of these extensions uses | or CRL distribution points extension. Each of these extensions uses | |||
the GeneralName construct; GeneralName includes the rfc822Name | the GeneralName construct; GeneralName includes the rfc822Name | |||
choice, which is defined as type IA5String. To accommodate email | choice, which is defined as type IA5String. To accommodate email | |||
addresses with internationalized domain names using the current | addresses with internationalized domain names using the current | |||
structure, conforming implementations MUST convert the addresses into | structure, conforming implementations MUST convert the addresses into | |||
an ASCII representation. | an ASCII representation. | |||
Where the host-part (the Domain of the Mailbox) contains an | Where the host-part (the Domain of the Mailbox) contains an | |||
internationalized name, the domain name MUST be converted from an IDN | internationalized name, the domain name MUST be converted from an IDN | |||
to the ASCII Compatible Encoding (ACE) format as specified in section | to the ASCII Compatible Encoding (ACE) format as specified in Section | |||
7.2. | 7.2. | |||
Two email addresses are considered to match if: | Two email addresses are considered to match if: | |||
1) the local-part of each name is an exact match, AND | 1) the local-part of each name is an exact match, AND | |||
2) the host-part of each name matches using a case-insensitive | 2) the host-part of each name matches using a case-insensitive | |||
ASCII comparison. | ASCII comparison. | |||
Implementations should convert the host-part of internationalized | Implementations should convert the host-part of internationalized | |||
email addresses specified in these extensions to Unicode before | email addresses specified in these extensions to Unicode before | |||
display. Specifically, conforming implementations should perform the | display. Specifically, conforming implementations should perform the | |||
conversion of the host-part of the Mailbox as described in section | conversion of the host-part of the Mailbox as described in Section | |||
7.2. | 7.2. | |||
8 References | 8. Security Considerations | |||
Normative References | ||||
[RFC 791] Postel, J., "Internet Protocol", STD 5, RFC 791, | ||||
September 1981. | ||||
[RFC 1034] Mockapetris, P., "Domain Names - Concepts and | ||||
Facilities", STD 13, RFC 1034, November 1987. | ||||
[RFC 1123] Braden, R., Ed., "Requirements for Internet Hosts -- | ||||
Application and Support", STD 3, RFC 1123, October 1989. | ||||
[RFC 2119] Bradner, S., "Key words for use in RFCs to Indicate | ||||
Requirement Levels", BCP 14, RFC 2119, March 1997. | ||||
[RFC 2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | ||||
(IPv6) Specification", RFC 2460, December 1998. | ||||
[RFC 2585] Housley, R. and P. Hoffman, "Internet X.509 Public Key | ||||
Infrastructure: Operational Protocols: FTP and HTTP", RFC | ||||
2585, May 1999. | ||||
[RFC 2616] Fielding, R., J. Gettys, J. Mogul, H. Frystyk, L. | ||||
Masinter, P. Leach and T. Berners-Lee, "Hypertext | ||||
Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. | ||||
[RFC 2797] Myers, M., X. Liu, J. Schaad and J. Weinstein, | ||||
"Certificate Management Messages over CMS", RFC 2797, | ||||
April 2000. | ||||
[RFC 2821] Klensin, J., Ed., "Simple Mail Transfer Protocol", RFC | ||||
2821, April 2001. | ||||
[RFC 3454] Hoffman, P. and M. Blanchet, "Preparation of | ||||
Internationalized Strings (stringprep)", RFC 3454, | ||||
December 2002. | ||||
[RFC 3490] Falstrom, P., P. Hoffman and A. Costello, | ||||
"Internationalizing Domain Names In Applications (IDNA)", | ||||
RFC 3490, March 2003. | ||||
[RFC 3629] Yergeau, F., "UTF-8, a transformation format of ISO | ||||
10646", STD 63, RFC 3629, November 2003. | ||||
[RFC 3986] Berners-Lee, T., R. Fielding and L. Masinter, "Uniform | ||||
Resource Identifier (URI): Generic Syntax", STD 66, RFC | ||||
3986, January 2005. | ||||
[RFC 3987] Duerst, M. and M. Suigard, "Internationalized Resource | ||||
Identifiers (IRIs)", RFC 3987, January 2005. | ||||
[RFC 4516] Smith, M. and T. Howes, "Lightweight Directory Access | ||||
Protocol (LDAP): Uniform Resource Locator", RFC 4516, | ||||
June 2006. | ||||
[RFC 4518] Zeilenga, K., "Lightweight Directory Access Protocol | ||||
(LDAP): Internationalized String Preparation", RFC 4518, | ||||
June 2006. | ||||
[RFC 4523] Zeilenga, K., "Lightweight Directory Access Protocol | ||||
(LDAP) Schema Definitions for X.509 Certificates", June | ||||
2006. | ||||
[RFC 4632] Fuller, V. and T. Li, "Classless Inter-domain Routing | ||||
(CIDR): The Internet Address Assignment and Aggregation | ||||
Plan", BCP 122, RFC 4632, August 2006. | ||||
[X.680] ITU-T Recommendation X.680 (2002) | ISO/IEC 8824-1:2002, | ||||
Information technology - Abstract Syntax Notation One | ||||
(ASN.1): Specification of basic notation. | ||||
[X.690] ITU-T Recommendation X.690 (2002) | ISO/IEC 8825-1:2002, | ||||
Information technology - ASN.1 encoding rules: | ||||
Specification of Basic Encoding Rules (BER), Canonical | ||||
Encoding Rules (CER) and Distinguished Encoding Rules | ||||
(DER). | ||||
Informative References | ||||
[ISO 8859] ISO/IEC 8859-1:1998. Information technology -- 8-bit | ||||
single-byte coded graphic character sets -- Part 1: Latin | ||||
alphabet No. 1. | ||||
[ISO 10646] ISO/IEC 10646:2003. Information technology -- Universal | ||||
Multiple-Octet Coded Character Set (UCS). | ||||
[NFC] Davis, M. and M. Duerst, "Unicode Standard Annex #15: | ||||
Unicode Normalization Forms", October 2006, | ||||
<http://www.unicode.org/reports/tr15/>. | ||||
[RFC 1422] Kent, S., "Privacy Enhancement for Internet Electronic | ||||
Mail: Part II: Certificate-Based Key Management," RFC | ||||
1422, February 1993. | ||||
[RFC 2277] Alvestrand, H., "IETF Policy on Character Sets and | ||||
Languages", BCP 18, RFC 2277, January 1998. | ||||
[RFC 2459] Housley, R., W. Ford, W. Polk and D. Solo, "Internet | ||||
X.509 Public Key Infrastructure: Certificate and CRL | ||||
Profile", RFC 2459, January 1999. | ||||
[RFC 2560] Myers, M., R. Ankney, A. Malpani, S. Galperin and C. | ||||
Adams, "Online Certificate Status Protocol - OCSP", June | ||||
1999. | ||||
[RFC 2985] Nystrom, M. and B. Kaliski, "PKCS #9: Selected Object | ||||
Classes and Attribute Types Version 2.0", RFC 2985, | ||||
November 2000. | ||||
[RFC 3161] Adams, C., P. Cain, D. Pinkas and R. Zuccherato, | ||||
"Internet X.509 Public Key Infrastructure Time-Stamp | ||||
Protocol (TSP)", RFC 3161, August 2001. | ||||
[RFC 3279] Bassham, L., W. Polk and R. Housley, "Algorithms and | ||||
Identifiers for the Internet X.509 Public Key | ||||
Infrastructure Certificate and Certificate Revocation | ||||
Lists (CRL) Profile", RFC 3279, April 2002. | ||||
[RFC 3280] Housley, R., W. Polk, W. Ford and D. Solo, "Internet | ||||
X.509 Public Key Infrastructure: Certificate and | ||||
Certificate Revocation List (CRL) Profile", RFC 3280, | ||||
April 2002. | ||||
[RFC 4055] Schaad, J., B. Kaliski and R. Housley, "Additional | ||||
Algorithms and Identifiers for RSA Cryptography for use | ||||
in the Internet X.509 Public Key Infrastructure | ||||
Certificate and Certificate Revocation List (CRL) | ||||
Profile", RFC 4055, June 2005. | ||||
[RFC 4120] Neuman, C., T. Yu, S. Hartman and K. Raeburn, "The | ||||
Kerberos Network Authentication Service (V5)," RFC 4120, | ||||
July 2005. | ||||
[RFC 4210] Adams, C., S. Farrell, T. Kause and T. Mononen, "Internet | ||||
X.509 Public Key Infrastructure Certificate Management | ||||
Protocol (CMP)", RFC 4210, September 2005. | ||||
[RFC 4325] Santesson, S. and R. Housley, "Internet X.509 Public Key | ||||
Infrastructure Authority Information Access Certificate | ||||
Revocation List (CRL) Extension", RFC 4325, December | ||||
2005. | ||||
[RFC 4491] Leontiev, S., Ed., and D. Shefanovski, Ed., "Using the | ||||
GOST R 34.10-94, GOST R 34.10-2001, and GOST R 34.11-94 | ||||
Algorithms with the Internet X.509 Public Key | ||||
Infrastructure Certificate and CRL Profile", RFC 4491, | ||||
May 2006. | ||||
[RFC 4510] Zeilenga, K., Ed., "Lightweight Directory Access Protocol | ||||
(LDAP): Technical Specification Road Map", RFC 4510, June | ||||
2006. | ||||
[RFC 4512] Zeilenga, K., Ed., "Lightweight Directory Access Protocol | ||||
(LDAP): Directory Information Models", RFC 4512, June | ||||
2006. | ||||
[RFC 4514] Zeilenga, K., Ed., "Lightweight Directory Access Protocol | ||||
(LDAP): String Representation of Distinguished Names", | ||||
RFC 4514, June 2006. | ||||
[RFC 4519] Sciberras, A., Ed., "Lightweight Directory Access | ||||
Protocol (LDAP): Schema for User Applications", RFC 4519, | ||||
June 2006. | ||||
[RFC 4630] Housley, R. and S. Santesson, "Update to DirectoryString | ||||
Processing in the Internet X.509 Public Key | ||||
Infrastructure Certificate and Certificate Revocation | ||||
List (CRL) Profile", RFC 4630, August 2006. | ||||
[X.500] ITU-T Recommendation X.500 (2005) | ISO/IEC 9594-1:2005, | ||||
Information technology - Open Systems Interconnection - | ||||
The Directory: Overview of concepts, models and services. | ||||
[X.501] ITU-T Recommendation X.501 (2005) | ISO/IEC 9594-2:2005, | ||||
Information technology - Open Systems Interconnection - | ||||
The Directory: Models. | ||||
[X.509] ITU-T Recommendation X.509 (2005) | ISO/IEC 9594-8:2005, | ||||
Information technology - Open Systems Interconnection - | ||||
The Directory: Public-key and attribute certificate | ||||
frameworks. | ||||
[X.520] ITU-T Recommendation X.520 (2005) | ISO/IEC 9594-6:2005, | ||||
Information technology - Open Systems Interconnection - | ||||
The Directory: Selected attribute types. | ||||
[X.660] ITU-T Recommendation X.660 (2004) | ISO/IEC 9834-1:2005, | ||||
Information technology - Open Systems Interconnection - | ||||
Procedures for the operation of OSI Registration | ||||
Authorities: General procedures, and top arcs of the | ||||
ASN.1 Object Identifier tree. | ||||
[X.683] ITU-T Recommendation X.683 (2002) | ISO/IEC 8824-4:2002, | ||||
Information technology - Abstract Syntax Notation One | ||||
(ASN.1): Parameterization of ASN.1 specifications. | ||||
[X9.55] ANSI X9.55-1997, Public Key Cryptography for the | ||||
Financial Services Industry: Extensions to Public Key | ||||
Certificates and Certificate Revocation Lists, January | ||||
1997. | ||||
9 Intellectual Property Rights | ||||
The IETF takes no position regarding the validity or scope of any | ||||
Intellectual Property Rights or other rights that might be claimed to | ||||
pertain to the implementation or use of the technology described in | ||||
this document or the extent to which any license under such rights | ||||
might or might not be available; nor does it represent that it has | ||||
made any independent effort to identify any such rights. Information | ||||
on the procedures with respect to rights in RFC documents can be | ||||
found in BCP 78 and BCP 79. | ||||
Copies of IPR disclosures made to the IETF Secretariat and any | ||||
assurances of licenses to be made available, or the result of an | ||||
attempt made to obtain a general license or permission for the use of | ||||
such proprietary rights by implementers or users of this | ||||
specification can be obtained from the IETF on-line IPR repository at | ||||
http://www.ietf.org/ipr. | ||||
The IETF invites any interested party to bring to its attention any | ||||
copyrights, patents or patent applications, or other proprietary | ||||
rights that may cover technology that may be required to implement | ||||
this standard. Please address the information to the IETF at | ||||
ietf-ipr@ietf.org. | ||||
10 Security Considerations | ||||
The majority of this specification is devoted to the format and | The majority of this specification is devoted to the format and | |||
content of certificates and CRLs. Since certificates and CRLs are | content of certificates and CRLs. Since certificates and CRLs are | |||
digitally signed, no additional integrity service is necessary. | digitally signed, no additional integrity service is necessary. | |||
Neither certificates nor CRLs need be kept secret, and unrestricted | Neither certificates nor CRLs need be kept secret, and unrestricted | |||
and anonymous access to certificates and CRLs has no security | and anonymous access to certificates and CRLs has no security | |||
implications. | implications. | |||
However, security factors outside the scope of this specification | However, security factors outside the scope of this specification | |||
will affect the assurance provided to certificate users. This | will affect the assurance provided to certificate users. This | |||
skipping to change at page 103, line 14 ¶ | skipping to change at page 101, line 16 ¶ | |||
to other CAs. | to other CAs. | |||
The use of a single key pair for both signature and other purposes is | The use of a single key pair for both signature and other purposes is | |||
strongly discouraged. Use of separate key pairs for signature and | strongly discouraged. Use of separate key pairs for signature and | |||
key management provides several benefits to the users. The | key management provides several benefits to the users. The | |||
ramifications associated with loss or disclosure of a signature key | ramifications associated with loss or disclosure of a signature key | |||
are different from loss or disclosure of a key management key. Using | are different from loss or disclosure of a key management key. Using | |||
separate key pairs permits a balanced and flexible response. | separate key pairs permits a balanced and flexible response. | |||
Similarly, different validity periods or key lengths for each key | Similarly, different validity periods or key lengths for each key | |||
pair may be appropriate in some application environments. | pair may be appropriate in some application environments. | |||
Unfortunately, some legacy applications (e.g., SSL) use a single key | Unfortunately, some legacy applications (e.g., Secure Sockets Layer | |||
pair for signature and key management. | (SSL)) use a single key pair for signature and key management. | |||
The protection afforded private keys is a critical security factor. | The protection afforded private keys is a critical security factor. | |||
On a small scale, failure of users to protect their private keys will | On a small scale, failure of users to protect their private keys will | |||
permit an attacker to masquerade as them, or decrypt their personal | permit an attacker to masquerade as them or decrypt their personal | |||
information. On a larger scale, compromise of a CA's private signing | information. On a larger scale, compromise of a CA's private signing | |||
key may have a catastrophic effect. If an attacker obtains the | key may have a catastrophic effect. If an attacker obtains the | |||
private key unnoticed, the attacker may issue bogus certificates and | private key unnoticed, the attacker may issue bogus certificates and | |||
CRLs. Existence of bogus certificates and CRLs will undermine | CRLs. Existence of bogus certificates and CRLs will undermine | |||
confidence in the system. If such a compromise is detected, all | confidence in the system. If such a compromise is detected, all | |||
certificates issued to the compromised CA MUST be revoked, preventing | certificates issued to the compromised CA MUST be revoked, preventing | |||
services between its users and users of other CAs. Rebuilding after | services between its users and users of other CAs. Rebuilding after | |||
such a compromise will be problematic, so CAs are advised to | such a compromise will be problematic, so CAs are advised to | |||
implement a combination of strong technical measures (e.g., tamper- | implement a combination of strong technical measures (e.g., tamper- | |||
resistant cryptographic modules) and appropriate management | resistant cryptographic modules) and appropriate management | |||
skipping to change at page 104, line 8 ¶ | skipping to change at page 102, line 10 ¶ | |||
information available only through CRLs that contain critical | information available only through CRLs that contain critical | |||
extensions, particularly if support for those extensions is not | extensions, particularly if support for those extensions is not | |||
mandated by this profile. For example, if revocation information is | mandated by this profile. For example, if revocation information is | |||
supplied using a combination of delta CRLs and full CRLs, and the | supplied using a combination of delta CRLs and full CRLs, and the | |||
delta CRLs are issued more frequently than the full CRLs, then | delta CRLs are issued more frequently than the full CRLs, then | |||
relying parties that cannot handle the critical extensions related to | relying parties that cannot handle the critical extensions related to | |||
delta CRL processing will not be able to obtain the most recent | delta CRL processing will not be able to obtain the most recent | |||
revocation information. Alternatively, if a full CRL is issued | revocation information. Alternatively, if a full CRL is issued | |||
whenever a delta CRL is issued, then timely revocation information | whenever a delta CRL is issued, then timely revocation information | |||
will be available to all relying parties. Similarly, implementations | will be available to all relying parties. Similarly, implementations | |||
of the certification path validation mechanism described in section 6 | of the certification path validation mechanism described in Section 6 | |||
that omit revocation checking provide less assurance than those that | that omit revocation checking provide less assurance than those that | |||
support it. | support it. | |||
The certification path validation algorithm depends on the certain | The certification path validation algorithm depends on the certain | |||
knowledge of the public keys (and other information) about one or | knowledge of the public keys (and other information) about one or | |||
more trusted CAs. The decision to trust a CA is an important | more trusted CAs. The decision to trust a CA is an important | |||
decision as it ultimately determines the trust afforded a | decision as it ultimately determines the trust afforded a | |||
certificate. The authenticated distribution of trusted CA public | certificate. The authenticated distribution of trusted CA public | |||
keys (usually in the form of a "self-signed" certificate) is a | keys (usually in the form of a "self-signed" certificate) is a | |||
security critical out-of-band process that is beyond the scope of | security critical out-of-band process that is beyond the scope of | |||
skipping to change at page 104, line 30 ¶ | skipping to change at page 102, line 32 ¶ | |||
In addition, where a key compromise or CA failure occurs for a | In addition, where a key compromise or CA failure occurs for a | |||
trusted CA, the user will need to modify the information provided to | trusted CA, the user will need to modify the information provided to | |||
the path validation routine. Selection of too many trusted CAs makes | the path validation routine. Selection of too many trusted CAs makes | |||
the trusted CA information difficult to maintain. On the other hand, | the trusted CA information difficult to maintain. On the other hand, | |||
selection of only one trusted CA could limit users to a closed | selection of only one trusted CA could limit users to a closed | |||
community of users. | community of users. | |||
The quality of implementations that process certificates also affects | The quality of implementations that process certificates also affects | |||
the degree of assurance provided. The path validation algorithm | the degree of assurance provided. The path validation algorithm | |||
described in section 6 relies upon the integrity of the trusted CA | described in Section 6 relies upon the integrity of the trusted CA | |||
information, and especially the integrity of the public keys | information, and especially the integrity of the public keys | |||
associated with the trusted CAs. By substituting public keys for | associated with the trusted CAs. By substituting public keys for | |||
which an attacker has the private key, an attacker could trick the | which an attacker has the private key, an attacker could trick the | |||
user into accepting false certificates. | user into accepting false certificates. | |||
The binding between a key and certificate subject cannot be stronger | The binding between a key and certificate subject cannot be stronger | |||
than the cryptographic module implementation and algorithms used to | than the cryptographic module implementation and algorithms used to | |||
generate the signature. Short key lengths or weak hash algorithms | generate the signature. Short key lengths or weak hash algorithms | |||
will limit the utility of a certificate. CAs are encouraged to note | will limit the utility of a certificate. CAs are encouraged to note | |||
advances in cryptology so they can employ strong cryptographic | advances in cryptology so they can employ strong cryptographic | |||
techniques. In addition, CAs SHOULD decline to issue certificates to | techniques. In addition, CAs SHOULD decline to issue certificates to | |||
CAs or end entities that generate weak signatures. | CAs or end entities that generate weak signatures. | |||
Inconsistent application of name comparison rules can result in | Inconsistent application of name comparison rules can result in | |||
acceptance of invalid X.509 certification paths, or rejection of | acceptance of invalid X.509 certification paths or rejection of valid | |||
valid ones. The X.500 series of specifications defines rules for | ones. The X.500 series of specifications defines rules for comparing | |||
comparing distinguished names that require comparison of strings | distinguished names that require comparison of strings without regard | |||
without regard to case, character set, multi-character white space | to case, character set, multi-character white space substring, or | |||
substring, or leading and trailing white space. This specification | leading and trailing white space. This specification relaxes these | |||
relaxes these requirements, requiring support for binary comparison | requirements, requiring support for binary comparison at a minimum. | |||
at a minimum. | ||||
CAs MUST encode the distinguished name in the subject field of a CA | CAs MUST encode the distinguished name in the subject field of a CA | |||
certificate identically to the distinguished name in the issuer field | certificate identically to the distinguished name in the issuer field | |||
in certificates issued by that CA. If CAs use different encodings, | in certificates issued by that CA. If CAs use different encodings, | |||
implementations might fail to recognize name chains for paths that | implementations might fail to recognize name chains for paths that | |||
include this certificate. As a consequence, valid paths could be | include this certificate. As a consequence, valid paths could be | |||
rejected. | rejected. | |||
In addition, name constraints for distinguished names MUST be stated | In addition, name constraints for distinguished names MUST be stated | |||
identically to the encoding used in the subject field or | identically to the encoding used in the subject field or | |||
subjectAltName extension. If not, then name constraints stated as | subjectAltName extension. If not, then name constraints stated as | |||
excludedSubtrees will not match and invalid paths will be accepted | excludedSubtrees will not match and invalid paths will be accepted | |||
and name constraints expressed as permittedSubtrees will not match | and name constraints expressed as permittedSubtrees will not match | |||
and valid paths will be rejected. To avoid acceptance of invalid | and valid paths will be rejected. To avoid acceptance of invalid | |||
paths, CAs SHOULD state name constraints for distinguished names as | paths, CAs SHOULD state name constraints for distinguished names as | |||
permittedSubtrees wherever possible. | permittedSubtrees wherever possible. | |||
In general, using the nameConstraints extension to constrain one name | In general, using the nameConstraints extension to constrain one name | |||
form (e.g. DNS names) offers no protection against use of other name | form (e.g., DNS names) offers no protection against use of other name | |||
forms (e.g. electronic mail addresses). | forms (e.g., electronic mail addresses). | |||
While X.509 mandates that names be unambiguous, there is a risk that | While X.509 mandates that names be unambiguous, there is a risk that | |||
two unrelated authorities will issue certificates and/or CRLs under | two unrelated authorities will issue certificates and/or CRLs under | |||
the same issuer name. As a means of reducing problems and security | the same issuer name. As a means of reducing problems and security | |||
issues related to issuer name collisions, CA and CRL issuer names | issues related to issuer name collisions, CA and CRL issuer names | |||
SHOULD be formed in a way that reduces the likelihood of name | SHOULD be formed in a way that reduces the likelihood of name | |||
collisions. Implementers should take into account the possible | collisions. Implementers should take into account the possible | |||
existence of multiple unrelated CAs and CRL issuers with the same | existence of multiple unrelated CAs and CRL issuers with the same | |||
name. At a minimum, implementations validating CRLs MUST ensure that | name. At a minimum, implementations validating CRLs MUST ensure that | |||
the certification path of a certificate and the CRL issuer | the certification path of a certificate and the CRL issuer | |||
certification path used to validate the certificate terminate at the | certification path used to validate the certificate terminate at the | |||
same trust anchor. | same trust anchor. | |||
While the local-part of an electronic mail address is case-sensitive | While the local-part of an electronic mail address is case sensitive | |||
[RFC 2821], emailAddress attribute values are not case-sensitive | [RFC2821], emailAddress attribute values are not case sensitive | |||
[RFC 2985]. As a result, there is a risk that two different email | [RFC2985]. As a result, there is a risk that two different email | |||
addresses will be treated as the same address when the matching rule | addresses will be treated as the same address when the matching rule | |||
for the emailAddress attribute is used, if the email server exploits | for the emailAddress attribute is used, if the email server exploits | |||
the case sensitivity of mailbox local-parts. Implementers should not | the case sensitivity of mailbox local-parts. Implementers should not | |||
include an email address in the emailAddress attribute if the email | include an email address in the emailAddress attribute if the email | |||
server that hosts the email address treats the local-part of email | server that hosts the email address treats the local-part of email | |||
addresses as case-sensitive. | addresses as case sensitive. | |||
Implementers should be aware of risks involved if the CRL | Implementers should be aware of risks involved if the CRL | |||
distribution points or authority information access extensions of | distribution points or authority information access extensions of | |||
corrupted certificates or CRLs contain links to malicious code. | corrupted certificates or CRLs contain links to malicious code. | |||
Implementers should always take the steps of validating the retrieved | Implementers should always take the steps of validating the retrieved | |||
data to ensure that the data is properly formed. | data to ensure that the data is properly formed. | |||
When certificates include a cRLDistributionPoints extension with an | When certificates include a cRLDistributionPoints extension with an | |||
https URI or similar scheme, circular dependencies can be introduced. | https URI or similar scheme, circular dependencies can be introduced. | |||
The relying party is forced to perform an additional path validation | The relying party is forced to perform an additional path validation | |||
skipping to change at page 106, line 28 ¶ | skipping to change at page 104, line 31 ¶ | |||
parties that choose to validate the server's certificate when | parties that choose to validate the server's certificate when | |||
obtaining information pointed to by an https URI in the | obtaining information pointed to by an https URI in the | |||
cRLDistributionPoints, authorityInfoAccess, or subjectInfoAccess | cRLDistributionPoints, authorityInfoAccess, or subjectInfoAccess | |||
extensions MUST be prepared for the possibility that this will result | extensions MUST be prepared for the possibility that this will result | |||
in unbounded recursion. | in unbounded recursion. | |||
Self-issued certificates provide CAs with one automated mechanism to | Self-issued certificates provide CAs with one automated mechanism to | |||
indicate changes in the CA's operations. In particular, self-issued | indicate changes in the CA's operations. In particular, self-issued | |||
certificates may be used to implement a graceful change-over from one | certificates may be used to implement a graceful change-over from one | |||
non-compromised CA key pair to the next. Detailed procedures for "CA | non-compromised CA key pair to the next. Detailed procedures for "CA | |||
key update" are specified in [RFC 4210], where the CA protects its | key update" are specified in [RFC4210], where the CA protects its new | |||
new public key using its previous private key and vice versa using | public key using its previous private key and vice versa using two | |||
two self-issued certificates. Conforming client implementations will | self-issued certificates. Conforming client implementations will | |||
process the self-issued certificate and determine whether | process the self-issued certificate and determine whether | |||
certificates issued under the new key may be trusted. Self-issued | certificates issued under the new key may be trusted. Self-issued | |||
certificates MAY be used to support other changes in CA operations, | certificates MAY be used to support other changes in CA operations, | |||
such as additions to the CA's policy set, using similar procedures. | such as additions to the CA's policy set, using similar procedures. | |||
Some legacy implementations support names encoded in the ISO 8859-1 | Some legacy implementations support names encoded in the ISO 8859-1 | |||
character set (Latin1String) [ISO 8859] but tag them as | character set (Latin1String) [ISO8859] but tag them as TeletexString. | |||
TeletexString. TeletexString encodes a larger character set than ISO | TeletexString encodes a larger character set than ISO 8859-1, but it | |||
8859-1, but it encodes some characters differently. The name | encodes some characters differently. The name comparison rules | |||
comparison rules specified in section 7.1 assume that TeletexStrings | specified in Section 7.1 assume that TeletexStrings are encoded as | |||
are encoded as described the ASN.1 standard. When comparing names | described in the ASN.1 standard. When comparing names encoded using | |||
encoded using the Latin1String character set false positives and | the Latin1String character set, false positives and negatives are | |||
negatives are possible. | possible. | |||
When strings are mapped from internal representations to visual | When strings are mapped from internal representations to visual | |||
representations, sometimes two different strings will have the same | representations, sometimes two different strings will have the same | |||
or similar visual representations. This can happen for many | or similar visual representations. This can happen for many | |||
different reasons, including use of similar glyphs and use of | different reasons, including use of similar glyphs and use of | |||
composed characters (such as e + ' equaling U+00E9, the Korean | composed characters (such as e + ' equaling U+00E9, the Korean | |||
composed characters, and vowels above consonant clusters in certain | composed characters, and vowels above consonant clusters in certain | |||
languages). As a result of this situation, people doing visual | languages). As a result of this situation, people doing visual | |||
comparisons between two different names may think they are the same | comparisons between two different names may think they are the same | |||
when in fact they are not. Also, people may mistake one string for | when in fact they are not. Also, people may mistake one string for | |||
another. Issuers of certificates and relying parties both need to be | another. Issuers of certificates and relying parties both need to be | |||
aware of this situation. | aware of this situation. | |||
11 IANA Considerations | 9. IANA Considerations | |||
Extensions in certificates and CRLs are identified using object | Extensions in certificates and CRLs are identified using object | |||
identifiers. The objects are defined in an arc delegated by IANA to | identifiers. The objects are defined in an arc delegated by IANA to | |||
the PKIX Working Group. No further action by IANA is necessary for | the PKIX Working Group. No further action by IANA is necessary for | |||
this document or any anticipated updates. | this document or any anticipated updates. | |||
12 Authors' Addresses | 10. Acknowledgments | |||
David Cooper | Warwick Ford participated with the authors in some of the design team | |||
National Institute of Standards and Technology | meetings that directed development of this document. The design | |||
100 Bureau Drive, Mail Stop 8930 | team's efforts were guided by contributions from Matt Crawford, Tom | |||
Gaithersburg, MD 20899-8930 | Gindin, Steve Hanna, Stephen Henson, Paul Hoffman, Takashi Ito, Denis | |||
USA | Pinkas, and Wen-Cheng Wang. | |||
EMail: david.cooper@nist.gov | ||||
Stefan Santesson | 11. References | |||
Microsoft | ||||
Tuborg Boulevard 12 | ||||
2900 Hellerup | ||||
Denmark | ||||
EMail: stefans@microsoft.com | ||||
Stephen Farrell | 11.1. Normative References | |||
Distributed Systems Group | ||||
Computer Science Department | ||||
Trinity College Dublin | ||||
Ireland | ||||
EMail: stephen.farrell@cs.tcd.ie | ||||
Sharon Boeyen | [RFC791] Postel, J., "Internet Protocol", STD 5, RFC 791, September | |||
Entrust | 1981. | |||
1000 Innovation Drive | ||||
Ottawa, Ontario | ||||
Canada K2K 3E7 | ||||
EMail: sharon.boeyen@entrust.com | ||||
Russell Housley | [RFC1034] Mockapetris, P., "Domain Names - Concepts and Facilities", | |||
Vigil Security, LLC | STD 13, RFC 1034, November 1987. | |||
918 Spring Knoll Drive | ||||
Herndon, VA 20170 | ||||
USA | ||||
EMail: housley@vigilsec.com | ||||
Tim Polk | ||||
National Institute of Standards and Technology | ||||
100 Bureau Drive, Mail Stop 8930 | ||||
Gaithersburg, MD 20899-8930 | ||||
USA | ||||
EMail: wpolk@nist.gov | ||||
13 Acknowledgments | [RFC1123] Braden, R., Ed., "Requirements for Internet Hosts -- | |||
Application and Support", STD 3, RFC 1123, October 1989. | ||||
Warwick Ford also participated in the 3280bis design team meetings | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
that directed development of this draft. The design team's efforts | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
were guided by contributions from Matt Crawford, Tom Gindin, Steve | ||||
Hanna, Stephen Henson, Paul Hoffman, Takashi Ito, Denis Pinkas, and | [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | |||
Wen-Cheng Wang. | (IPv6) Specification", RFC 2460, December 1998. | |||
[RFC2585] Housley, R. and P. Hoffman, "Internet X.509 Public Key | ||||
Infrastructure: Operational Protocols: FTP and HTTP", RFC | ||||
2585, May 1999. | ||||
[RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., | ||||
Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext | ||||
Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. | ||||
[RFC2797] Myers, M., Liu, X., Schaad, J., and J. Weinstein, | ||||
"Certificate Management Messages over CMS", RFC 2797, | ||||
April 2000. | ||||
[RFC2821] Klensin, J., Ed., "Simple Mail Transfer Protocol", RFC | ||||
2821, April 2001. | ||||
[RFC3454] Hoffman, P. and M. Blanchet, "Preparation of | ||||
Internationalized Strings ("stringprep")", RFC 3454, | ||||
December 2002. | ||||
[RFC3490] Faltstrom, P., Hoffman, P., and A. Costello, | ||||
"Internationalizing Domain Names in Applications (IDNA)", | ||||
RFC 3490, March 2003. | ||||
[RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO | ||||
10646", STD 63, RFC 3629, November 2003. | ||||
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | ||||
Resource Identifier (URI): Generic Syntax", STD 66, RFC | ||||
3986, January 2005. | ||||
[RFC3987] Duerst, M. and M. Suignard, "Internationalized Resource | ||||
Identifiers (IRIs)", RFC 3987, January 2005. | ||||
[RFC4516] Smith, M., Ed., and T. Howes, "Lightweight Directory | ||||
Access Protocol (LDAP): Uniform Resource Locator", RFC | ||||
4516, June 2006. | ||||
[RFC4518] Zeilenga, K., "Lightweight Directory Access Protocol | ||||
(LDAP): Internationalized String Preparation", RFC 4518, | ||||
June 2006. | ||||
[RFC4523] Zeilenga, K., "Lightweight Directory Access Protocol | ||||
(LDAP) Schema Definitions for X.509 Certificates", RFC | ||||
4523, June 2006. | ||||
[RFC4632] Fuller, V. and T. Li, "Classless Inter-domain Routing | ||||
(CIDR): The Internet Address Assignment and Aggregation | ||||
Plan", BCP 122, RFC 4632, August 2006. | ||||
[X.680] ITU-T Recommendation X.680 (2002) | ISO/IEC 8824-1:2002, | ||||
Information technology - Abstract Syntax Notation One | ||||
(ASN.1): Specification of basic notation. | ||||
[X.690] ITU-T Recommendation X.690 (2002) | ISO/IEC 8825-1:2002, | ||||
Information technology - ASN.1 encoding rules: | ||||
Specification of Basic Encoding Rules (BER), Canonical | ||||
Encoding Rules (CER) and Distinguished Encoding Rules | ||||
(DER). | ||||
11.2. Informative References | ||||
[ISO8859] ISO/IEC 8859-1:1998. Information technology -- 8-bit | ||||
single-byte coded graphic character sets -- Part 1: Latin | ||||
alphabet No. 1. | ||||
[ISO10646] ISO/IEC 10646:2003. Information technology -- Universal | ||||
Multiple-Octet Coded Character Set (UCS). | ||||
[NFC] Davis, M. and M. Duerst, "Unicode Standard Annex #15: | ||||
Unicode Normalization Forms", October 2006, | ||||
<http://www.unicode.org/reports/tr15/>. | ||||
[RFC1422] Kent, S., "Privacy Enhancement for Internet Electronic | ||||
Mail: Part II: Certificate-Based Key Management", RFC | ||||
1422, February 1993. | ||||
[RFC2277] Alvestrand, H., "IETF Policy on Character Sets and | ||||
Languages", BCP 18, RFC 2277, January 1998. | ||||
[RFC2459] Housley, R., Ford, W., Polk, W., and D. Solo, "Internet | ||||
X.509 Public Key Infrastructure Certificate and CRL | ||||
Profile", RFC 2459, January 1999. | ||||
[RFC2560] Myers, M., Ankney, R., Malpani, A., Galperin, S., and C. | ||||
Adams, "X.509 Internet Public Key Infrastructure Online | ||||
Certificate Status Protocol - OCSP", RFC 2560, June 1999. | ||||
[RFC2985] Nystrom, M. and B. Kaliski, "PKCS #9: Selected Object | ||||
Classes and Attribute Types Version 2.0", RFC 2985, | ||||
November 2000. | ||||
[RFC3161] Adams, C., Cain, P., Pinkas, D., and R. Zuccherato, | ||||
"Internet X.509 Public Key Infrastructure Time-Stamp | ||||
Protocol (TSP)", RFC 3161, August 2001. | ||||
[RFC3279] Bassham, L., Polk, W., and R. Housley, "Algorithms and | ||||
Identifiers for the Internet X.509 Public Key | ||||
Infrastructure Certificate and Certificate Revocation List | ||||
(CRL) Profile", RFC 3279, April 2002. | ||||
[RFC3280] Housley, R., Polk, W., Ford, W., and D. Solo, "Internet | ||||
X.509 Public Key Infrastructure Certificate and | ||||
Certificate Revocation List (CRL) Profile", RFC 3280, | ||||
April 2002. | ||||
[RFC4055] Schaad, J., Kaliski, B., and R. Housley, "Additional | ||||
Algorithms and Identifiers for RSA Cryptography for use in | ||||
the Internet X.509 Public Key Infrastructure Certificate | ||||
and Certificate Revocation List (CRL) Profile", RFC 4055, | ||||
June 2005. | ||||
[RFC4120] Neuman, C., Yu, T., Hartman, S., and K. Raeburn, "The | ||||
Kerberos Network Authentication Service (V5)", RFC 4120, | ||||
July 2005. | ||||
[RFC4210] Adams, C., Farrell, S., Kause, T., and T. Mononen, | ||||
"Internet X.509 Public Key Infrastructure Certificate | ||||
Management Protocol (CMP)", RFC 4210, September 2005. | ||||
[RFC4325] Santesson, S. and R. Housley, "Internet X.509 Public Key | ||||
Infrastructure Authority Information Access Certificate | ||||
Revocation List (CRL) Extension", RFC 4325, December 2005. | ||||
[RFC4491] Leontiev, S., Ed., and D. Shefanovski, Ed., "Using the | ||||
GOST R 34.10-94, GOST R 34.10-2001, and GOST R 34.11-94 | ||||
Algorithms with the Internet X.509 Public Key | ||||
Infrastructure Certificate and CRL Profile", RFC 4491, May | ||||
2006. | ||||
[RFC4510] Zeilenga, K., Ed., "Lightweight Directory Access Protocol | ||||
(LDAP): Technical Specification Road Map", RFC 4510, June | ||||
2006. | ||||
[RFC4512] Zeilenga, K., Ed., "Lightweight Directory Access Protocol | ||||
(LDAP): Directory Information Models", RFC 4512, June | ||||
2006. | ||||
[RFC4514] Zeilenga, K., Ed., "Lightweight Directory Access Protocol | ||||
(LDAP): String Representation of Distinguished Names", RFC | ||||
4514, June 2006. | ||||
[RFC4519] Sciberras, A., Ed., "Lightweight Directory Access Protocol | ||||
(LDAP): Schema for User Applications", RFC 4519, June | ||||
2006. | ||||
[RFC4630] Housley, R. and S. Santesson, "Update to DirectoryString | ||||
Processing in the Internet X.509 Public Key Infrastructure | ||||
Certificate and Certificate Revocation List (CRL) | ||||
Profile", RFC 4630, August 2006. | ||||
[X.500] ITU-T Recommendation X.500 (2005) | ISO/IEC 9594-1:2005, | ||||
Information technology - Open Systems Interconnection - | ||||
The Directory: Overview of concepts, models and services. | ||||
[X.501] ITU-T Recommendation X.501 (2005) | ISO/IEC 9594-2:2005, | ||||
Information technology - Open Systems Interconnection - | ||||
The Directory: Models. | ||||
[X.509] ITU-T Recommendation X.509 (2005) | ISO/IEC 9594-8:2005, | ||||
Information technology - Open Systems Interconnection - | ||||
The Directory: Public-key and attribute certificate | ||||
frameworks. | ||||
[X.520] ITU-T Recommendation X.520 (2005) | ISO/IEC 9594-6:2005, | ||||
Information technology - Open Systems Interconnection - | ||||
The Directory: Selected attribute types. | ||||
[X.660] ITU-T Recommendation X.660 (2004) | ISO/IEC 9834-1:2005, | ||||
Information technology - Open Systems Interconnection - | ||||
Procedures for the operation of OSI Registration | ||||
Authorities: General procedures, and top arcs of the ASN.1 | ||||
Object Identifier tree. | ||||
[X.683] ITU-T Recommendation X.683 (2002) | ISO/IEC 8824-4:2002, | ||||
Information technology - Abstract Syntax Notation One | ||||
(ASN.1): Parameterization of ASN.1 specifications. | ||||
[X9.55] ANSI X9.55-1997, Public Key Cryptography for the Financial | ||||
Services Industry: Extensions to Public Key Certificates | ||||
and Certificate Revocation Lists, January 1997. | ||||
Appendix A. Pseudo-ASN.1 Structures and OIDs | Appendix A. Pseudo-ASN.1 Structures and OIDs | |||
This section describes data objects used by conforming PKI components | This appendix describes data objects used by conforming PKI | |||
in an "ASN.1-like" syntax. This syntax is a hybrid of the 1988 and | components in an "ASN.1-like" syntax. This syntax is a hybrid of the | |||
1993 ASN.1 syntaxes. The 1988 ASN.1 syntax is augmented with 1993 | 1988 and 1993 ASN.1 syntaxes. The 1988 ASN.1 syntax is augmented | |||
UNIVERSAL Types UniversalString, BMPString and UTF8String. | with 1993 UNIVERSAL Types UniversalString, BMPString, and UTF8String. | |||
The ASN.1 syntax does not permit the inclusion of type statements in | The ASN.1 syntax does not permit the inclusion of type statements in | |||
the ASN.1 module, and the 1993 ASN.1 standard does not permit use of | the ASN.1 module, and the 1993 ASN.1 standard does not permit use of | |||
the new UNIVERSAL types in modules using the 1988 syntax. As a | the new UNIVERSAL types in modules using the 1988 syntax. As a | |||
result, this module does not conform to either version of the ASN.1 | result, this module does not conform to either version of the ASN.1 | |||
standard. | standard. | |||
This appendix may be converted into 1988 ASN.1 by replacing the | This appendix may be converted into 1988 ASN.1 by replacing the | |||
definitions for the UNIVERSAL Types with the 1988 catch-all "ANY". | definitions for the UNIVERSAL Types with the 1988 catch-all "ANY". | |||
A.1 Explicitly Tagged Module, 1988 Syntax | A.1. Explicitly Tagged Module, 1988 Syntax | |||
PKIX1Explicit88 { iso(1) identified-organization(3) dod(6) internet(1) | PKIX1Explicit88 { iso(1) identified-organization(3) dod(6) internet(1) | |||
security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-explicit(18) } | security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-explicit(18) } | |||
DEFINITIONS EXPLICIT TAGS ::= | DEFINITIONS EXPLICIT TAGS ::= | |||
BEGIN | BEGIN | |||
-- EXPORTS ALL -- | -- EXPORTS ALL -- | |||
skipping to change at page 110, line 16 ¶ | skipping to change at page 112, line 4 ¶ | |||
AttributeTypeAndValue ::= SEQUENCE { | AttributeTypeAndValue ::= SEQUENCE { | |||
type AttributeType, | type AttributeType, | |||
value AttributeValue } | value AttributeValue } | |||
-- suggested naming attributes: Definition of the following | -- suggested naming attributes: Definition of the following | |||
-- information object set may be augmented to meet local | -- information object set may be augmented to meet local | |||
-- requirements. Note that deleting members of the set may | -- requirements. Note that deleting members of the set may | |||
-- prevent interoperability with conforming implementations. | -- prevent interoperability with conforming implementations. | |||
-- presented in pairs: the AttributeType followed by the | -- presented in pairs: the AttributeType followed by the | |||
-- type definition for the corresponding AttributeValue | -- type definition for the corresponding AttributeValue | |||
-- Arc for standard naming attributes | ||||
id-at OBJECT IDENTIFIER ::= { joint-iso-ccitt(2) ds(5) 4 } | id-at OBJECT IDENTIFIER ::= { joint-iso-ccitt(2) ds(5) 4 } | |||
-- Naming attributes of type X520name | -- Naming attributes of type X520name | |||
id-at-name AttributeType ::= { id-at 41 } | id-at-name AttributeType ::= { id-at 41 } | |||
id-at-surname AttributeType ::= { id-at 4 } | id-at-surname AttributeType ::= { id-at 4 } | |||
id-at-givenName AttributeType ::= { id-at 42 } | id-at-givenName AttributeType ::= { id-at 42 } | |||
id-at-initials AttributeType ::= { id-at 43 } | id-at-initials AttributeType ::= { id-at 43 } | |||
id-at-generationQualifier AttributeType ::= { id-at 44 } | id-at-generationQualifier AttributeType ::= { id-at 44 } | |||
skipping to change at page 115, line 25 ¶ | skipping to change at page 118, line 14 ¶ | |||
-- CRL structures | -- CRL structures | |||
CertificateList ::= SEQUENCE { | CertificateList ::= SEQUENCE { | |||
tbsCertList TBSCertList, | tbsCertList TBSCertList, | |||
signatureAlgorithm AlgorithmIdentifier, | signatureAlgorithm AlgorithmIdentifier, | |||
signature BIT STRING } | signature BIT STRING } | |||
TBSCertList ::= SEQUENCE { | TBSCertList ::= SEQUENCE { | |||
version Version OPTIONAL, | version Version OPTIONAL, | |||
-- if present, MUST be v2 | -- if present, MUST be v2 | |||
signature AlgorithmIdentifier, | signature AlgorithmIdentifier, | |||
issuer Name, | issuer Name, | |||
thisUpdate Time, | thisUpdate Time, | |||
nextUpdate Time OPTIONAL, | nextUpdate Time OPTIONAL, | |||
revokedCertificates SEQUENCE OF SEQUENCE { | revokedCertificates SEQUENCE OF SEQUENCE { | |||
userCertificate CertificateSerialNumber, | userCertificate CertificateSerialNumber, | |||
revocationDate Time, | revocationDate Time, | |||
crlEntryExtensions Extensions OPTIONAL | crlEntryExtensions Extensions OPTIONAL | |||
-- if present, MUST be v2 | -- if present, version MUST be v2 | |||
} OPTIONAL, | } OPTIONAL, | |||
crlExtensions [0] Extensions OPTIONAL } | crlExtensions [0] Extensions OPTIONAL } | |||
-- if present, MUST be v2 | -- if present, version MUST be v2 | |||
-- Version, Time, CertificateSerialNumber, and Extensions were | -- Version, Time, CertificateSerialNumber, and Extensions were | |||
-- defined earlier for use in the certificate structure | -- defined earlier for use in the certificate structure | |||
AlgorithmIdentifier ::= SEQUENCE { | AlgorithmIdentifier ::= SEQUENCE { | |||
algorithm OBJECT IDENTIFIER, | algorithm OBJECT IDENTIFIER, | |||
parameters ANY DEFINED BY algorithm OPTIONAL } | parameters ANY DEFINED BY algorithm OPTIONAL } | |||
-- contains a value of the type | -- contains a value of the type | |||
-- registered for use with the | -- registered for use with the | |||
-- algorithm object identifier value | -- algorithm object identifier value | |||
skipping to change at page 118, line 4 ¶ | skipping to change at page 120, line 50 ¶ | |||
ExtensionAttribute ::= SEQUENCE { | ExtensionAttribute ::= SEQUENCE { | |||
extension-attribute-type [0] IMPLICIT INTEGER | extension-attribute-type [0] IMPLICIT INTEGER | |||
(0..ub-extension-attributes), | (0..ub-extension-attributes), | |||
extension-attribute-value [1] | extension-attribute-value [1] | |||
ANY DEFINED BY extension-attribute-type } | ANY DEFINED BY extension-attribute-type } | |||
-- Extension types and attribute values | -- Extension types and attribute values | |||
common-name INTEGER ::= 1 | common-name INTEGER ::= 1 | |||
CommonName ::= PrintableString (SIZE (1..ub-common-name-length)) | ||||
CommonName ::= PrintableString (SIZE (1..ub-common-name-length)) | ||||
teletex-common-name INTEGER ::= 2 | teletex-common-name INTEGER ::= 2 | |||
TeletexCommonName ::= TeletexString (SIZE (1..ub-common-name-length)) | TeletexCommonName ::= TeletexString (SIZE (1..ub-common-name-length)) | |||
teletex-organization-name INTEGER ::= 3 | teletex-organization-name INTEGER ::= 3 | |||
TeletexOrganizationName ::= | TeletexOrganizationName ::= | |||
TeletexString (SIZE (1..ub-organization-name-length)) | TeletexString (SIZE (1..ub-organization-name-length)) | |||
teletex-personal-name INTEGER ::= 4 | teletex-personal-name INTEGER ::= 4 | |||
skipping to change at page 120, line 4 ¶ | skipping to change at page 122, line 49 ¶ | |||
PostOfficeBoxAddress ::= PDSParameter | PostOfficeBoxAddress ::= PDSParameter | |||
poste-restante-address INTEGER ::= 19 | poste-restante-address INTEGER ::= 19 | |||
PosteRestanteAddress ::= PDSParameter | PosteRestanteAddress ::= PDSParameter | |||
unique-postal-name INTEGER ::= 20 | unique-postal-name INTEGER ::= 20 | |||
UniquePostalName ::= PDSParameter | UniquePostalName ::= PDSParameter | |||
local-postal-attributes INTEGER ::= 21 | ||||
local-postal-attributes INTEGER ::= 21 | ||||
LocalPostalAttributes ::= PDSParameter | LocalPostalAttributes ::= PDSParameter | |||
PDSParameter ::= SET { | PDSParameter ::= SET { | |||
printable-string PrintableString | printable-string PrintableString | |||
(SIZE(1..ub-pds-parameter-length)) OPTIONAL, | (SIZE(1..ub-pds-parameter-length)) OPTIONAL, | |||
teletex-string TeletexString | teletex-string TeletexString | |||
(SIZE(1..ub-pds-parameter-length)) OPTIONAL } | (SIZE(1..ub-pds-parameter-length)) OPTIONAL } | |||
extended-network-address INTEGER ::= 22 | extended-network-address INTEGER ::= 22 | |||
skipping to change at page 122, line 11 ¶ | skipping to change at page 125, line 9 ¶ | |||
-- Note - upper bounds on string types, such as TeletexString, are | -- Note - upper bounds on string types, such as TeletexString, are | |||
-- measured in characters. Excepting PrintableString or IA5String, a | -- measured in characters. Excepting PrintableString or IA5String, a | |||
-- significantly greater number of octets will be required to hold | -- significantly greater number of octets will be required to hold | |||
-- such a value. As a minimum, 16 octets, or twice the specified | -- such a value. As a minimum, 16 octets, or twice the specified | |||
-- upper bound, whichever is the larger, should be allowed for | -- upper bound, whichever is the larger, should be allowed for | |||
-- TeletexString. For UTF8String or UniversalString at least four | -- TeletexString. For UTF8String or UniversalString at least four | |||
-- times the upper bound should be allowed. | -- times the upper bound should be allowed. | |||
END | END | |||
A.2 Implicitly Tagged Module, 1988 Syntax | A.2. Implicitly Tagged Module, 1988 Syntax | |||
PKIX1Implicit88 { iso(1) identified-organization(3) dod(6) internet(1) | PKIX1Implicit88 { iso(1) identified-organization(3) dod(6) internet(1) | |||
security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-implicit(19) } | security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-implicit(19) } | |||
DEFINITIONS IMPLICIT TAGS ::= | DEFINITIONS IMPLICIT TAGS ::= | |||
BEGIN | BEGIN | |||
-- EXPORTS ALL -- | -- EXPORTS ALL -- | |||
skipping to change at page 129, line 26 ¶ | skipping to change at page 133, line 16 ¶ | |||
id-ce-invalidityDate OBJECT IDENTIFIER ::= { id-ce 24 } | id-ce-invalidityDate OBJECT IDENTIFIER ::= { id-ce 24 } | |||
InvalidityDate ::= GeneralizedTime | InvalidityDate ::= GeneralizedTime | |||
END | END | |||
Appendix B. ASN.1 Notes | Appendix B. ASN.1 Notes | |||
CAs MUST force the serialNumber to be a non-negative integer, that | CAs MUST force the serialNumber to be a non-negative integer, that | |||
is, the sign bit in the DER encoding of the INTEGER value MUST be | is, the sign bit in the DER encoding of the INTEGER value MUST be | |||
zero - this can be done by adding a leading (leftmost) `00'H octet if | zero. This can be done by adding a leading (leftmost) `00'H octet if | |||
necessary. This removes a potential ambiguity in mapping between a | necessary. This removes a potential ambiguity in mapping between a | |||
string of octets and an integer value. | string of octets and an integer value. | |||
As noted in section 4.1.2.2, serial numbers can be expected to | As noted in Section 4.1.2.2, serial numbers can be expected to | |||
contain long integers. Certificate users MUST be able to handle | contain long integers. Certificate users MUST be able to handle | |||
serialNumber values up to 20 octets in length. Conforming CAs MUST | serialNumber values up to 20 octets in length. Conforming CAs MUST | |||
NOT use serialNumber values longer than 20 octets. | NOT use serialNumber values longer than 20 octets. | |||
As noted in section 5.2.3, CRL numbers can be expected to contain | As noted in Section 5.2.3, CRL numbers can be expected to contain | |||
long integers. CRL validators MUST be able to handle cRLNumber | long integers. CRL validators MUST be able to handle cRLNumber | |||
values up to 20 octets in length. Conforming CRL issuers MUST NOT | values up to 20 octets in length. Conforming CRL issuers MUST NOT | |||
use cRLNumber values longer than 20 octets. | use cRLNumber values longer than 20 octets. | |||
The construct "SEQUENCE SIZE (1..MAX) OF" appears in several ASN.1 | The construct "SEQUENCE SIZE (1..MAX) OF" appears in several ASN.1 | |||
constructs. A valid ASN.1 sequence will have zero or more entries. | constructs. A valid ASN.1 sequence will have zero or more entries. | |||
The SIZE (1..MAX) construct constrains the sequence to have at least | The SIZE (1..MAX) construct constrains the sequence to have at least | |||
one entry. MAX indicates the upper bound is unspecified. | one entry. MAX indicates that the upper bound is unspecified. | |||
Implementations are free to choose an upper bound that suits their | Implementations are free to choose an upper bound that suits their | |||
environment. | environment. | |||
The character string type PrintableString supports a very basic Latin | The character string type PrintableString supports a very basic Latin | |||
character set: the lower case letters 'a' through 'z', upper case | character set: the lowercase letters 'a' through 'z', uppercase | |||
letters 'A' through 'Z', the digits '0' through '9', eleven special | letters 'A' through 'Z', the digits '0' through '9', eleven special | |||
characters ' = ( ) + , - . / : ? and space. | characters ' = ( ) + , - . / : ? and space. | |||
Implementers should note that the at sign ('@') and underscore ('_') | Implementers should note that the at sign ('@') and underscore ('_') | |||
characters are not supported by the ASN.1 type PrintableString. | characters are not supported by the ASN.1 type PrintableString. | |||
These characters often appear in Internet addresses. Such addresses | These characters often appear in Internet addresses. Such addresses | |||
MUST be encoded using an ASN.1 type that supports them. They are | MUST be encoded using an ASN.1 type that supports them. They are | |||
usually encoded as IA5String in either the emailAddress attribute | usually encoded as IA5String in either the emailAddress attribute | |||
within a distinguished name or the rfc822Name field of GeneralName. | within a distinguished name or the rfc822Name field of GeneralName. | |||
Conforming implementations MUST NOT encode strings that include | Conforming implementations MUST NOT encode strings that include | |||
either the at sign or underscore character as PrintableString. | either the at sign or underscore character as PrintableString. | |||
The character string type TeletexString is a superset of | The character string type TeletexString is a superset of | |||
PrintableString. TeletexString supports a fairly standard (ASCII- | PrintableString. TeletexString supports a fairly standard (ASCII- | |||
like) Latin character set, Latin characters with non-spacing accents | like) Latin character set: Latin characters with non-spacing accents | |||
and Japanese characters. | and Japanese characters. | |||
Named bit lists are BIT STRINGs where the values have been assigned | Named bit lists are BIT STRINGs where the values have been assigned | |||
names. This specification makes use of named bit lists in the | names. This specification makes use of named bit lists in the | |||
definitions for the key usage, CRL distribution points and freshest | definitions for the key usage, CRL distribution points, and freshest | |||
CRL certificate extensions, as well as the freshest CRL and issuing | CRL certificate extensions, as well as the freshest CRL and issuing | |||
distribution point CRL extensions. When DER encoding a named bit | distribution point CRL extensions. When DER encoding a named bit | |||
list, trailing zeros MUST be omitted. That is, the encoded value | list, trailing zeros MUST be omitted. That is, the encoded value | |||
ends with the last named bit that is set to one. | ends with the last named bit that is set to one. | |||
The character string type UniversalString supports any of the | The character string type UniversalString supports any of the | |||
characters allowed by [ISO 10646]. ISO 10646 is the Universal | characters allowed by [ISO10646]. ISO 10646 is the Universal | |||
multiple-octet coded Character Set (UCS). | multiple-octet coded Character Set (UCS). | |||
The character string type UTF8String was introduced in the 1997 | The character string type UTF8String was introduced in the 1997 | |||
version of ASN.1, and UTF8String was added to the list of choices for | version of ASN.1, and UTF8String was added to the list of choices for | |||
DirectoryString in the 2001 version of [X.520]. UTF8String is a | DirectoryString in the 2001 version of [X.520]. UTF8String is a | |||
universal type and has been assigned tag number 12. The content of | universal type and has been assigned tag number 12. The content of | |||
UTF8String was defined by RFC 2044 and updated in RFC 2279, which was | UTF8String was defined by RFC 2044 and updated in RFC 2279, which was | |||
updated in [RFC 3629]. | updated in [RFC3629]. | |||
In anticipation of these changes, and in conformance with IETF Best | In anticipation of these changes, and in conformance with IETF Best | |||
Practices codified in [RFC 2277], IETF Policy on Character Sets and | Practices codified in [RFC2277], IETF Policy on Character Sets and | |||
Languages, this document includes UTF8String as a choice in | Languages, this document includes UTF8String as a choice in | |||
DirectoryString and in the userNotice certificate policy qualifier. | DirectoryString and in the userNotice certificate policy qualifier. | |||
For many of the attribute types defined in [X.520], the | For many of the attribute types defined in [X.520], the | |||
AttributeValue uses the DirectoryString type. Of the attributes | AttributeValue uses the DirectoryString type. Of the attributes | |||
specified in appendix A, the name, surname, givenName, initials, | specified in Appendix A, the name, surname, givenName, initials, | |||
generationQualifier, commonName, localityName, stateOrProvinceName, | generationQualifier, commonName, localityName, stateOrProvinceName, | |||
organizationName, organizationalUnitName, title, and pseudonym | organizationName, organizationalUnitName, title, and pseudonym | |||
attributes all use the DirectoryString type. X.520 uses a | attributes all use the DirectoryString type. X.520 uses a | |||
parameterized type definition [X.683] of DirectoryString to specify | parameterized type definition [X.683] of DirectoryString to specify | |||
the syntax for each of these attributes. The parameter is used to | the syntax for each of these attributes. The parameter is used to | |||
indicate the maximum string length allowed for the attribute. In | indicate the maximum string length allowed for the attribute. In | |||
appendix A, in order to avoid the use of parameterized type | Appendix A, in order to avoid the use of parameterized type | |||
definitions, the DirectoryString type written in its expanded form | definitions, the DirectoryString type is written in its expanded form | |||
for the definition of each of these attribute types. So, the ASN.1 | for the definition of each of these attribute types. So, the ASN.1 | |||
in appendix A describes the syntax for each of these attributes as | in Appendix A describes the syntax for each of these attributes as | |||
being a CHOICE of TeletexString, PrintableString, UniversalString, | being a CHOICE of TeletexString, PrintableString, UniversalString, | |||
UTF8String, and BMPString, with the appropriate constraints on the | UTF8String, and BMPString, with the appropriate constraints on the | |||
string length applied to each of the types in the CHOICE, rather than | string length applied to each of the types in the CHOICE, rather than | |||
using the ASN.1 type DirectoryString to describe the syntax. | using the ASN.1 type DirectoryString to describe the syntax. | |||
Implementers should note that the DER encoding of the SET OF values | Implementers should note that the DER encoding of the SET OF values | |||
requires ordering of the encodings of the values. In particular, | requires ordering of the encodings of the values. In particular, | |||
this issue arises with respect to distinguished names. | this issue arises with respect to distinguished names. | |||
Implementers should note that the DER encoding of SET or SEQUENCE | Implementers should note that the DER encoding of SET or SEQUENCE | |||
skipping to change at page 131, line 28 ¶ | skipping to change at page 135, line 21 ¶ | |||
encoded certificate or CRL. For example, a BasicConstraints | encoded certificate or CRL. For example, a BasicConstraints | |||
extension whose cA value is FALSE would omit the cA boolean from the | extension whose cA value is FALSE would omit the cA boolean from the | |||
encoded certificate. | encoded certificate. | |||
Object Identifiers (OIDs) are used throughout this specification to | Object Identifiers (OIDs) are used throughout this specification to | |||
identify certificate policies, public key and signature algorithms, | identify certificate policies, public key and signature algorithms, | |||
certificate extensions, etc. There is no maximum size for OIDs. | certificate extensions, etc. There is no maximum size for OIDs. | |||
This specification mandates support for OIDs that have arc elements | This specification mandates support for OIDs that have arc elements | |||
with values that are less than 2^28, that is, they MUST be between 0 | with values that are less than 2^28, that is, they MUST be between 0 | |||
and 268,435,455, inclusive. This allows each arc element to be | and 268,435,455, inclusive. This allows each arc element to be | |||
represented within a single 32 bit word. Implementations MUST also | represented within a single 32-bit word. Implementations MUST also | |||
support OIDs where the length of the dotted decimal (see [RFC 4512], | support OIDs where the length of the dotted decimal (see Section 1.4 | |||
section 1.4) string representation can be up to 100 bytes | of [RFC4512]) string representation can be up to 100 bytes | |||
(inclusive). Implementations MUST be able to handle OIDs with up to | (inclusive). Implementations MUST be able to handle OIDs with up to | |||
20 elements (inclusive). CAs SHOULD NOT issue certificates that | 20 elements (inclusive). CAs SHOULD NOT issue certificates that | |||
contain OIDs that exceed these requirements. Likewise, CRL issuers | contain OIDs that exceed these requirements. Likewise, CRL issuers | |||
SHOULD NOT issue CRLs that contain OIDs that exceed these | SHOULD NOT issue CRLs that contain OIDs that exceed these | |||
requirements. | requirements. | |||
The content specific rules for encoding GeneralName field values in | The content-specific rules for encoding GeneralName field values in | |||
the nameConstraints extension differ from rules that apply in other | the nameConstraints extension differ from rules that apply in other | |||
extensions. In all other certificate, CRL, and CRL entry extensions | extensions. In all other certificate, CRL, and CRL entry extensions | |||
specified in this document the encoding rules conform to the rules | specified in this document the encoding rules conform to the rules | |||
for the underlying type. For example, values in the | for the underlying type. For example, values in the | |||
uniformResourceIdentifier field must contain a valid URI as specified | uniformResourceIdentifier field must contain a valid URI as specified | |||
in [RFC 3986]. The content specific rules for encoding values in the | in [RFC3986]. The content-specific rules for encoding values in the | |||
nameConstraints extension are specified in section 4.2.1.10, and | nameConstraints extension are specified in Section 4.2.1.10, and | |||
these rules may not conform to the rules for the underlying type. | these rules may not conform to the rules for the underlying type. | |||
For example, when the uniformResourceIdentifier field appears in a | For example, when the uniformResourceIdentifier field appears in a | |||
nameConstraints extension, it must hold a DNS name (e.g., | nameConstraints extension, it must hold a DNS name (e.g., | |||
"host.example.com" or ".example.com") rather than a URI. | "host.example.com" or ".example.com") rather than a URI. | |||
Implementors are warned that the X.500 standards community has | Implementors are warned that the X.500 standards community has | |||
developed a series of extensibility rules. These rules determine | developed a series of extensibility rules. These rules determine | |||
when an ASN.1 definition can be changed without assigning a new | when an ASN.1 definition can be changed without assigning a new | |||
object identifier (OID). For example, at least two extension | Object Identifier (OID). For example, at least two extension | |||
definitions included in [RFC 2459], the predecessor to this profile | definitions included in [RFC2459], the predecessor to this profile | |||
document, have different ASN.1 definitions in this specification, but | document, have different ASN.1 definitions in this specification, but | |||
the same OID is used. If unknown elements appear within an | the same OID is used. If unknown elements appear within an | |||
extension, and the extension is not marked critical, those unknown | extension, and the extension is not marked as critical, those unknown | |||
elements ought to be ignored, as follows: | elements ought to be ignored, as follows: | |||
(a) ignore all unknown bit name assignments within a bit string; | (a) ignore all unknown bit name assignments within a bit string; | |||
(b) ignore all unknown named numbers in an ENUMERATED type or | (b) ignore all unknown named numbers in an ENUMERATED type or | |||
INTEGER type that is being used in the enumerated style, provided | INTEGER type that is being used in the enumerated style, | |||
the number occurs as an optional element of a SET or SEQUENCE; and | provided the number occurs as an optional element of a SET or | |||
SEQUENCE; and | ||||
(c) ignore all unknown elements in SETs, at the end of SEQUENCEs, | (c) ignore all unknown elements in SETs, at the end of SEQUENCEs, | |||
or in CHOICEs where the CHOICE is itself an optional element of a | or in CHOICEs where the CHOICE is itself an optional element | |||
SET or SEQUENCE. | of a SET or SEQUENCE. | |||
If an extension containing unexpected values is marked critical, the | If an extension containing unexpected values is marked as critical, | |||
implementation MUST reject the certificate or CRL containing the | the implementation MUST reject the certificate or CRL containing the | |||
unrecognized extension. | unrecognized extension. | |||
Appendix C. Examples | Appendix C. Examples | |||
This section contains four examples: three certificates and a CRL. | This appendix contains four examples: three certificates and a CRL. | |||
The first two certificates and the CRL comprise a minimal | The first two certificates and the CRL comprise a minimal | |||
certification path. | certification path. | |||
Section C.1 contains an annotated hex dump of a "self-signed" | Appendix C.1 contains an annotated hex dump of a "self-signed" | |||
certificate issued by a CA whose distinguished name is | certificate issued by a CA whose distinguished name is | |||
cn=Example CA,dc=example,dc=com. The certificate contains an RSA | cn=Example CA,dc=example,dc=com. The certificate contains an RSA | |||
public key, and is signed by the corresponding RSA private key. | public key, and is signed by the corresponding RSA private key. | |||
Section C.2 contains an annotated hex dump of an end entity | Appendix C.2 contains an annotated hex dump of an end entity | |||
certificate. The end entity certificate contains an RSA public key, | certificate. The end entity certificate contains an RSA public key, | |||
and is signed by the private key corresponding to the "self-signed" | and is signed by the private key corresponding to the "self-signed" | |||
certificate in section C.1. | certificate in Appendix C.1. | |||
Section C.3 contains an annotated hex dump of an end entity | Appendix C.3 contains an annotated hex dump of an end entity | |||
certificate that contains a DSA public key with parameters, and is | certificate that contains a DSA public key with parameters, and is | |||
signed with DSA and SHA-1. This certificate is not part of the | signed with DSA and SHA-1. This certificate is not part of the | |||
minimal certification path. | minimal certification path. | |||
Section C.4 contains an annotated hex dump of a CRL. The CRL is | Appendix C.4 contains an annotated hex dump of a CRL. The CRL is | |||
issued by the CA whose distinguished name is | issued by the CA whose distinguished name is | |||
cn=Example CA,dc=example,dc=com and the list of revoked certificates | cn=Example CA,dc=example,dc=com and the list of revoked certificates | |||
includes the end entity certificate presented in C.2. | includes the end entity certificate presented in Appendix C.2. | |||
The certificates were processed using Peter Gutmann's dumpasn1 | The certificates were processed using Peter Gutmann's dumpasn1 | |||
utility to generate the output. The source for the dumpasn1 utility | utility to generate the output. The source for the dumpasn1 utility | |||
is available at <http://www.cs.auckland.ac.nz/~pgut001/dumpasn1.c>. | is available at <http://www.cs.auckland.ac.nz/~pgut001/dumpasn1.c>. | |||
The binaries for the certificates and CRLs are available at | The binaries for the certificates and CRLs are available at | |||
http://csrc.nist.gov/groups/ST/crypto_apps_infra/documents/pkixtools. | http://csrc.nist.gov/groups/ST/crypto_apps_infra/documents/pkixtools. | |||
In places in this appendix where a distinguished name is specified | In places in this appendix where a distinguished name is specified | |||
using a string representation, the strings are formatted using the | using a string representation, the strings are formatted using the | |||
rules specified in [RFC 4514]. | rules specified in [RFC4514]. | |||
C.1 RSA Self-Signed Certificate | C.1. RSA Self-Signed Certificate | |||
This section contains an annotated hex dump of a 578 byte version 3 | This appendix contains an annotated hex dump of a 578 byte version 3 | |||
certificate. The certificate contains the following information: | certificate. The certificate contains the following information: | |||
(a) the serial number is 17; | (a) the serial number is 17; | |||
(b) the certificate is signed with RSA and the SHA-1 hash algorithm; | (b) the certificate is signed with RSA and the SHA-1 hash algorithm; | |||
(c) the issuer's distinguished name is | (c) the issuer's distinguished name is | |||
cn=Example CA,dc=example,dc=com; | cn=Example CA,dc=example,dc=com; | |||
(d) the subject's distinguished name is | (d) the subject's distinguished name is | |||
cn=Example CA,dc=example,dc=com; | cn=Example CA,dc=example,dc=com; | |||
(e) the certificate was issued on April 30, 2004 and expired on | (e) the certificate was issued on April 30, 2004 and expired on | |||
April 30, 2005; | April 30, 2005; | |||
(f) the certificate contains a 1024 bit RSA public key; | (f) the certificate contains a 1024-bit RSA public key; | |||
(g) the certificate contains a subject key identifier extension | (g) the certificate contains a subject key identifier extension | |||
generated using method (1) of section 4.2.1.2; and | generated using method (1) of Section 4.2.1.2; and | |||
(h) the certificate is a CA certificate (as indicated through the | (h) the certificate is a CA certificate (as indicated through the | |||
basic constraints extension.) | basic constraints extension). | |||
0 574: SEQUENCE { | 0 574: SEQUENCE { | |||
4 423: SEQUENCE { | 4 423: SEQUENCE { | |||
8 3: [0] { | 8 3: [0] { | |||
10 1: INTEGER 2 | 10 1: INTEGER 2 | |||
: } | : } | |||
13 1: INTEGER 17 | 13 1: INTEGER 17 | |||
16 13: SEQUENCE { | 16 13: SEQUENCE { | |||
18 9: OBJECT IDENTIFIER | 18 9: OBJECT IDENTIFIER | |||
: sha1withRSAEncryption (1 2 840 113549 1 1 5) | : sha1withRSAEncryption (1 2 840 113549 1 1 5) | |||
skipping to change at page 136, line 16 ¶ | skipping to change at page 140, line 10 ¶ | |||
: 6C F8 02 74 A6 61 E2 64 04 A6 54 0C 6C 72 13 AD | : 6C F8 02 74 A6 61 E2 64 04 A6 54 0C 6C 72 13 AD | |||
: 3C 47 FB F6 65 13 A9 85 90 33 EA 76 A3 26 D9 FC | : 3C 47 FB F6 65 13 A9 85 90 33 EA 76 A3 26 D9 FC | |||
: D1 0E 15 5F 28 B7 EF 93 BF 3C F3 E2 3E 7C B9 52 | : D1 0E 15 5F 28 B7 EF 93 BF 3C F3 E2 3E 7C B9 52 | |||
: FC 16 6E 29 AA E1 F4 7A 6F D5 7F EF B3 95 CA F3 | : FC 16 6E 29 AA E1 F4 7A 6F D5 7F EF B3 95 CA F3 | |||
: 66 88 83 4E A1 35 45 84 CB BC 9B B8 C8 AD C5 5E | : 66 88 83 4E A1 35 45 84 CB BC 9B B8 C8 AD C5 5E | |||
: 46 D9 0B 0E 8D 80 E1 33 2B DC BE 2B 92 7E 4A 43 | : 46 D9 0B 0E 8D 80 E1 33 2B DC BE 2B 92 7E 4A 43 | |||
: A9 6A EF 8A 63 61 B3 6E 47 38 BE E8 0D A3 67 5D | : A9 6A EF 8A 63 61 B3 6E 47 38 BE E8 0D A3 67 5D | |||
: F3 FA 91 81 3C 92 BB C5 5F 25 25 EB 7C E7 D8 A1 | : F3 FA 91 81 3C 92 BB C5 5F 25 25 EB 7C E7 D8 A1 | |||
: } | : } | |||
C.2 End Entity Certificate Using RSA | C.2. End Entity Certificate Using RSA | |||
This section contains an annotated hex dump of a 629 byte version 3 | This appendix contains an annotated hex dump of a 629-byte version 3 | |||
certificate. The certificate contains the following information: | certificate. The certificate contains the following information: | |||
(a) the serial number is 18; | (a) the serial number is 18; | |||
(b) the certificate is signed with RSA and the SHA-1 hash algorithm; | (b) the certificate is signed with RSA and the SHA-1 hash algorithm; | |||
(c) the issuer's distinguished name is | (c) the issuer's distinguished name is | |||
cn=Example CA,dc=example,dc=com; | cn=Example CA,dc=example,dc=com; | |||
(d) the subject's distinguished name is | (d) the subject's distinguished name is | |||
cn=End Entity,dc=example,dc=com; | cn=End Entity,dc=example,dc=com; | |||
(e) the certificate was valid from September 15, 2004 through March | (e) the certificate was valid from September 15, 2004 through March | |||
15, 2005; | 15, 2005; | |||
(f) the certificate contains a 1024 bit RSA public key; | (f) the certificate contains a 1024-bit RSA public key; | |||
(g) the certificate is an end entity certificate, as the basic | (g) the certificate is an end entity certificate, as the basic | |||
constraints extension is not present; | constraints extension is not present; | |||
(h) the certificate contains an authority key identifier extension | (h) the certificate contains an authority key identifier extension | |||
matching the subject key identifier of the certificate in | matching the subject key identifier of the certificate in | |||
appendix C.1; and | appendix C.1; and | |||
(i) the certificate includes one alternative name - an electronic | (i) the certificate includes one alternative name -- an electronic | |||
mail address (rfc822Name) of "end.entity@example.com". | mail address (rfc822Name) of "end.entity@example.com". | |||
0 625: SEQUENCE { | 0 625: SEQUENCE { | |||
4 474: SEQUENCE { | 4 474: SEQUENCE { | |||
8 3: [0] { | 8 3: [0] { | |||
10 1: INTEGER 2 | 10 1: INTEGER 2 | |||
: } | : } | |||
13 1: INTEGER 18 | 13 1: INTEGER 18 | |||
16 13: SEQUENCE { | 16 13: SEQUENCE { | |||
18 9: OBJECT IDENTIFIER | 18 9: OBJECT IDENTIFIER | |||
skipping to change at page 139, line 32 ¶ | skipping to change at page 143, line 25 ¶ | |||
: 00 20 28 34 5B 68 32 01 BB 0A 36 0E AD 71 C5 95 | : 00 20 28 34 5B 68 32 01 BB 0A 36 0E AD 71 C5 95 | |||
: 1A E1 04 CF AE AD C7 62 14 A4 1B 36 31 C0 E2 0C | : 1A E1 04 CF AE AD C7 62 14 A4 1B 36 31 C0 E2 0C | |||
: 3D D9 1E C0 00 DC 10 A0 BA 85 6F 41 CB 62 7A B7 | : 3D D9 1E C0 00 DC 10 A0 BA 85 6F 41 CB 62 7A B7 | |||
: 4C 63 81 26 5E D2 80 45 5E 33 E7 70 45 3B 39 3B | : 4C 63 81 26 5E D2 80 45 5E 33 E7 70 45 3B 39 3B | |||
: 26 4A 9C 3B F2 26 36 69 08 79 BB FB 96 43 77 4B | : 26 4A 9C 3B F2 26 36 69 08 79 BB FB 96 43 77 4B | |||
: 61 8B A1 AB 91 64 E0 F3 37 61 3C 1A A3 A4 C9 8A | : 61 8B A1 AB 91 64 E0 F3 37 61 3C 1A A3 A4 C9 8A | |||
: B2 BF 73 D4 4D E4 58 E4 62 EA BC 20 74 92 86 0E | : B2 BF 73 D4 4D E4 58 E4 62 EA BC 20 74 92 86 0E | |||
: CE 84 60 76 E9 73 BB C7 85 D3 91 45 EA 62 5D CD | : CE 84 60 76 E9 73 BB C7 85 D3 91 45 EA 62 5D CD | |||
: } | : } | |||
C.3 End Entity Certificate Using DSA | C.3. End Entity Certificate Using DSA | |||
This section contains an annotated hex dump of a 914 byte version 3 | This appendix contains an annotated hex dump of a 914-byte version 3 | |||
certificate. The certificate contains the following information: | certificate. The certificate contains the following information: | |||
(a) the serial number is 256; | (a) the serial number is 256; | |||
(b) the certificate is signed with DSA and the SHA-1 hash algorithm; | (b) the certificate is signed with DSA and the SHA-1 hash algorithm; | |||
(c) the issuer's distinguished name is | ||||
cn=Example DSA CA,dc=example,dc=com; | (c) the issuer's distinguished name is cn=Example DSA | |||
(d) the subject's distinguished name is | CA,dc=example,dc=com; | |||
cn=DSA End Entity,dc=example,dc=com; | ||||
(e) the certificate was issued on May 2, 2004 and expired on | (d) the subject's distinguished name is cn=DSA End | |||
May 2, 2005; | Entity,dc=example,dc=com; | |||
(f) the certificate contains a 1024 bit DSA public key with | ||||
(e) the certificate was issued on May 2, 2004 and expired on May 2, | ||||
2005; | ||||
(f) the certificate contains a 1024-bit DSA public key with | ||||
parameters; | parameters; | |||
(g) the certificate is an end entity certificate (not a CA | (g) the certificate is an end entity certificate (not a CA | |||
certificate); | certificate); | |||
(h) the certificate includes a subject alternative name of | (h) the certificate includes a subject alternative name of | |||
"<http://www.example.com/users/DSAendentity.html>" and an | "<http://www.example.com/users/DSAendentity.html>" and an issuer | |||
issuer alternative name of "<http://www.example.com>" - both are | alternative name of "<http://www.example.com>" -- both are URLs; | |||
URLs; | ||||
(i) the certificate includes an authority key identifier extension | (i) the certificate includes an authority key identifier extension | |||
and a certificate policies extension specifying the policy OID | and a certificate policies extension specifying the policy OID | |||
2.16.840.1.101.3.2.1.48.9; and | 2.16.840.1.101.3.2.1.48.9; and | |||
(j) the certificate includes a critical key usage extension | (j) the certificate includes a critical key usage extension | |||
specifying that the public key is intended for verification of | specifying that the public key is intended for verification of | |||
digital signatures. | digital signatures. | |||
0 910: SEQUENCE { | 0 910: SEQUENCE { | |||
4 846: SEQUENCE { | 4 846: SEQUENCE { | |||
8 3: [0] { | 8 3: [0] { | |||
10 1: INTEGER 2 | 10 1: INTEGER 2 | |||
: } | : } | |||
13 2: INTEGER 256 | 13 2: INTEGER 256 | |||
skipping to change at page 142, line 21 ¶ | skipping to change at page 146, line 22 ¶ | |||
: } | : } | |||
: } | : } | |||
649 202: [3] { | 649 202: [3] { | |||
652 199: SEQUENCE { | 652 199: SEQUENCE { | |||
655 57: SEQUENCE { | 655 57: SEQUENCE { | |||
657 3: OBJECT IDENTIFIER subjectAltName (2 5 29 17) | 657 3: OBJECT IDENTIFIER subjectAltName (2 5 29 17) | |||
662 50: OCTET STRING, encapsulates { | 662 50: OCTET STRING, encapsulates { | |||
664 48: SEQUENCE { | 664 48: SEQUENCE { | |||
666 46: [6] | 666 46: [6] | |||
: 'http://www.example.com/users/DSAendentity.' | : 'http://www.example.com/users/DSAendentity.' | |||
: 'html' | : 'html' | |||
: } | : } | |||
: } | : } | |||
: } | : } | |||
714 33: SEQUENCE { | 714 33: SEQUENCE { | |||
716 3: OBJECT IDENTIFIER issuerAltName (2 5 29 18) | 716 3: OBJECT IDENTIFIER issuerAltName (2 5 29 18) | |||
721 26: OCTET STRING, encapsulates { | 721 26: OCTET STRING, encapsulates { | |||
723 24: SEQUENCE { | 723 24: SEQUENCE { | |||
725 22: [6] 'http://www.example.com' | 725 22: [6] 'http://www.example.com' | |||
: } | : } | |||
: } | : } | |||
skipping to change at page 143, line 41 ¶ | skipping to change at page 147, line 41 ¶ | |||
870 20: INTEGER | 870 20: INTEGER | |||
: 65 57 07 34 DD DC CA CC 5E F4 02 F4 56 42 2C 5E | : 65 57 07 34 DD DC CA CC 5E F4 02 F4 56 42 2C 5E | |||
: E1 B3 3B 80 | : E1 B3 3B 80 | |||
892 20: INTEGER | 892 20: INTEGER | |||
: 60 F4 31 17 CA F4 CF FF EE F4 08 A7 D9 B2 61 BE | : 60 F4 31 17 CA F4 CF FF EE F4 08 A7 D9 B2 61 BE | |||
: B1 C3 DA BF | : B1 C3 DA BF | |||
: } | : } | |||
: } | : } | |||
: } | : } | |||
C.4 Certificate Revocation List | C.4. Certificate Revocation List | |||
This section contains an annotated hex dump of a version 2 CRL with | This appendix contains an annotated hex dump of a version 2 CRL with | |||
two extensions (cRLNumber and authorityKeyIdentifier). The CRL was | two extensions (cRLNumber and authorityKeyIdentifier). The CRL was | |||
issued by cn=Example CA,dc=example,dc=com on February 5, 2005; the | issued by cn=Example CA,dc=example,dc=com on February 5, 2005; the | |||
next scheduled issuance was February 6, 2005. The CRL includes one | next scheduled issuance was February 6, 2005. The CRL includes one | |||
revoked certificate: serial number 18, which was revoked on November | revoked certificate: serial number 18, which was revoked on November | |||
19, 2004 due to keyCompromise. The CRL itself is number 12, and it | 19, 2004 due to keyCompromise. The CRL itself is number 12, and it | |||
was signed with RSA and SHA-1. | was signed with RSA and SHA-1. | |||
0 352: SEQUENCE { | 0 352: SEQUENCE { | |||
4 202: SEQUENCE { | 4 202: SEQUENCE { | |||
7 1: INTEGER 1 | 7 1: INTEGER 1 | |||
skipping to change at page 145, line 40 ¶ | skipping to change at page 150, line 5 ¶ | |||
: 22 DC 18 7D F7 08 CE CC 75 D0 D0 6A 9B AD 10 F4 | : 22 DC 18 7D F7 08 CE CC 75 D0 D0 6A 9B AD 10 F4 | |||
: 76 23 B4 81 6E B5 6D BE 0E FB 15 14 6C C8 17 6D | : 76 23 B4 81 6E B5 6D BE 0E FB 15 14 6C C8 17 6D | |||
: 1F EE 90 17 A2 6F 60 E4 BD AA 8C 55 DE 8E 84 6F | : 1F EE 90 17 A2 6F 60 E4 BD AA 8C 55 DE 8E 84 6F | |||
: 92 F8 9F 10 12 27 AF 4A D4 2F 85 E2 36 44 7D AA | : 92 F8 9F 10 12 27 AF 4A D4 2F 85 E2 36 44 7D AA | |||
: A3 4C 25 38 15 FF 00 FD 3E 7E EE 3D 26 12 EB D8 | : A3 4C 25 38 15 FF 00 FD 3E 7E EE 3D 26 12 EB D8 | |||
: E7 2B 62 E2 2B C3 46 80 EF 78 82 D1 15 C6 D0 9C | : E7 2B 62 E2 2B C3 46 80 EF 78 82 D1 15 C6 D0 9C | |||
: 72 6A CB CE 7A ED 67 99 8B 6E 70 81 7D 43 42 74 | : 72 6A CB CE 7A ED 67 99 8B 6E 70 81 7D 43 42 74 | |||
: C1 A6 AF C1 55 17 A2 33 4C D6 06 98 2B A4 FC 2E | : C1 A6 AF C1 55 17 A2 33 4C D6 06 98 2B A4 FC 2E | |||
: } | : } | |||
Authors' Addresses | ||||
David Cooper | ||||
National Institute of Standards and Technology | ||||
100 Bureau Drive, Mail Stop 8930 | ||||
Gaithersburg, MD 20899-8930 | ||||
USA | ||||
EMail: david.cooper@nist.gov | ||||
Stefan Santesson | ||||
Microsoft | ||||
One Microsoft Way | ||||
Redmond, WA 98052 | ||||
USA | ||||
EMail: stefans@microsoft.com | ||||
Stephen Farrell | ||||
Distributed Systems Group | ||||
Computer Science Department | ||||
Trinity College Dublin | ||||
Ireland | ||||
EMail: stephen.farrell@cs.tcd.ie | ||||
Sharon Boeyen | ||||
Entrust | ||||
1000 Innovation Drive | ||||
Ottawa, Ontario | ||||
Canada K2K 3E7 | ||||
EMail: sharon.boeyen@entrust.com | ||||
Russell Housley | ||||
Vigil Security, LLC | ||||
918 Spring Knoll Drive | ||||
Herndon, VA 20170 | ||||
USA | ||||
EMail: housley@vigilsec.com | ||||
Tim Polk | ||||
National Institute of Standards and Technology | ||||
100 Bureau Drive, Mail Stop 8930 | ||||
Gaithersburg, MD 20899-8930 | ||||
USA | ||||
EMail: wpolk@nist.gov | ||||
Full Copyright Statement | Full Copyright Statement | |||
Copyright (C) The IETF Trust (2008). | Copyright (C) The IETF Trust (2008). | |||
This document is subject to the rights, licenses and restrictions | This document is subject to the rights, licenses and restrictions | |||
contained in BCP 78, and except as set forth therein, the authors | contained in BCP 78, and except as set forth therein, the authors | |||
retain all their rights. | retain all their rights. | |||
This document and the information contained herein are provided on an | This document and the information contained herein are provided on an | |||
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS | "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS | |||
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND | OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND | |||
THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS | THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS | |||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF | OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF | |||
THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED | THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED | |||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | |||
This document and translations of it may be copied and furnished to | Intellectual Property | |||
others, and derivative works that comment on or otherwise explain it | ||||
or assist in its implementation may be prepared, copied, published | The IETF takes no position regarding the validity or scope of any | |||
and distributed, in whole or in part, without restriction of any | Intellectual Property Rights or other rights that might be claimed to | |||
kind, provided that the above copyright notice and this paragraph are | pertain to the implementation or use of the technology described in | |||
included on all such copies and derivative works. In addition, the | this document or the extent to which any license under such rights | |||
ASN.1 modules presented may be used in whole or in part without | might or might not be available; nor does it represent that it has | |||
inclusion of the copyright notice. However, this document itself may | made any independent effort to identify any such rights. Information | |||
not be modified in any way, such as by removing the copyright notice | on the procedures with respect to rights in RFC documents can be | |||
or references to the Internet Society or other Internet | found in BCP 78 and BCP 79. | |||
organizations, except as needed for the purpose of developing | ||||
Internet standards in which case the procedures for copyrights | Copies of IPR disclosures made to the IETF Secretariat and any | |||
defined in the Internet Standards process shall be followed, or as | assurances of licenses to be made available, or the result of an | |||
required to translate it into languages other than English. | attempt made to obtain a general license or permission for the use of | |||
such proprietary rights by implementers or users of this | ||||
specification can be obtained from the IETF on-line IPR repository at | ||||
http://www.ietf.org/ipr. | ||||
The IETF invites any interested party to bring to its attention any | ||||
copyrights, patents or patent applications, or other proprietary | ||||
rights that may cover technology that may be required to implement | ||||
this standard. Please address the information to the IETF at | ||||
ietf-ipr@ietf.org. | ||||
End of changes. 610 change blocks. | ||||
1592 lines changed or deleted | 1596 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |