| < draft-ietf-pkix-new-part1-02.txt | draft-ietf-pkix-new-part1-03.txt > | |||
|---|---|---|---|---|
| PKIX Working Group R. Housley (SPYRUS) | PKIX Working Group R. Housley (SPYRUS) | |||
| Internet Draft W. Ford (VeriSign) | Internet Draft W. Ford (VeriSign) | |||
| W. Polk (NIST) | W. Polk (NIST) | |||
| D. Solo (Citigroup) | D. Solo (Citigroup) | |||
| expires in six months July 14, 2000 | expires in six months November, 2000 | |||
| Internet X.509 Public Key Infrastructure | Internet X.509 Public Key Infrastructure | |||
| Certificate and CRL Profile | Certificate and CRL Profile | |||
| <draft-ietf-pkix-new-part1-02.txt> | <draft-ietf-pkix-new-part1-03.txt> | |||
| Status of this Memo | Status of this Memo | |||
| This document is an Internet-Draft and is in full conformance with | This document is an Internet-Draft and is in full conformance with | |||
| all provisions of Section 10 of RFC2026. Internet-Drafts are working | all provisions of Section 10 of RFC2026. Internet-Drafts are working | |||
| documents of the Internet Engineering Task Force (IETF), its areas, | documents of the Internet Engineering Task Force (IETF), its areas, | |||
| and its working groups. Note that other groups may also distribute | and its working groups. Note that other groups may also distribute | |||
| working documents as Internet-Drafts. | working documents as Internet-Drafts. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| skipping to change at page 3, line 27 ¶ | skipping to change at page 3, line 27 ¶ | |||
| 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 .............. 15 | 4 Certificate and Certificate Extensions Profile .............. 15 | |||
| 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 ........................................ 17 | |||
| 4.1.1.2 signatureAlgorithm .................................... 17 | 4.1.1.2 signatureAlgorithm .................................... 17 | |||
| 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 ............................................... 18 | 4.1.2.1 Version ............................................... 18 | |||
| 4.1.2.2 Serial number ......................................... 18 | 4.1.2.2 Serial number ......................................... 19 | |||
| 4.1.2.3 Signature ............................................. 19 | 4.1.2.3 Signature ............................................. 19 | |||
| 4.1.2.4 Issuer ................................................ 19 | 4.1.2.4 Issuer ................................................ 19 | |||
| 4.1.2.5 Validity .............................................. 22 | 4.1.2.5 Validity .............................................. 23 | |||
| 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 ............................................... 24 | |||
| 4.1.2.7 Subject Public Key Info ............................... 24 | 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 ............................................. 25 | |||
| 4.2 Certificate Extensions .................................... 26 | 4.2 Certificate Extensions .................................... 26 | |||
| 4.2.1 Standard Extensions ..................................... 26 | 4.2.1 Standard Extensions ..................................... 26 | |||
| 4.2.1.1 Authority Key Identifier .............................. 26 | 4.2.1.1 Authority Key Identifier .............................. 27 | |||
| 4.2.1.2 Subject Key Identifier ................................ 27 | 4.2.1.2 Subject Key Identifier ................................ 27 | |||
| 4.2.1.3 Key Usage ............................................. 28 | 4.2.1.3 Key Usage ............................................. 28 | |||
| 4.2.1.4 Private Key Usage Period .............................. 30 | 4.2.1.4 Private Key Usage Period .............................. 30 | |||
| 4.2.1.5 Certificate Policies .................................. 30 | 4.2.1.5 Certificate Policies .................................. 31 | |||
| 4.2.1.6 Policy Mappings ....................................... 33 | 4.2.1.6 Policy Mappings ....................................... 33 | |||
| 4.2.1.7 Subject Alternative Name .............................. 33 | 4.2.1.7 Subject Alternative Name .............................. 34 | |||
| 4.2.1.8 Issuer Alternative Name ............................... 36 | 4.2.1.8 Issuer Alternative Name ............................... 36 | |||
| 4.2.1.9 Subject Directory Attributes .......................... 36 | 4.2.1.9 Subject Directory Attributes .......................... 37 | |||
| 4.2.1.10 Basic Constraints .................................... 36 | 4.2.1.10 Basic Constraints .................................... 37 | |||
| 4.2.1.11 Name Constraints ..................................... 37 | 4.2.1.11 Name Constraints ..................................... 38 | |||
| 4.2.1.12 Policy Constraints ................................... 39 | 4.2.1.12 Policy Constraints ................................... 40 | |||
| 4.2.1.13 Extended key usage field ............................. 40 | 4.2.1.13 Extended key usage field ............................. 41 | |||
| 4.2.1.14 CRL Distribution Points .............................. 41 | 4.2.1.14 CRL Distribution Points .............................. 42 | |||
| 4.2.1.15 Inhibit Any-Policy ................................... 42 | 4.2.1.15 Inhibit Any-Policy ................................... 43 | |||
| 4.2.1.16 Freshest CRL ......................................... 43 | 4.2.1.16 Freshest CRL ......................................... 43 | |||
| 4.2.2 Internet Certificate Extensions ......................... 43 | 4.2.2 Internet Certificate Extensions ......................... 44 | |||
| 4.2.2.1 Authority Information Access .......................... 43 | 4.2.2.1 Authority Information Access .......................... 44 | |||
| 5 CRL and CRL Extensions Profile .............................. 45 | 4.2.2.2 Subject Information Access ............................ 45 | |||
| 5.1 CRL Fields ................................................ 45 | 5 CRL and CRL Extensions Profile .............................. 47 | |||
| 5.1.1 CertificateList Fields .................................. 46 | 5.1 CRL Fields ................................................ 47 | |||
| 5.1.1.1 tbsCertList ........................................... 46 | 5.1.1 CertificateList Fields .................................. 48 | |||
| 5.1.1.2 signatureAlgorithm .................................... 46 | 5.1.1.1 tbsCertList ........................................... 48 | |||
| 5.1.1.3 signatureValue ........................................ 47 | 5.1.1.2 signatureAlgorithm .................................... 48 | |||
| 5.1.2 Certificate List "To Be Signed" ......................... 47 | 5.1.1.3 signatureValue ........................................ 49 | |||
| 5.1.2.1 Version ............................................... 47 | 5.1.2 Certificate List "To Be Signed" ......................... 49 | |||
| 5.1.2.2 Signature ............................................. 47 | 5.1.2.1 Version ............................................... 49 | |||
| 5.1.2.3 Issuer Name ........................................... 47 | 5.1.2.2 Signature ............................................. 49 | |||
| 5.1.2.4 This Update ........................................... 48 | 5.1.2.3 Issuer Name ........................................... 50 | |||
| 5.1.2.5 Next Update ........................................... 48 | 5.1.2.4 This Update ........................................... 50 | |||
| 5.1.2.6 Revoked Certificates .................................. 48 | 5.1.2.5 Next Update ........................................... 50 | |||
| 5.1.2.7 Extensions ............................................ 49 | 5.1.2.6 Revoked Certificates .................................. 51 | |||
| 5.2 CRL Extensions ............................................ 49 | 5.1.2.7 Extensions ............................................ 51 | |||
| 5.2.1 Authority Key Identifier ................................ 49 | 5.2 CRL Extensions ............................................ 51 | |||
| 5.2.2 Issuer Alternative Name ................................. 49 | 5.2.1 Authority Key Identifier ................................ 51 | |||
| 5.2.3 CRL Number .............................................. 50 | 5.2.2 Issuer Alternative Name ................................. 52 | |||
| 5.2.4 Delta CRL Indicator ..................................... 50 | 5.2.3 CRL Number .............................................. 52 | |||
| 5.2.5 Issuing Distribution Point .............................. 52 | 5.2.4 Delta CRL Indicator ..................................... 52 | |||
| 5.2.6 Freshest CRL ............................................ 53 | 5.2.5 Issuing Distribution Point .............................. 54 | |||
| 5.3 CRL Entry Extensions ...................................... 53 | 5.2.6 Freshest CRL ............................................ 55 | |||
| 5.3.1 Reason Code ............................................. 53 | 5.3 CRL Entry Extensions ...................................... 55 | |||
| 5.3.2 Hold Instruction Code ................................... 54 | 5.3.1 Reason Code ............................................. 56 | |||
| 5.3.3 Invalidity Date ......................................... 54 | 5.3.2 Hold Instruction Code ................................... 56 | |||
| 5.3.4 Certificate Issuer ...................................... 55 | 5.3.3 Invalidity Date ......................................... 57 | |||
| 6 Certificate Path Validation ................................. 55 | 5.3.4 Certificate Issuer ...................................... 57 | |||
| 6.1 Basic Path Validation ..................................... 56 | 6 Certificate Path Validation ................................. 58 | |||
| 6.1.1 Inputs ................................................... 58 | 6.1 Basic Path Validation ..................................... 58 | |||
| 6.1.2 Initialization ........................................... 59 | 6.1.1 Inputs ................................................... 61 | |||
| 6.1.3 Basic Certificate Processing ............................. 62 | 6.1.2 Initialization ........................................... 62 | |||
| 6.1.4 Preparation for Certificate i+1 .......................... 67 | 6.1.3 Basic Certificate Processing ............................. 65 | |||
| 6.1.5 Wrap-up procedure ........................................ 70 | 6.1.4 Preparation for Certificate i+1 .......................... 70 | |||
| 6.1.6 Outputs .................................................. 71 | 6.1.5 Wrap-up procedure ........................................ 73 | |||
| 6.2 Extending Path Validation ................................. 71 | 6.1.6 Outputs .................................................. 74 | |||
| 6.3 CRL Validation ............................................ 72 | 6.2 Extending Path Validation ................................. 75 | |||
| 6.3.1 Revocation Inputs ....................................... 72 | 6.3 CRL Validation ............................................ 75 | |||
| 6.3.2 Initialization and Revocation State Variables ........... 72 | 6.3.1 Revocation Inputs ....................................... 76 | |||
| 6.3.3 CRL Processing .......................................... 73 | 6.3.2 Initialization and Revocation State Variables ........... 76 | |||
| 7 References .................................................. 75 | 6.3.3 CRL Processing .......................................... 77 | |||
| 8 Intellectual Property Rights ................................ 77 | 7 References .................................................. 79 | |||
| 9 Security Considerations ..................................... 77 | 8 Intellectual Property Rights ................................ 81 | |||
| Appendix A. ASN.1 Structures and OIDs ......................... 81 | 9 Security Considerations ..................................... 81 | |||
| A.1 Explicitly Tagged Module, 1988 Syntax ...................... 81 | Appendix A. ASN.1 Structures and OIDs ......................... 84 | |||
| A.2 Implicitly Tagged Module, 1988 Syntax ...................... 94 | A.1 Explicitly Tagged Module, 1988 Syntax ...................... 84 | |||
| Appendix B. ASN.1 Notes ....................................... 101 | A.2 Implicitly Tagged Module, 1988 Syntax ...................... 97 | |||
| Appendix C. Examples .......................................... 102 | Appendix B. ASN.1 Notes ....................................... 104 | |||
| C.1 Certificate ............................................... 103 | Appendix C. Examples .......................................... 105 | |||
| C.2 Certificate ............................................... 106 | C.1 Certificate ............................................... 106 | |||
| C.3 End-Entity Certificate Using RSA .......................... 109 | C.2 Certificate ............................................... 108 | |||
| C.4 Certificate Revocation List ............................... 112 | C.3 End-Entity Certificate Using RSA .......................... 112 | |||
| Appendix D. Author Addresses .................................. 114 | C.4 Certificate Revocation List ............................... 115 | |||
| Appendix E. Full Copyright Statement .......................... 114 | Appendix D. Author Addresses .................................. 117 | |||
| Appendix E. Full Copyright Statement .......................... 117 | ||||
| 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. This specification | Public Key Infrastructure (PKI) for the Internet. This specification | |||
| is a standalone document; implementations of this standard may | is a standalone document; implementations of this standard may | |||
| proceed independent from the other parts. | proceed independent from the other parts. | |||
| This specification profiles the format and semantics of certificates | This specification profiles the format and semantics of certificates | |||
| and certificate revocation lists for the Internet PKI. Procedures | and certificate revocation lists for the Internet PKI. Procedures | |||
| are described for processing of certification paths in the Internet | are described for processing of certification paths in the Internet | |||
| environment. Encoding rules are provided for popular cryptographic | environment. Encoding rules are provided for popular cryptographic | |||
| algorithms. Finally, ASN.1 modules are provided in the appendices | algorithms. Finally, ASN.1 modules are provided in the appendices | |||
| for all data structures defined or referenced. | for all data structures defined or referenced. | |||
| The specification describes the requirements which inspire the crea- | The specification describes the requirements which inspire the | |||
| tion of this document and the assumptions which affect its scope in | creation of this document and the assumptions which affect its scope | |||
| Section 2. Section 3 presents an architectural model and describes | in Section 2. Section 3 presents an architectural model and | |||
| its relationship to previous IETF and ISO/IEC/ITU standards. In par- | describes its relationship to previous IETF and ISO/IEC/ITU | |||
| ticular, this document's relationship with the IETF PEM specifica- | standards. In particular, this document's relationship with the IETF | |||
| tions and the ISO/IEC/ITU X.509 documents are described. | PEM specifications and the ISO/IEC/ITU X.509 documents are described. | |||
| The specification profiles the X.509 version 3 certificate in Section | The specification profiles the X.509 version 3 certificate in Section | |||
| 4, and the X.509 version 2 certificate revocation list (CRL) in Sec- | 4, and the X.509 version 2 certificate revocation list (CRL) in | |||
| tion 5. The profiles include the identification of ISO/IEC/ITU and | Section 5. The profiles include the identification of ISO/IEC/ITU | |||
| ANSI extensions which may be useful in the Internet PKI. The profiles | and ANSI extensions which may be useful in the Internet PKI. The | |||
| are presented in the 1988 Abstract Syntax Notation One (ASN.1) rather | profiles are presented in the 1988 Abstract Syntax Notation One | |||
| than the 1994 syntax used in the ISO/IEC/ITU standards. | (ASN.1) rather than the 1994 syntax used in the ISO/IEC/ITU | |||
| standards. | ||||
| This specification also includes path validation procedures in Sec- | This specification also includes path validation procedures in | |||
| tion 6. These procedures are based upon the ISO/IEC/ITU definition, | Section 6. These procedures are based upon the ISO/IEC/ITU | |||
| but the presentation assumes one or more self-signed trusted CA cer- | definition, but the presentation assumes one or more self-signed | |||
| tificates. Implementations are required to derive the same results | trusted CA certificates. Implementations are required to derive the | |||
| but are not required to use the specified procedures. | same results but are not 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 [PKIX ALGS]. Implementations of | and digital signatures are defined in [PKIX ALGS]. Implementations of | |||
| this specification are not required to use any particular crypto- | this specification are not required to use any particular | |||
| graphic algorithms. However, conforming implementations which use | cryptographic algorithms. However, conforming implementations which | |||
| the algorithms identified in [PKIX ALGS] are required to identify and | use the algorithms identified in [PKIX ALGS] are required to identify | |||
| encode the public key materials and digital signatures as described | and encode the public key materials and digital signatures as | |||
| in that specification. | described in that specification. | |||
| 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 | |||
| Abstract Syntax Notation One (ASN.1) rather than the 1994 syntax. | Abstract Syntax Notation One (ASN.1) rather than the 1994 syntax. | |||
| 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 | notation used within this specification. Appendix C contains | |||
| examples of a conforming certificate and a conforming CRL. | examples of a conforming certificate and a conforming CRL. | |||
| 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 applica- | communities wishing to make use of X.509 technology. Such | |||
| tions may include WWW, electronic mail, user authentication, and | applications may include WWW, electronic mail, user authentication, | |||
| IPsec. In order to relieve some of the obstacles to using X.509 cer- | and IPsec. In order to relieve some of the obstacles to using X.509 | |||
| tificates, this document defines a profile to promote the development | certificates, this document defines a profile to promote the | |||
| of certificate management systems; development of application tools; | development of certificate management systems; development of | |||
| 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 revo- | regard to the issuer of a particular certificate or certificate | |||
| cation list (CRL). | revocation list (CRL). | |||
| A certificate user should review the certificate policy generated by | A certificate user should review the certificate policy generated by | |||
| the certification authority (CA) before relying on the authentication | the certification authority (CA) before relying on the authentication | |||
| or non-repudiation services associated with the public key in a par- | or non-repudiation services associated with the public key in a | |||
| ticular certificate. To this end, this standard does not prescribe | particular certificate. To this end, this standard does not | |||
| 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 con- | other management tools may provide more appropriate methods of | |||
| veying 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 environ- | The users of certificates will operate in a wide range of | |||
| ments with respect to their communication topology, especially users | environments with respect to their communication topology, especially | |||
| of secure electronic mail. This profile supports users without high | users of secure electronic mail. This profile supports users without | |||
| bandwidth, real-time IP connectivity, or high connection availabil- | high bandwidth, real-time IP connectivity, or high connection | |||
| ity. In addition, the profile allows for the presence of firewall or | availability. In addition, the profile allows for the presence of | |||
| 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. The profile does not prohibit the use of an X.500 Directory, | system. The profile does not prohibit the use of an X.500 Directory, | |||
| but other means of distributing certificates and certificate revoca- | but other means of distributing certificates and certificate | |||
| tion lists (CRLs) may be used. | revocation lists (CRLs) may 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 ser- | access control, and authorization functions. Support for these | |||
| vices determines the attributes contained in the certificate as well | services determines the attributes contained in the certificate as | |||
| as the ancillary control information in the certificate such as pol- | well as the ancillary control information in the certificate such as | |||
| icy 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 configura- | users themselves. This manifests itself in minimal user | |||
| tion responsibility (e.g., trusted CA keys, rules), explicit platform | configuration responsibility (e.g., trusted CA keys, rules), explicit | |||
| usage constraints within the certificate, certification path con- | platform usage constraints within the certificate, certification path | |||
| straints which shield the user from many malicious actions, and | constraints which shield the user from many malicious actions, and | |||
| applications which sensibly automate validation functions. | applications which 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 shall | Also, unbounded choices greatly complicate the software that shall | |||
| process and validate the certificates created by the CA. | process and validate the certificates created by the CA. | |||
| skipping to change at page 10, line 10 ¶ | skipping to change at page 10, line 10 ¶ | |||
| repository: a system or collection of distributed systems that | repository: a system or collection of distributed systems that | |||
| store certificates and CRLs and serves as a means of | store certificates and CRLs and serves as a means of | |||
| distributing these certificates and CRLs to end | distributing these certificates and CRLs to end | |||
| entities. | 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 certifi- | This confidence is obtained through the use of public key | |||
| cates, which are data structures that bind public key values to sub- | certificates, which are data structures that bind public key values | |||
| jects. The binding is asserted by having a trusted CA digitally sign | to subjects. The binding is asserted by having a trusted CA | |||
| each certificate. The CA may base this assertion upon technical means | digitally sign each certificate. The CA may base this assertion upon | |||
| (a.k.a., proof of posession through a challenge-response protocol), | technical means (a.k.a., proof of posession through a challenge- | |||
| presentation of the private key, or on an assertion by the subject. | response protocol), presentation of the private key, or on an | |||
| A certificate has a limited valid lifetime which is indicated in its | assertion by the subject. A certificate has a limited valid lifetime | |||
| signed contents. Because a certificate's signature and timeliness | which is indicated in its signed contents. Because a certificate's | |||
| can be independently checked by a certificate-using client, certifi- | signature and timeliness can be independently checked by a | |||
| cates can be distributed via untrusted communications and server sys- | certificate-using client, certificates can be distributed via | |||
| tems, and can be cached in unsecured storage in certificate-using | untrusted communications and server systems, and can be cached in | |||
| systems. | unsecured storage in certificate-using systems. | |||
| ITU-T X.509 (formerly CCITT X.509) or ISO/IEC/ITU 9594-8, which was | ITU-T X.509 (formerly CCITT X.509) or ISO/IEC/ITU 9594-8, which was | |||
| first published in 1988 as part of the X.500 Directory recommenda- | first published in 1988 as part of the X.500 Directory | |||
| tions, defines a standard certificate format [X.509]. The certificate | recommendations, defines a standard certificate format [X.509]. The | |||
| format in the 1988 standard is called the version 1 (v1) format. | certificate format in the 1988 standard is called the version 1 (v1) | |||
| When X.500 was revised in 1993, two more fields were added, resulting | format. When X.500 was revised in 1993, two more fields were added, | |||
| in the version 2 (v2) format. | resulting 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 [RFC 1422]. 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 | |||
| are deficient in several respects. Most importantly, more fields | are deficient in several respects. Most importantly, more fields | |||
| were needed to carry information which PEM design and implementation | were needed to carry information which PEM design and implementation | |||
| experience has proven necessary. In response to these new require- | experience has proven necessary. In response to these new | |||
| ments, ISO/IEC/ITU and ANSI X9 developed the X.509 version 3 (v3) | requirements, ISO/IEC/ITU and ANSI X9 developed the X.509 version 3 | |||
| certificate format. The v3 format extends the v2 format by adding | (v3) certificate format. The v3 format extends the v2 format by | |||
| provision for additional extension fields. Particular extension | adding provision for additional extension fields. Particular | |||
| field types may be specified in standards or may be defined and | extension field types may be specified in standards or may be defined | |||
| registered by any organization or community. In June 1996, standardi- | and registered by any organization or community. In June 1996, | |||
| zation of the basic v3 format was completed [X.509]. | standardization of the basic v3 format was completed [X.509]. | |||
| ISO/IEC/ITU and ANSI X9 have also developed standard extensions for | ISO/IEC/ITU and ANSI X9 have also developed standard extensions for | |||
| use in the v3 extensions field [X.509][X9.55]. These extensions can | use in the v3 extensions field [X.509][X9.55]. These extensions can | |||
| convey such data as additional subject identification information, | convey such data as additional subject identification information, | |||
| key attribute information, policy information, and certification path | key attribute information, policy information, and certification path | |||
| constraints. | constraints. | |||
| However, the ISO/IEC/ITU and ANSI X9 standard extensions are very | However, the ISO/IEC/ITU 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. Environ- | for Internet WWW, electronic mail, and IPsec applications. | |||
| ments with additional requirements may build on this profile or may | Environments with additional requirements may build on this profile | |||
| 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 gen- | A user of a security service requiring knowledge of a public key | |||
| erally 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 certifi- | end entity) signed by one CA, and zero or more additional | |||
| cates of CAs signed by other CAs. Such chains, called certification | certificates of CAs signed by other CAs. Such chains, called | |||
| paths, are required because a public key user is only initialized | certification paths, are required because a public key user is only | |||
| 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 author- | (a) Internet Policy Registration Authority (IPRA): This | |||
| ity, operated under the auspices of the Internet Society, acts as | authority, operated under the auspices of the Internet Society, | |||
| the root of the PEM certification hierarchy at level 1. It issues | acts as the root of the PEM certification hierarchy at level 1. | |||
| certificates only for the next level of authorities, PCAs. All | It issues certificates only for the next level of authorities, | |||
| certification paths start with the IPRA. | 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 PCA | |||
| shall establish and publish a statement of its policy with respect | shall establish and publish a statement of its policy with respect | |||
| to certifying users or subordinate certification authorities. | to certifying users or subordinate certification authorities. | |||
| Distinct PCAs aim to satisfy different user needs. For example, | Distinct PCAs aim to satisfy different user needs. For example, | |||
| one PCA (an organizational PCA) might support the general elec- | one PCA (an organizational PCA) might support the general | |||
| tronic mail needs of commercial organizations, and another PCA (a | electronic mail needs of commercial organizations, and another PCA | |||
| high-assurance PCA) might have a more stringent policy designed | (a high-assurance PCA) might have a more stringent policy designed | |||
| for satisfying legally binding digital signature requirements. | 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 are | |||
| certified by PCAs. CAs represent, for example, particular organi- | certified by PCAs. CAs represent, for example, particular | |||
| zations, particular organizational units (e.g., departments, | organizations, particular organizational units (e.g., departments, | |||
| groups, sections), or particular geographical areas. | 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 fol- | to mechanically check that the name subordination rule has been | |||
| lowed. | followed. | |||
| The RFC 1422 uses the X.509 v1 certificate formats. The limitations | The RFC 1422 uses the X.509 v1 certificate formats. The limitations | |||
| of X.509 v1 required imposition of several structural restrictions to | of X.509 v1 required imposition of several structural restrictions to | |||
| clearly associate policy information or restrict the utility of cer- | clearly associate policy information or restrict the utility of | |||
| tificates. These restrictions included: | certificates. These restrictions included: | |||
| (a) a pure top-down hierarchy, with all certification paths start- | (a) a pure top-down hierarchy, with all certification paths | |||
| ing 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 individual | (c) use of the PCA concept, which requires knowledge of individual | |||
| PCAs to be built into certificate chain verification logic. | PCAs to be built into certificate chain verification logic. | |||
| Knowledge of individual PCAs was required to determine if a chain | Knowledge of individual PCAs was required to determine if a chain | |||
| could be accepted. | 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 architec- | rule. As a result, this document supports a more flexible | |||
| ture, including: | architecture, including: | |||
| (a) Certification paths may start with a public key of a CA in a | (a) Certification paths may start with a public key of a CA in a | |||
| user's own domain, or with the public key of the top of a hierar- | user's own domain, or with the public key of the top of a | |||
| chy. Starting with the public key of a CA in a user's own domain | hierarchy. Starting with the public key of a CA in a user's own | |||
| has certain advantages. In some environments, the local domain is | domain has certain advantages. In some environments, the local | |||
| the most trusted. | 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 con- | (c) Policy extensions and policy mappings replace the PCA | |||
| cept, which permits a greater degree of automation. The applica- | concept, which permits a greater degree of automation. The | |||
| tion can determine if the certification path is acceptable based | application can determine if the certification path is acceptable | |||
| on the contents of the certificates instead of a priori knowledge | based on the contents of the certificates instead of a priori | |||
| of PCAs. This permits automation of certificate chain processing. | knowledge of PCAs. This permits automation of certificate chain | |||
| processing. | ||||
| 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 associa- | period. Such circumstances include change of name, change of | |||
| tion between subject and CA (e.g., an employee terminates employment | association between subject and CA (e.g., an employee terminates | |||
| with an organization), and compromise or suspected compromise of the | employment with an organization), and compromise or suspected | |||
| corresponding private key. Under such circumstances, the CA needs to | compromise of the corresponding private key. Under such | |||
| 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 which is signed by a CA and made | identifying revoked certificates which is signed by a CA and made | |||
| freely available in a public repository. Each revoked certificate is | freely available in a public repository. Each revoked certificate is | |||
| identified in a CRL by its certificate serial number. When a | identified in a CRL by its certificate serial number. When a | |||
| certificate-using system uses a certificate (e.g., for verifying a | certificate-using system uses a certificate (e.g., for verifying a | |||
| remote user's digital signature), that system not only checks the | remote user's digital signature), that system not only checks the | |||
| certificate signature and validity but also acquires a suitably- | certificate signature and validity but also acquires a suitably- | |||
| recent CRL and checks that the certificate serial number is not on | recent CRL and checks that the certificate serial number is not on | |||
| that CRL. The meaning of "suitably-recent" may vary with local pol- | that CRL. The meaning of "suitably-recent" may vary with local | |||
| icy, but it usually means the most recently-issued CRL. A CA issues | policy, but it usually means the most recently-issued CRL. A CA | |||
| a new CRL on a regular periodic basis (e.g., hourly, daily, or | issues a new CRL on a regular periodic basis (e.g., hourly, daily, or | |||
| weekly). An entry is added to the CRL as part of the next update | weekly). An entry is added to the CRL as part of the next update | |||
| following notification of revocation. An entry may be removed from | following notification of revocation. An entry may be removed from | |||
| the CRL after appearing on one regularly scheduled CRL issued beyond | the CRL after appearing on one regularly scheduled CRL issued beyond | |||
| the revoked certificate's validity period. | the revoked certificate's validity period. | |||
| An advantage of this revocation method is that CRLs may be distri- | An advantage of this revocation method is that CRLs may be | |||
| buted by exactly the same means as certificates themselves, namely, | distributed by exactly the same means as certificates themselves, | |||
| via untrusted communications and server systems. | namely, via untrusted communications and server systems. | |||
| One limitation of the CRL revocation method, using untrusted communi- | One limitation of the CRL revocation method, using untrusted | |||
| cations and servers, is that the time granularity of revocation is | communications and servers, is that the time granularity of | |||
| limited to the CRL issue period. For example, if a revocation is | revocation is limited to the CRL issue period. For example, if a | |||
| reported now, that revocation will not be reliably notified to | revocation is reported now, that revocation will not be reliably | |||
| certificate-using systems until the next periodic CRL is issued -- | notified to certificate-using systems until the next periodic CRL is | |||
| this may be up to one hour, one day, or one week depending on the | issued -- this may be up to one hour, one day, or one week depending | |||
| frequency that the CA issues CRLs. | on the frequency that the CA issues CRLs. | |||
| As with the X.509 v3 certificate format, in order to facilitate | As with the X.509 v3 certificate format, in order to facilitate | |||
| interoperable implementations from multiple vendors, the X.509 v2 CRL | interoperable implementations from multiple vendors, the X.509 v2 CRL | |||
| format needs to be profiled for Internet use. It is one goal of this | format needs to be profiled for Internet use. It is one goal of this | |||
| document to specify that profile. However, this profile does not | document to specify that profile. However, this profile does not | |||
| require CAs to issue CRLs. Message formats and protocols supporting | require CAs to issue CRLs. Message formats and protocols supporting | |||
| on-line revocation notification may be defined in other PKIX specifi- | on-line revocation notification may be defined in other PKIX | |||
| cations. On-line methods of revocation notification may be applica- | specifications. On-line methods of revocation notification may be | |||
| ble in some environments as an alternative to the X.509 CRL. On-line | applicable in some environments as an alternative to the X.509 CRL. | |||
| revocation checking may significantly reduce the latency between a | On-line revocation checking may significantly reduce the latency | |||
| revocation report and the distribution of the information to relying | between a revocation report and the distribution of the information | |||
| parties. Once the CA accepts the report as authentic and valid, any | to relying parties. Once the CA accepts the report as authentic and | |||
| query to the on-line service will correctly reflect the certificate | valid, any query to the on-line service will correctly reflect the | |||
| validation impacts of the revocation. However, these methods impose | certificate validation impacts of the revocation. However, these | |||
| new security requirements: the certificate validator needs to trust | methods impose new security requirements: the certificate validator | |||
| the on-line validation service while the repository does not need to | needs to trust the on-line validation service while the repository | |||
| be trusted. | 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. Provi- | (or status information) to certificate using client systems. | |||
| sion is needed for a variety of different means of certificate and | Provision is needed for a variety of different means of certificate | |||
| CRL delivery, including distribution procedures based on LDAP, HTTP, | and CRL delivery, including distribution procedures based on LDAP, | |||
| FTP, and X.500. Operational protocols supporting these functions are | HTTP, FTP, and X.500. Operational protocols supporting these | |||
| defined in other PKIX specifications. These specifications may | functions are defined in other PKIX specifications. These | |||
| include definitions of message formats and procedures for supporting | specifications may include definitions of message formats and | |||
| all of the above operational environments, including definitions of | procedures for supporting all of the above operational environments, | |||
| or references to appropriate MIME content types. | including definitions of or references to appropriate MIME content | |||
| 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 which cross-certify each | key pair is associated, or between two CAs which cross-certify each | |||
| other. The set of functions which potentially need to be supported | other. The set of functions which potentially need to be supported | |||
| by management protocols include: | by 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 that | |||
| CA issuing a certificate or certificates for that user. | 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 which have the appropri- | it is necessary to install key materials which have the | |||
| ate 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 of | |||
| be used in validating certificate paths. Furthermore, a client | the trusted CA(s), to be used in validating certificate paths. | |||
| typically needs to be initialized with its own key pair(s). | Furthermore, a client typically needs to be initialized with 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 certificate | |||
| to the user's client system and/or posts that certificate in a | to the user's client system and/or posts that certificate in a | |||
| repository. | 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 be | |||
| backed up by a CA or a key backup system. If a user needs to | backed up by a CA or a key backup system. If a user needs to | |||
| recover these backed up key materials (e.g., as a result of a for- | recover these backed up key materials (e.g., as a result of a | |||
| gotten password or a lost key chain file), an on-line protocol | forgotten password or a lost key chain file), an on-line protocol | |||
| exchange may be needed to support such recovery. | 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 certi- | establishing a cross-certificate. A cross-certificate is a | |||
| ficate issued by one CA to another CA which contains a CA signa- | certificate issued by one CA to another CA which contains a CA | |||
| ture 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 com- | token delivery. Furthermore, some of the above functions may be | |||
| bined into one protocol exchange. In particular, two or more of the | combined into one protocol exchange. In particular, two or more of | |||
| registration, initialization, and certification functions can be com- | the registration, initialization, and certification functions can be | |||
| bined into one protocol exchange. | combined into one protocol exchange. | |||
| The PKIX series of specifications may define a set of standard mes- | The PKIX series of specifications may define a set of standard | |||
| sage formats supporting the above functions in future specifications. | message formats supporting the above functions in future | |||
| In that case, the protocols for conveying these messages in different | specifications. In that case, the protocols for conveying these | |||
| environments (e.g., on-line, file transfer, e-mail, and WWW) will | messages in different environments (e.g., on-line, file transfer, e- | |||
| also be described in those specifications. | mail, and WWW) will also be 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/ITU documents use the | extensions defined in [X.509]. The ISO/IEC/ITU documents use the | |||
| 1993 version of ASN.1; while this document uses the 1988 ASN.1 syn- | 1993 version of ASN.1; while this document uses the 1988 ASN.1 | |||
| tax, the encoded certificate and standard extensions are equivalent. | syntax, the encoded certificate and standard extensions are | |||
| This section also defines private extensions required to support a | equivalent. This section also defines private extensions required to | |||
| PKI for the Internet community. | support a PKI for the Internet community. | |||
| Certificates may be used in a wide range of applications and environ- | Certificates may be used in a wide range of applications and | |||
| ments covering a broad spectrum of interoperability goals and a | environments covering a broad spectrum of interoperability goals and | |||
| broader spectrum of operational and assurance requirements. The goal | a broader spectrum of operational and assurance requirements. The | |||
| of this document is to establish a common baseline for generic appli- | goal of this document is to establish a common baseline for generic | |||
| cations requiring broad interoperability and limited special purpose | applications requiring broad interoperability and limited special | |||
| requirements. In particular, the emphasis will be on supporting the | purpose requirements. In particular, the emphasis will be on | |||
| use of X.509 v3 certificates for informal Internet electronic mail, | supporting the use of X.509 v3 certificates for informal Internet | |||
| 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 certificate is encoded using the ASN.1 distinguished | calculation, the certificate is encoded using the ASN.1 distinguished | |||
| encoding rules (DER) [X.208]. ASN.1 DER encoding is a tag, length, | encoding rules (DER) [X.208]. ASN.1 DER encoding is a tag, length, | |||
| value encoding system for each element. | value encoding system for each element. | |||
| Certificate ::= SEQUENCE { | Certificate ::= SEQUENCE { | |||
| tbsCertificate TBSCertificate, | tbsCertificate TBSCertificate, | |||
| skipping to change at page 17, line 36 ¶ | skipping to change at page 17, line 38 ¶ | |||
| 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 may also include extensions which are described in | the tbscertificate may also include extensions which are described in | |||
| section 4.2. | section 4.2. | |||
| 4.1.1.2 signatureAlgorithm | 4.1.1.2 signatureAlgorithm | |||
| The signatureAlgorithm field contains the identifier for the crypto- | The signatureAlgorithm field contains the identifier for the | |||
| graphic algorithm used by the CA to sign this certificate. [PKIX | cryptographic algorithm used by the CA to sign this certificate. | |||
| ALGS] lists the supported signature algorithms. | [PKIX ALGS] lists the supported signature algorithms. | |||
| 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 algo- | The algorithm identifier is used to identify a cryptographic | |||
| rithm. 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. [PKIX ALGS] | field will vary according to the algorithm identified. [PKIX ALGS] | |||
| lists the supported algorithms for this specification. | lists the supported algorithms for this specification. | |||
| 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 (see sec. 4.1.2.3). | signature field in the sequence tbsCertificate (see sec. 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 tbsCer- | the ASN.1 DER encoded tbsCertificate. The ASN.1 DER encoded | |||
| tificate is used as the input to the signature function. This signa- | tbsCertificate is used as the input to the signature function. This | |||
| ture value is then ASN.1 encoded as a BIT STRING and included in the | signature value is then ASN.1 encoded as a BIT STRING and included in | |||
| Certificate's signature field. The details of this process are speci- | the Certificate's signature field. The details of this process are | |||
| fied for each of the supported algorithms in [PKIX ALGS]. | specified for each of the supported algorithms in [PKIX ALGS]. | |||
| 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 cer- | information in the tbsCertificate field. In particular, the CA | |||
| tifies the binding between the public key material and the subject of | certifies the binding between the public key material and the subject | |||
| 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 who issued it. Every TBSCerti- | subject of the certificate and the CA who issued it. Every | |||
| ficate contains the names of the subject and issuer, a public key | TBSCertificate contains the names of the subject and issuer, a public | |||
| associated with the subject, a validity period, a version number, and | key associated with the subject, a validity period, a version number, | |||
| a serial number; some may contain optional unique identifier fields. | and a serial number; some may contain optional unique identifier | |||
| The remainder of this section describes the syntax and semantics of | fields. The remainder of this section describes the syntax and | |||
| these fields. A TBSCertificate may also include extensions. Exten- | semantics of these fields. A TBSCertificate may also include | |||
| sions for the Internet PKI are described in Section 4.2. | extensions. Extensions for the Internet PKI are described in Section | |||
| 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, use X.509 version 3 | extensions are used, as expected in this profile, use X.509 version 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, use version 2 (value is 1). If only basic fields are | is present, use version 2 (value is 1). If only basic fields are | |||
| present, use version 1 (the value is omitted from the certificate as | present, use version 1 (the value is omitted from the certificate as | |||
| the default value). | the default value). | |||
| 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 implementa- | Generation of version 2 certificates is not expected by | |||
| tions based on this profile. | implementations based on this profile. | |||
| 4.1.2.2 Serial number | 4.1.2.2 Serial number | |||
| The serial number is a positive integer assigned by the CA to each | The serial number is a positive integer assigned by the CA to each | |||
| certificate. It MUST be unique for each certificate issued by a | 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). | certificate). CAs MUST force the serialNumber to be a non-negative | |||
| integer. | ||||
| Given the uniqueness requirements above serial numbers can be | ||||
| expected to contain long integers. Certificate users MUST be able to | ||||
| handle serialNumber values up to 20 octets. Conformant CAs MUST NOT | ||||
| use serialNumber values longer than 20 octets. | ||||
| Note: Non-conforming CAs may issue certificates with serial numbers | ||||
| that are negative, or zero. Certificate users SHOULD be prepared to | ||||
| 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 signa- | This field MUST contain the same algorithm identifier as the | |||
| tureAlgorithm field in the sequence Certificate (see sec. 4.1.1.2). | signatureAlgorithm field in the sequence Certificate (see sec. | |||
| The contents of the optional parameters field will vary according to | 4.1.1.2). The contents of the optional parameters field will vary | |||
| the algorithm identified. [PKIX ALGS] lists the supported signature | according to the algorithm identified. [PKIX ALGS] lists the | |||
| algorithms. | supported signature algorithms. | |||
| 4.1.2.4 Issuer | 4.1.2.4 Issuer | |||
| The issuer field identifies the entity who has signed and issued the | The issuer field identifies the entity who 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 { | Name ::= CHOICE { | |||
| RDNSequence } | RDNSequence } | |||
| skipping to change at page 19, line 37 ¶ | skipping to change at page 20, line 4 ¶ | |||
| RDNSequence ::= SEQUENCE OF RelativeDistinguishedName | RDNSequence ::= SEQUENCE OF RelativeDistinguishedName | |||
| RelativeDistinguishedName ::= | RelativeDistinguishedName ::= | |||
| SET OF AttributeTypeAndValue | SET OF AttributeTypeAndValue | |||
| AttributeTypeAndValue ::= SEQUENCE { | AttributeTypeAndValue ::= SEQUENCE { | |||
| type AttributeType, | type AttributeType, | |||
| value AttributeValue } | value AttributeValue } | |||
| AttributeType ::= OBJECT IDENTIFIER | AttributeType ::= OBJECT IDENTIFIER | |||
| AttributeValue ::= ANY DEFINED BY AttributeType | AttributeValue ::= ANY DEFINED BY AttributeType | |||
| DirectoryString ::= CHOICE { | DirectoryString ::= CHOICE { | |||
| teletexString TeletexString (SIZE (1..MAX)), | teletexString TeletexString (SIZE (1..MAX)), | |||
| printableString PrintableString (SIZE (1..MAX)), | printableString PrintableString (SIZE (1..MAX)), | |||
| universalString UniversalString (SIZE (1..MAX)), | universalString UniversalString (SIZE (1..MAX)), | |||
| utf8String UTF8String (SIZE (1.. MAX)), | utf8String UTF8String (SIZE (1.. MAX)), | |||
| bmpString BMPString (SIZE (1..MAX)) } | bmpString BMPString (SIZE (1..MAX)) } | |||
| The Name describes a hierarchical name composed of attributes, such | The Name describes a hierarchical name composed of attributes, such | |||
| as country name, and corresponding values, such as US. The type of | as country name, and corresponding values, such as US. The type of | |||
| the component AttributeValue is determined by the AttributeType; in | the component AttributeValue is determined by the AttributeType; in | |||
| general it will be a DirectoryString. | general it will be a DirectoryString. | |||
| The DirectoryString type is defined as a choice of PrintableString, | The DirectoryString type is defined as a choice of PrintableString, | |||
| TeletexString, BMPString, UTF8String, and UniversalString. The | TeletexString, BMPString, UTF8String, and UniversalString. The | |||
| UTF8String encoding is the preferred encoding, and all certificates | UTF8String encoding is the preferred encoding, and all certificates | |||
| issued after December 31, 2003 MUST use the UTF8String encoding of | issued after December 31, 2003 MUST use the UTF8String encoding of | |||
| DirectoryString (except as noted below). Until that date, conforming | DirectoryString (except as noted below). Until that date, conforming | |||
| CAs MUST choose from the following options when creating a dis- | CAs MUST choose from the following options when creating a | |||
| tinguished name, including their own: | distinguished name, including their own: | |||
| (a) if the character set is sufficient, the string MAY be | (a) if the character set is sufficient, the string MAY be | |||
| represented as a PrintableString; | represented as a PrintableString; | |||
| (b) failing (a), if the BMPString character set is sufficient the | (b) failing (a), if the BMPString character set is sufficient the | |||
| string MAY be represented as a BMPString; and | string MAY be represented as a BMPString; and | |||
| (c) failing (a) and (b), the string MUST be represented as a | (c) failing (a) and (b), the string MUST be represented as a | |||
| UTF8String. If (a) or (b) is satisfied, the CA MAY still choose | UTF8String. If (a) or (b) is satisfied, the CA MAY still choose | |||
| to represent the string as a UTF8String. | to represent the string as a UTF8String. | |||
| Exceptions to the December 31, 2003 UTF8 encoding requirements are as | Exceptions to the December 31, 2003 UTF8 encoding requirements are as | |||
| follows: | follows: | |||
| (a) CAs MAY issue "name rollover" certificates to support an ord- | (a) CAs MAY issue "name rollover" certificates to support an | |||
| erly migration to UTF8String encoding. Such certificates would | orderly migration to UTF8String encoding. Such certificates would | |||
| include the CA's UTF8String encoded name as issuer and and the old | include the CA's UTF8String encoded name as issuer and and the old | |||
| name encoding as subject, or vice-versa. | name encoding as subject, or vice-versa. | |||
| (b) As stated in section 4.1.2.6, the subject field MUST be popu- | (b) As stated in section 4.1.2.6, the subject field MUST be | |||
| lated with a non-empty distinguished name matching the contents of | populated with a non-empty distinguished name matching the | |||
| the issuer field in all certificates issued by the subject CA | contents of the issuer field in all certificates issued by the | |||
| regardless of encoding. | subject CA regardless of encoding. | |||
| The TeletexString and UniversalString are included for backward com- | The TeletexString and UniversalString are included for backward | |||
| patibility, and should not be used for certificates for new subjects. | compatibility, and should not be used for certificates for new | |||
| However, these types may be used in certificates where the name was | subjects. However, these types may be used in certificates where the | |||
| previously established. Certificate users SHOULD be prepared to | name was previously established. Certificate users SHOULD be | |||
| receive certificates with these types. | prepared to receive certificates with these types. | |||
| In addition, many legacy implementations support names encoded in the | In addition, many legacy implementations support names encoded in the | |||
| ISO 8859-1 character set (Latin1String) but tag them as Teletex- | ISO 8859-1 character set (Latin1String) but tag them as | |||
| String. The Latin1String includes characters used in Western Euro- | TeletexString. The Latin1String includes characters used in Western | |||
| pean countries which are not part of the TeletexString charcter set. | European countries which are not part of the TeletexString charcter | |||
| Implementations that process TeletexString SHOULD be prepared to han- | set. Implementations that process TeletexString SHOULD be prepared | |||
| dle the entire ISO 8859-1 character set.[ISO 8859-1] | to handle the entire ISO 8859-1 character set.[ISO 8859-1] | |||
| 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 also recommends | of attribute types defined below. This specification also 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 be | specifications.[X.520] Implementations of this specification MUST be | |||
| skipping to change at page 21, line 21 ¶ | skipping to change at page 21, line 36 ¶ | |||
| * 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 | |||
| to receive the following standard attribute types in issuer and sub- | to receive the following standard attribute types in issuer and | |||
| ject names: | subject names: | |||
| * locality, | * locality, | |||
| * title, | * title, | |||
| * surname, | * surname, | |||
| * given name, | * given name, | |||
| * initials, and | * initials, | |||
| * 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 attri- | The syntax and associated object identifiers (OIDs) for these | |||
| bute types are provided in the ASN.1 modules in Appendices A and B. | attribute types are provided in the ASN.1 modules in Appendices A and | |||
| B. | ||||
| 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 2247]. | to receive the domainComponent attribute, as defined in [RFC 2247]. | |||
| The Domain (Nameserver) System (DNS) provides a hierarchical resource | The Domain (Nameserver) System (DNS) provides a hierarchical resource | |||
| labeling system. This attribute provides is a convenient mechanism | labeling system. This attribute provides is a convenient mechanism | |||
| for organizations that wish to use DNs that parallel their DNS names. | for organizations that wish to use DNs that parallel their DNS names. | |||
| This is not a replacement for the dNSName component of the alterna- | This is not a replacement for the dNSName component of the | |||
| tive name field. Implementations are not required to convert such | alternative name field. Implementations are not required to convert | |||
| names into DNS names. The syntax and associated OID for this attri- | such names into DNS names. The syntax and associated OID for this | |||
| bute type is provided in the ASN.1 modules in Appendices A and B. | attribute type is provided in the ASN.1 modules in Appendices A and | |||
| B. | ||||
| Certificate users MUST be prepared to process the issuer dis- | Certificate users MUST be prepared to process the issuer | |||
| tinguished name and subject distinguished name (see sec. 4.1.2.6) | distinguished name and subject distinguished name (see sec. 4.1.2.6) | |||
| fields to perform name chaining for certification path validation | fields to perform name chaining for certification path validation | |||
| (see section 6). Name chaining is performed by matching the issuer | (see 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. | certificate. | |||
| This specification requires only a subset of the name comparison | This specification requires only a subset of the name comparison | |||
| functionality specified in the X.500 series of specifications. The | functionality specified in the X.500 series of specifications. The | |||
| requirements for conforming implementations are as follows: | requirements for conforming implementations are as follows: | |||
| (a) attribute values encoded in different types (e.g., Printable- | (a) attribute values encoded in different types (e.g., | |||
| String and BMPString) may be assumed to represent different | PrintableString and BMPString) may be assumed to represent | |||
| strings; | different strings; | |||
| (b) attribute values in types other than PrintableString are case | (b) attribute values in types other than PrintableString are case | |||
| sensitive (this permits matching of attribute values as binary | sensitive (this permits matching of attribute values as binary | |||
| objects); | objects); | |||
| (c) attribute values in PrintableString are not case sensitive | (c) attribute values in PrintableString are not case sensitive | |||
| (e.g., "Marianne Swanson" is the same as "MARIANNE SWANSON"); and | (e.g., "Marianne Swanson" is the same as "MARIANNE SWANSON"); and | |||
| (d) attribute values in PrintableString are compared after remov- | (d) attribute values in PrintableString are compared after | |||
| ing leading and trailing white space and converting internal sub- | removing leading and trailing white space and converting internal | |||
| strings of one or more consecutive white space characters to a | substrings of one or more consecutive white space characters to a | |||
| single space. | single space. | |||
| These name comparison rules permit a certificate user to validate | These name comparison rules permit a certificate user to validate | |||
| certificates issued using languages or encodings unfamiliar to the | certificates issued using languages or encodings unfamiliar to the | |||
| certificate user. | certificate user. | |||
| In addition, implementations of this specification MAY use these com- | In addition, implementations of this specification MAY use these | |||
| parison rules to process unfamiliar attribute types for name chain- | comparison rules to process unfamiliar attribute types for name | |||
| ing. This allows implementations to process certificates with unfami- | chaining. This allows implementations to process certificates with | |||
| liar attributes in the issuer name. | unfamiliar attributes in the issuer name. | |||
| Note that the comparison rules defined in the X.500 series of specif- | Note that the comparison rules defined in the X.500 series of | |||
| ications indicate that the character sets used to encode data in dis- | specifications indicate that the character sets used to encode data | |||
| tinguished names are irrelevant. The characters themselves are com- | in distinguished names are irrelevant. The characters themselves are | |||
| pared without regard to encoding. Implementations of the profile are | compared without regard to encoding. Implementations of the profile | |||
| permitted to use the comparison algorithm defined in the X.500 | are permitted to use the comparison algorithm defined in the X.500 | |||
| series. Such an implementation will recognize a superset of name | series. Such an implementation will recognize a superset of name | |||
| matches recognized by the algorithm specified above. | matches recognized by the algorithm specified above. | |||
| 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 vali- | CAs conforming to this profile MUST always encode certificate | |||
| dity dates through the year 2049 as UTCTime; certificate validity | validity dates through the year 2049 as UTCTime; certificate validity | |||
| dates in 2050 or later MUST be encoded as GeneralizedTime. | dates in 2050 or later MUST be encoded as GeneralizedTime. | |||
| 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. | |||
| 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 preci- | through the two low order digits and time is specified to the | |||
| sion of one minute or one second. UTCTime includes either Z (for | precision of one minute or one second. UTCTime includes either Z | |||
| 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 | For the purposes of this profile, UTCTime values MUST be expressed | |||
| 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 inter- | Where YY is greater than or equal to 50, the year shall be | |||
| preted 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 Gen- | for variable precision representation of time. Optionally, the | |||
| eralizedTime field can include a representation of the time differen- | GeneralizedTime field can include a representation of the time | |||
| tial 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 Greenwich Mean Time (Zulu) and MUST include seconds (i.e., | expressed Greenwich Mean Time (Zulu) and MUST include seconds (i.e., | |||
| times are YYYYMMDDHHMMSSZ), even where the number of seconds is zero. | times are YYYYMMDDHHMMSSZ), even where the number of seconds is zero. | |||
| GeneralizedTime values MUST NOT include fractional seconds. | 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 dis- | the subject is a CA (e.g., the basic constraints extension, as | |||
| cussed in 4.2.1.10, is present and the value of cA is TRUE,) then the | discussed in 4.2.1.10, is present and the value of cA is TRUE,) then | |||
| subject field MUST be populated with a non-empty distinguished name | the subject field MUST be populated with a non-empty distinguished | |||
| matching the contents of the issuer field (see sec. 4.1.2.4) in all | name matching the contents of the issuer field (see sec. 4.1.2.4) in | |||
| certificates issued by the subject CA. If subject naming information | all certificates issued by the subject CA. If subject naming | |||
| is present only in the subjectAltName extension (e.g., a key bound | information is present only in the subjectAltName extension (e.g., a | |||
| only to an email address or URI), then the subject name MUST be an | key bound only to an email address or URI), then the subject name | |||
| empty sequence and the subjectAltName extension MUST be critical. | MUST be an empty sequence and the subjectAltName extension MUST be | |||
| critical. | ||||
| Where it is non-empty, the subject field MUST contain an X.500 dis- | Where it is non-empty, the subject field MUST contain an X.500 | |||
| tinguished name (DN). The DN MUST be unique for each subject entity | distinguished name (DN). The DN MUST be unique for each subject | |||
| certified by the one CA as defined by the issuer name field. A CA may | entity certified by the one CA as defined by the issuer name field. A | |||
| issue more than one certificate with the same DN to the same subject | CA may issue more than one certificate with the same DN to the same | |||
| entity. | subject entity. | |||
| The subject name field is defined as the X.501 type Name. Implemen- | The subject name field is defined as the X.501 type Name. | |||
| tation requirements for this field are those defined for the issuer | Implementation requirements for this field are those defined for the | |||
| field (see sec. 4.1.2.4). When encoding attribute values of type | issuer field (see sec. 4.1.2.4). When encoding attribute values of | |||
| DirectoryString, the encoding rules for the issuer field MUST be | type DirectoryString, the encoding rules for the issuer field MUST be | |||
| implemented. Implementations of this specification MUST be prepared | implemented. Implementations of this specification MUST be prepared | |||
| to receive subject names containing the attribute types required for | to receive subject names containing the attribute types required for | |||
| the issuer field. Implementations of this specification SHOULD be | the issuer field. Implementations of this specification SHOULD be | |||
| prepared to receive subject names containing the recommended attri- | prepared to receive subject names containing the recommended | |||
| bute types for the issuer field. The syntax and associated object | attribute types for the issuer field. The syntax and associated | |||
| identifiers (OIDs) for these attribute types are provided in the | object identifiers (OIDs) for these attribute types are provided in | |||
| ASN.1 modules in Appendices A and B. Implementations of this specif- | the ASN.1 modules in Appendices A and B. Implementations of this | |||
| ication MAY use these comparison rules to process unfamiliar attri- | specification MAY use these comparison rules to process unfamiliar | |||
| bute types (i.e., for name chaining). This allows implementations to | attribute types (i.e., for name chaining). This allows | |||
| process certificates with unfamiliar attributes in the subject name. | implementations to process certificates with unfamiliar attributes in | |||
| the subject name. | ||||
| In addition, legacy implementations exist where an RFC 822 name is | In addition, legacy implementations exist where an RFC 822 name is | |||
| embedded in the subject distinguished name as an EmailAddress attri- | embedded in the subject distinguished name as an EmailAddress | |||
| bute. The attribute value for EmailAddress is of type IA5String to | attribute. The attribute value for EmailAddress is of type IA5String | |||
| permit inclusion of the character '@', which is not part of the | to permit inclusion of the character '@', which is not part of the | |||
| PrintableString character set. EmailAddress attribute values are not | PrintableString character set. EmailAddress attribute values are not | |||
| case sensitive (e.g., "fanfeedback@redsox.com" is the same as | case sensitive (e.g., "fanfeedback@redsox.com" is the same as | |||
| "FANFEEDBACK@REDSOX.COM"). | "FANFEEDBACK@REDSOX.COM"). | |||
| Conforming implementations generating new certificates with elec- | Conforming implementations generating new certificates with | |||
| tronic mail addresses MUST use the rfc822Name in the subject alterna- | electronic mail addresses MUST use the rfc822Name in the subject | |||
| tive name field (see sec. 4.2.1.7) to describe such identities. | alternative name field (see sec. 4.2.1.7) to describe such | |||
| Simultaneous inclusion of the EmailAddress attribute in the subject | identities. Simultaneous inclusion of the EmailAddress attribute in | |||
| distinguished name to support legacy implementations is deprecated | the subject distinguished name to support legacy implementations is | |||
| 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. The algorithm is identified using the | with which the key is used. The algorithm is identified using the | |||
| AlgorithmIdentifier structure specified in section 4.1.1.2. The | AlgorithmIdentifier structure specified in section 4.1.1.2. The | |||
| object identifiers for the supported algorithms and the methods for | object identifiers for the supported algorithms and the methods for | |||
| encoding the public key materials (public key and parameters) are | encoding the public key materials (public key and parameters) are | |||
| specified in [PKIX ALGS]. | specified in [PKIX ALGS]. | |||
| 4.1.2.8 Unique Identifiers | 4.1.2.8 Unique Identifiers | |||
| These fields may only appear if the version is 2 or 3 (see sec. | These fields may only appear if the version is 2 or 3 (see sec. | |||
| 4.1.2.1). The subject and issuer unique identifiers are present in | 4.1.2.1). The subject and issuer unique identifiers are present in | |||
| the certificate to handle the possibility of reuse of subject and/or | the certificate to handle the possibility of reuse of subject and/or | |||
| issuer names over time. This profile recommends that names not be | issuer names over time. This profile recommends that names not be | |||
| reused for different entities and that Internet certificates not make | reused for different entities and that Internet certificates not make | |||
| use of unique identifiers. CAs conforming to this profile SHOULD NOT | use of unique identifiers. CAs conforming to this profile SHOULD NOT | |||
| generate certificates with unique identifiers. Applications conform- | generate certificates with unique identifiers. Applications | |||
| ing to this profile SHOULD be capable of parsing unique identifiers | conforming to this profile SHOULD be capable of parsing unique | |||
| and making comparisons. | identifiers and making comparisons. | |||
| 4.1.2.9 Extensions | 4.1.2.9 Extensions | |||
| This field may only appear if the version is 3 (see sec. 4.1.2.1). | This field may only appear if the version is 3 (see sec. 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 is defined in section 4.2. | Internet PKI is defined in section 4.2. | |||
| 4.2 Standard Certificate Extensions | 4.2 Standard 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 the certification hierarchy. The X.509 v3 certificate for- | managing the certification hierarchy. The X.509 v3 certificate | |||
| mat also allows communities to define private extensions to carry | format also allows communities to define private extensions to carry | |||
| information unique to those communities. Each extension in a certi- | information unique to those communities. Each extension in a | |||
| ficate may be designated as critical or non-critical. A certificate | certificate may be designated as critical or non-critical. A | |||
| using system MUST reject the certificate if it encounters a critical | certificate using system MUST reject the certificate if it encounters | |||
| extension it does not recognize; however, a non-critical extension | a critical extension it does not recognize; however, a non-critical | |||
| may be ignored if it is not recognized. The following sections | extension may be ignored if it is not recognized. The following | |||
| present recommended extensions used within Internet certificates and | sections present recommended extensions used within Internet | |||
| standard locations for information. Communities may elect to use | certificates and standard locations for information. Communities may | |||
| additional extensions; however, caution should be exercised in adopt- | elect to use additional extensions; however, caution should be | |||
| ing any critical extensions in certificates which might prevent use | exercised in adopting any critical extensions in certificates which | |||
| in a general context. | might prevent use in a 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 encoded structure is the value of | extnID and the corresponding ASN.1 encoded structure is the value of | |||
| the octet string extnValue. Only one instance of a particular exten- | the octet string extnValue. Only one instance of a particular | |||
| sion may appear in a particular certificate. For example, a certifi- | extension may appear in a particular certificate. For example, a | |||
| cate may contain only one authority key identifier extension (see | certificate may contain only one authority key identifier extension | |||
| sec. 4.2.1.1). An extension includes the boolean critical, with a | (see sec. 4.2.1.1). An extension includes the boolean critical, with | |||
| 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. | acceptable values for the critical field. | |||
| Conforming CAs MUST support key identifiers (see sec. 4.2.1.1 and | Conforming CAs MUST support key identifiers (see sec. 4.2.1.1 and | |||
| 4.2.1.2), basic constraints (see sec. 4.2.1.10), key usage (see sec. | 4.2.1.2), basic constraints (see sec. 4.2.1.10), key usage (see sec. | |||
| 4.2.1.3), and certificate policies (see sec. 4.2.1.5) extensions. If | 4.2.1.3), and certificate policies (see sec. 4.2.1.5) 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 | |||
| (see sec. 4.2.1.7). Support for the remaining extensions is | (see sec. 4.2.1.7). Support for the remaining extensions is | |||
| OPTIONAL. Conforming CAs may support extensions that are not identi- | OPTIONAL. Conforming CAs may support extensions that are not | |||
| fied within this specification; certificate issuers are cautioned | identified within this specification; certificate issuers are | |||
| that marking such extensions as critical may inhibit interoperabil- | cautioned that marking such extensions as critical may inhibit | |||
| ity. | 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 (see sec. 4.2.1.3), certificate | the following extensions: key usage (see sec. 4.2.1.3), certificate | |||
| policies (see sec. 4.2.1.5), the subject alternative name (see sec. | policies (see sec. 4.2.1.5), the subject alternative name (see sec. | |||
| 4.2.1.7), basic constraints (see sec. 4.2.1.10), name constraints | 4.2.1.7), basic constraints (see sec. 4.2.1.10), name constraints | |||
| (see sec. 4.2.1.11), policy constraints (see sec. 4.2.1.12), and | (see sec. 4.2.1.11), policy constraints (see sec. 4.2.1.12), extended | |||
| extended key usage (see sec. 4.2.1.13). | key usage (see sec. 4.2.1.13), and inhibit any-policy (see sec. | |||
| 4.2.1.15). | ||||
| In addition, this profile RECOMMENDS application support for the | In addition, this profile RECOMMENDS application support for the | |||
| authority and subject key identifier (see sec. 4.2.1.1 and 4.2.1.2), | authority and subject key identifier (see sec. 4.2.1.1 and 4.2.1.2), | |||
| and inhibit any-policy (see sec. 4.2.1.15) extensions. | and policy mapping (see sec. 4.2.1.6) 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 identify- | The authority key identifier extension provides a means of | |||
| ing the public key corresponding to the private key used to sign a | identifying the public key corresponding to the private key used to | |||
| certificate. This extension is used where an issuer has multiple | sign a certificate. This extension is used where an issuer has | |||
| signing keys (either due to multiple concurrent key pairs or due to | multiple signing keys (either due to multiple concurrent key pairs or | |||
| changeover). The identification may be based on either the key iden- | due to changeover). The identification may be based on either the | |||
| tifier (the subject key identifier in the issuer's certificate) or on | key identifier (the subject key identifier in the issuer's | |||
| the issuer name and serial number. | certificate) or on 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 facil- | be included in all certificates generated by conforming CAs to | |||
| itate chain building. There is one exception; where a CA distributes | facilitate chain building. There is one exception; where a CA | |||
| its public key in the form of a "self-signed" certificate, the | distributes its public key in the form of a "self-signed" | |||
| authority key identifier may be omitted. In this case, the subject | certificate, the authority key identifier may be omitted. In this | |||
| and authority key identifiers would be identical. | case, the subject and authority key identifiers would be identical. | |||
| The value of the keyIdentifier field SHOULD be derived from the pub- | The value of the keyIdentifier field SHOULD be derived from the | |||
| lic key used to verify the certificate's signature or a method that | public key used to verify the certificate's signature or a method | |||
| generates unique values. Two common methods for generating key iden- | that generates unique values. Two common methods for generating key | |||
| tifiers from the public key are described in (sec. 4.2.1.2). One com- | identifiers from the public key are described in (sec. 4.2.1.2). One | |||
| mon method for generating unique values is described in (sec. | common method for generating unique values is described in (sec. | |||
| 4.2.1.2). Where a key identifier has not been previously esta- | 4.2.1.2). Where a key identifier has not been previously | |||
| blished, this specification recommends use of one of these methods | established, this specification recommends use of one of these | |||
| for generating keyIdentifiers. | methods for generating keyIdentifiers. | |||
| 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. | |||
| This extension MUST NOT be marked critical. | This extension MUST NOT be marked 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, | |||
| skipping to change at page 27, line 50 ¶ | skipping to change at page 28, line 21 ¶ | |||
| 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 the | |||
| SHA-1 hash of the value of the BIT STRING subjectPublicKey. | SHA-1 hash of the value of the BIT STRING subjectPublicKey. | |||
| One common method for generating unique values is a monotomically | One common method for generating unique values is a monotonically | |||
| increasing sequence of integers. | increasing sequence of integers. | |||
| 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 particu- | provides a means for identifying certificates containing the | |||
| lar public key used in an application. Where an end entity has | particular public key used in an application. Where an end entity has | |||
| obtained multiple certificates, especially from multiple CAs, the | 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 appli- | of certificates containing a particular public key. To assist | |||
| cations in identificiation the appropriate end entity certificate, | applications in identifying the appropriate end entity certificate, | |||
| this extension SHOULD be included in all end entity certificates. | this extension SHOULD be included in all end entity certificates. | |||
| 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 identifed above. | identifiers from the public key are identifed 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. | keyIdentifiers. | |||
| This extension MUST NOT be marked critical. | This extension MUST NOT be marked 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, sig- | The key usage extension defines the purpose (e.g., encipherment, | |||
| nature, certificate signing) of the key contained in the certificate. | signature, certificate signing) of the key contained in the | |||
| The usage restriction might be employed when a key that could be used | certificate. The usage restriction might be employed when a key that | |||
| for more than one operation is to be restricted. For example, when | could be used for more than one operation is to be restricted. For | |||
| an RSA key should be used only for signing, the digitalSignature | example, when an RSA key should be used only for signing, the | |||
| and/or nonRepudiation bits would be asserted. Likewise, when an RSA | digitalSignature and/or nonRepudiation bits would be asserted. | |||
| key should be used only for key management, the keyEncipherment bit | Likewise, when an RSA key should be used only for key management, the | |||
| would be asserted. When used, this extension SHOULD be marked criti- | keyEncipherment bit would be asserted. When used, this extension | |||
| cal. | SHOULD be marked critical. | |||
| id-ce-keyUsage OBJECT IDENTIFIER ::= { id-ce 15 } | id-ce-keyUsage OBJECT IDENTIFIER ::= { id-ce 15 } | |||
| KeyUsage ::= BIT STRING { | KeyUsage ::= BIT STRING { | |||
| digitalSignature (0), | digitalSignature (0), | |||
| nonRepudiation (1), | nonRepudiation (1), | |||
| keyEncipherment (2), | keyEncipherment (2), | |||
| dataEncipherment (3), | dataEncipherment (3), | |||
| keyAgreement (4), | keyAgreement (4), | |||
| keyCertSign (5), | keyCertSign (5), | |||
| cRLSign (6), | cRLSign (6), | |||
| encipherOnly (7), | encipherOnly (7), | |||
| decipherOnly (8) } | decipherOnly (8) } | |||
| Bits in the KeyUsage type are used as follows: | Bits in the KeyUsage type are used as follows: | |||
| The digitalSignature bit is asserted when the subject public key | The digitalSignature bit is asserted when the subject public key | |||
| is used with a digital signature mechanism to support security | is used with a digital signature mechanism to support security | |||
| services other than non-repudiation (bit 1), certificate signing | services other than non-repudiation (bit 1), certificate signing | |||
| (bit 5), or revocation information signing (bit 6). Digital signa- | (bit 5), or revocation information signing (bit 6). Digital | |||
| ture mechanisms are often used for entity authentication and data | signature mechanisms are often used for entity authentication and | |||
| origin authentication with integrity. | data origin authentication with integrity. | |||
| The nonRepudiation bit is asserted when the subject public key is | The nonRepudiation bit is asserted when the subject public key is | |||
| used to verify digital signatures used to provide a non- | used to verify digital signatures used to provide a non- | |||
| repudiation service which protects against the signing entity | repudiation service which protects against the signing entity | |||
| falsely denying some action, excluding certificate or CRL signing. | falsely denying some action, excluding certificate or CRL signing. | |||
| In the case of later conflict, a reliable third party may deter- | In the case of later conflict, a reliable third party may | |||
| mine the authenticity of the signed data. | determine the authenticity of the signed data. | |||
| Further distinctions between the digitalSignature and nonRepudia- | Further distinctions between the digitalSignature and | |||
| tion bits may be provided in specific certificate policies. | nonRepudiation bits may be provided in specific certificate | |||
| policies. | ||||
| The keyEncipherment bit is asserted when the subject public key is | The keyEncipherment bit is asserted when the subject public key is | |||
| used for key transport. For example, when an RSA key is to be | used for key transport. For example, when an RSA key is to be | |||
| used for key management, then this bit shall asserted. | used for key management, then this bit shall asserted. | |||
| The dataEncipherment bit is asserted when the subject public key | The dataEncipherment bit is asserted when the subject public key | |||
| is used for enciphering user data, other than cryptographic keys. | is used for enciphering user data, other than cryptographic keys. | |||
| 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 | |||
| skipping to change at page 30, line 14 ¶ | skipping to change at page 30, line 37 ¶ | |||
| 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 deciphering data while performing key agreement. | used only for deciphering data while performing key agreement. | |||
| 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 [PKIX ALGS]. | are specified in [PKIX ALGS]. | |||
| 4.2.1.4 Private Key Usage Period | 4.2.1.4 Private Key Usage Period | |||
| This profile recommends against the use of this extension. CAs con- | This profile recommends against the use of this extension. CAs | |||
| forming to this profile MUST NOT generate certificates with critical | conforming to this profile MUST NOT generate certificates with | |||
| private key usage period extensions. | critical private key usage period extensions. | |||
| The private key usage period extension allows the certificate issuer | The private key usage period extension allows the certificate issuer | |||
| to specify a different validity period for the private key than the | to specify a different validity period for the private key than the | |||
| certificate. This extension is intended for use with digital signa- | certificate. This extension is intended for use with digital | |||
| ture keys. This extension consists of two optional components, | signature keys. This extension consists of two optional components, | |||
| notBefore and notAfter. The private key associated with the certifi- | notBefore and notAfter. The private key associated with the | |||
| cate should not be used to sign objects before or after the times | certificate should not be used to sign objects before or after the | |||
| specified by the two components, respectively. CAs conforming to this | times specified by the two components, respectively. CAs conforming | |||
| profile MUST NOT generate certificates with private key usage period | to this profile MUST NOT generate certificates with private key usage | |||
| extensions unless at least one of the two components is present. | period extensions unless at least one of the two components is | |||
| present. | ||||
| Where used, notBefore and notAfter are represented as GeneralizedTime | Where used, notBefore and notAfter are represented as GeneralizedTime | |||
| and MUST be specified and interpreted as defined in section | and MUST be specified and interpreted as defined in section | |||
| 4.1.2.5.2. | 4.1.2.5.2. | |||
| id-ce-privateKeyUsagePeriod OBJECT IDENTIFIER ::= { id-ce 16 } | id-ce-privateKeyUsagePeriod OBJECT IDENTIFIER ::= { id-ce 16 } | |||
| PrivateKeyUsagePeriod ::= SEQUENCE { | PrivateKeyUsagePeriod ::= SEQUENCE { | |||
| notBefore [0] GeneralizedTime OPTIONAL, | notBefore [0] GeneralizedTime OPTIONAL, | |||
| notAfter [1] GeneralizedTime OPTIONAL } | notAfter [1] GeneralizedTime OPTIONAL } | |||
| 4.2.1.5 Certificate Policies | 4.2.1.5 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 iden- | policy information terms, each of which consists of an object | |||
| tifier (OID) and optional qualifiers. Optional qualifiers, which may | identifier (OID) and optional qualifiers. Optional qualifiers, which | |||
| be present, are not expected to change the definition of the policy. | may be present, are not expected to change the definition of the | |||
| policy. | ||||
| 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 pur- | the policy under which the certificate has been issued and the | |||
| poses for which the certificate may be used. In a CA certificate, | purposes for which the certificate may be used. In a CA certificate, | |||
| these policy information terms limit the set of policies for certifi- | these policy information terms limit the set of policies for | |||
| cation paths which include this certificate. When a CA does not wish | certification paths which include this certificate. When a CA does | |||
| to limit the set of policies for certification paths which include | not wish to limit the set of policies for certification paths which | |||
| this certificate, they may assert the special policy anyPolicy, with | include this certificate, they may assert the special policy | |||
| a value of {2 5 29 32 0}. | anyPolicy, with a value of {2 5 29 32 0}. | |||
| Applications with specific policy requirements are expected to have a | Applications with specific policy requirements are expected to have a | |||
| list of those policies which they will accept and to compare the pol- | list of those policies which they will accept and to compare the | |||
| icy OIDs in the certificate to that list. If this extension is crit- | policy OIDs in the certificate to that list. If this extension is | |||
| ical, 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 cer- | extension (including the optional qualifier), or MUST reject the | |||
| tificate. | 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 use of qualifiers | |||
| be limited to those identified in this section. When qualifiers are | be limited to those identified in this section. When qualifiers are | |||
| used with the special policy anyPolicy, they MUST be limited to the | used with the special policy anyPolicy, they MUST be limited to the | |||
| qualifers identified in this section. | qualifers identified in this section. | |||
| This specification defines two policy qualifier types for use by cer- | This specification defines two policy qualifier types for use by | |||
| tificate policy writers and certificate issuers. The qualifier types | certificate policy writers and certificate issuers. The qualifier | |||
| 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 Prac- | The CPS Pointer qualifier contains a pointer to a Certification | |||
| tice Statement (CPS) published by the CA. The pointer is in the form | Practice Statement (CPS) published by the CA. The pointer is in the | |||
| of a URI. | form of a URI. Processing requirements for this qualifier are a | |||
| local matter. No action is mandated by this specification regardless | ||||
| of the criticality value asserted for the extension. | ||||
| User notice is intended for display to a relying party when a certi- | User notice is intended for display to a relying party when a | |||
| ficate is used. The application software SHOULD display all user | certificate is used. The application software SHOULD display all | |||
| notices in all certificates of the certification path used, except | user notices in all certificates of the certification path used, | |||
| that if a notice is duplicated only one copy need be displayed. To | except that if a notice is duplicated only one copy need be | |||
| prevent such duplication, this qualifier SHOULD only be present in | displayed. To prevent such duplication, this qualifier SHOULD only | |||
| end-entity certificates and CA certificates issued to other organiza- | be present in end-entity certificates and CA certificates issued to | |||
| tions. | 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. | explicitText field. | |||
| The noticeRef field, if used, names an organization and identi- | The noticeRef field, if used, names an organization and | |||
| fies, by number, a particular textual statement prepared by that | identifies, by number, a particular textual statement prepared by | |||
| organization. For example, it might identify the organization | that organization. For example, it might identify the | |||
| "CertsRUs" and notice number 1. In a typical implementation, the | organization "CertsRUs" and notice number 1. In a typical | |||
| application software will have a notice file containing the | implementation, the application software will have a notice file | |||
| current set of notices for CertsRUs; the application will extract | containing the current set of notices for CertsRUs; the | |||
| the notice text from the file and display it. Messages may be | application will extract the notice text from the file and display | |||
| multilingual, allowing the software to select the particular | it. Messages may be multilingual, allowing the software to select | |||
| language message for its own environment. | the particular language message for its own environment. | |||
| An explicitText field includes the textual statement directly in | An explicitText field includes the textual statement directly in | |||
| the certificate. The explicitText field is a string with a max- | the certificate. The explicitText field is a string with a | |||
| imum size of 200 characters. | maximum size of 200 characters. | |||
| If both the noticeRef and explicitText options are included in the | If both the noticeRef and explicitText options are included in the | |||
| one qualifier and if the application software can locate the notice | one qualifier and if the application software can locate the notice | |||
| 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. | |||
| 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-certificate-policies 0} | |||
| skipping to change at page 33, line 10 ¶ | skipping to change at page 33, line 37 ¶ | |||
| 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.6 Policy Mappings | 4.2.1.6 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 sub- | pairs of OIDs; each pair includes an issuerDomainPolicy and a | |||
| jectDomainPolicy. The pairing indicates the issuing CA considers its | subjectDomainPolicy. The pairing indicates the issuing CA considers | |||
| issuerDomainPolicy equivalent to the subject CA's subjectDomainPol- | its issuerDomainPolicy equivalent to the subject CA's | |||
| icy. | subjectDomainPolicy. | |||
| The issuing CA's users may accept an issuerDomainPolicy for certain | The issuing CA's users may accept an issuerDomainPolicy for certain | |||
| applications. The policy mapping tells the issuing CA's users which | applications. The policy mapping tells the issuing CA's users which | |||
| policies associated with the subject CA are comparable to the policy | policies associated with the subject CA are comparable to the policy | |||
| they accept. | they accept. | |||
| Policies should not be mapped either to or from the special value | Each issuerDomainPolicy named in the the policy mapping extension | |||
| anyPolicy. (see 4.2.1.5 certificate policies). | should also be asserted in a certificate policies extension in the | |||
| same certificate. Policies should not be mapped either to or from | ||||
| the special value anyPolicy. (See 4.2.1.5 certificate policies). | ||||
| This extension may be supported by CAs and/or applications, and it | This extension may be supported by CAs and/or applications, and it | |||
| MUST be non-critical. | MUST be non-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 } | |||
| skipping to change at page 33, line 50 ¶ | skipping to change at page 34, line 30 ¶ | |||
| such identities are to be bound into a certificate, the subject | such identities are to be bound into a certificate, the subject | |||
| alternative name (or issuer alternative name) extension MUST be used. | alternative name (or issuer alternative name) extension MUST be used. | |||
| 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 con- | subjectAltName extension MUST be present. If the subject field | |||
| tains an empty sequence, the subjectAltName extension MUST be marked | contains an empty sequence, the subjectAltName extension MUST be | |||
| critical. | marked critical. | |||
| When the subjectAltName extension contains an Internet mail address, | When the subjectAltName extension contains an Internet mail address, | |||
| the address MUST be included as an rfc822Name. The format of an | the address MUST be included as an rfc822Name. The format of an | |||
| rfc822Name is an "addr-spec" as defined in RFC 822 [RFC 822]. An | rfc822Name is an "addr-spec" as defined in RFC 822 [RFC 822]. An | |||
| addr-spec has the form "local-part@domain". Note that an addr-spec | addr-spec has the form "local-part@domain". Note that an addr-spec | |||
| has no phrase (such as a common name) before it, has no comment (text | has 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 | |||
| ">". Note that while upper and lower case letters are allowed in an | ">". Note that while upper and lower case letters are allowed in an | |||
| RFC 822 addr-spec, no significance is attached to the case. | RFC 822 addr-spec, no significance is attached to the case. | |||
| When the subjectAltName extension contains a iPAddress, the address | When the subjectAltName extension contains a iPAddress, the address | |||
| MUST be stored in the octet string in "network byte order," as speci- | MUST be stored in the octet string in "network byte order," as | |||
| fied in RFC 791 [RFC 791]. The least significant bit (LSB) of each | specified in RFC 791 [RFC 791]. The least significant bit (LSB) of | |||
| octet is the LSB of the corresponding byte in the network address. | each octet is the LSB of the corresponding byte in the network | |||
| For IP Version 4, as specified in RFC 791, the octet string MUST con- | address. For IP Version 4, as specified in RFC 791, the octet string | |||
| tain exactly four octets. For IP Version 6, as specified in RFC | MUST contain exactly four octets. For IP Version 6, as specified in | |||
| 1883, the octet string MUST contain exactly sixteen octets [RFC | RFC 1883, the octet string MUST contain exactly sixteen octets [RFC | |||
| 1883]. | 1883]. | |||
| When the subjectAltName extension contains a domain name service | When the subjectAltName extension contains a domain name service | |||
| 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 RFC | The name MUST be in the "preferred name syntax," as specified by RFC | |||
| 1034 [RFC 1034]. Note that while upper and lower case letters are | 1034 [RFC 1034]. Note that while upper and lower case letters are | |||
| allowed in domain names, no signifigance is attached to the case. In | allowed in domain names, no signifigance 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 " " are not permitted. Finally, the use of | extensions with a dNSName " " are not permitted. Finally, the use of | |||
| the DNS representation for Internet mail addresses (wpolk.nist.gov | the DNS representation for Internet mail addresses (wpolk.nist.gov | |||
| instead of wpolk@nist.gov) is not permitted; such identities are to | instead of wpolk@nist.gov) MUST NOT be used; such identities are to | |||
| be encoded as rfc822Name. | be encoded as rfc822Name. | |||
| Note: work is currently underway to specify domain names in interna- | Note: work is currently underway to specify domain names in | |||
| tional character sets. This names will likely not be accomodated by | international character sets. This names will likely not be | |||
| IA5String. Once this work is complete, this profile will be | accomodated by IA5String. Once this work is complete, this profile | |||
| revisited and the appropriate functionality will be added. | will be revisited and the appropriate functionality will be added. | |||
| 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 MUST | stored in the uniformResourceIdentifier (an IA5String). The name MUST | |||
| be a non-relative URL, and MUST follow the URL syntax and encoding | be a non-relative URL, and MUST follow the URL syntax and encoding | |||
| rules specified in [RFC 1738]. The name must include both a scheme | rules specified in [RFC 1738]. The name must include both a scheme | |||
| (e.g., "http" or "ftp") and a scheme-specific-part. The scheme- | (e.g., "http" or "ftp") and a scheme-specific-part. The scheme- | |||
| specific-part must include a fully qualified domain name or IP | specific-part must include a fully qualified domain name or IP | |||
| address as the host. | address as the host. | |||
| As specified in [RFC 1738], the scheme name is not case-sensitive | As specified in [RFC 1738], the scheme name is not case-sensitive | |||
| skipping to change at page 35, line 13 ¶ | skipping to change at page 35, line 42 ¶ | |||
| be case-sensitive. When comparing URIs, conforming implementations | be case-sensitive. When comparing URIs, conforming implementations | |||
| MUST compare the scheme and host without regard to case, but assume | MUST compare the scheme and host without regard to case, but assume | |||
| the remainder of the scheme-specific-part is case sensitive. | the remainder of the scheme-specific-part is case sensitive. | |||
| When the subjectAltName extension contains a DN in the directoryName, | When the subjectAltName extension contains a DN in the directoryName, | |||
| the DN MUST be unique for each subject entity certified by the one CA | the DN MUST be unique for each subject entity certified by the one CA | |||
| as defined by the issuer name field. A CA may issue more than one | as defined by the issuer name field. A CA may issue more than one | |||
| certificate with the same DN to the same subject entity. | certificate with the same DN to the same 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 indi- | the otherName field. The format and semantics of the name are | |||
| cated through the OBJECT IDENTIFIER in the type-id field. The name | indicated through the OBJECT IDENTIFIER in the type-id field. The | |||
| itself is conveyed as value field in otherName. For example, Ker- | name itself is conveyed as value field in otherName. For example, | |||
| beros [RFC 1510] format names can be encoded into the otherName, | Kerberos [RFC 1510] format names can be encoded into the otherName, | |||
| using the krb5PrincipalName OID and the KerberosName syntax as | using the krb5PrincipalName OID and the KerberosName syntax as | |||
| defined in [PKINIT]. | defined in [PKINIT]. | |||
| 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.11. | described in section 4.2.1.11. | |||
| 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 General- | NOT issue certificates with subjectAltNames containing empty | |||
| Name 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 certificication | that encounter such a certificate when processing a certificication | |||
| path is not defined by this profile. | path is not defined by this profile. | |||
| Finally, the semantics of subject alternative names that include | Finally, the semantics of subject alternative names that include | |||
| wildcard characters (e.g., as a placeholder for a set of names) are | wildcard characters (e.g., as a placeholder for a set of names) are | |||
| not addressed by this specification. Applications with specific | not addressed by this specification. Applications with specific | |||
| requirements may use such names but shall define the semantics. | requirements may use such names but shall define the semantics. | |||
| skipping to change at page 36, line 30 ¶ | skipping to change at page 37, line 11 ¶ | |||
| be encoded as in 4.2.1.7. | be encoded as in 4.2.1.7. | |||
| Where present, this extension SHOULD NOT be marked critical. | Where present, this extension SHOULD NOT be marked critical. | |||
| id-ce-issuerAltName OBJECT IDENTIFIER ::= { id-ce 18 } | id-ce-issuerAltName OBJECT IDENTIFIER ::= { id-ce 18 } | |||
| IssuerAltName ::= GeneralNames | IssuerAltName ::= GeneralNames | |||
| 4.2.1.9 Subject Directory Attributes | 4.2.1.9 Subject Directory Attributes | |||
| The subject directory attributes extension is not recommended as an | The subject directory attributes extension is used to convey | |||
| essential part of this profile, but it may be used in local environ- | identification attributes (e.g.,nationality) of the subject. The | |||
| ments. This extension MUST be non-critical. | extension is defined as a sequence of one or more attributes. This | |||
| extension MUST be 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.10 Basic Constraints | 4.2.1.10 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 how deep a certification path may exist | certificate is a CA and how deep a certification path may exist | |||
| through that CA. | through that CA. | |||
| The cA bit indicates if the certified public key may be used to ver- | The cA bit indicates if the certified public key may be used to | |||
| ify signatures on other certificates. If the cA bit is asserted, then | verify signatures on other certificates. If the cA bit is asserted, | |||
| the keyCertSign bit in the key usage extension (see 4.2.1.3) MUST | then the keyCertSign bit in the key usage extension (see 4.2.1.3) | |||
| also be asserted. If the cA bit is not asserted, then the keyCertSign | MUST also be asserted. If the cA bit is not asserted, then the | |||
| bit in the key usage extension MUST NOT be asserted. | keyCertSign bit in the key usage extension MUST NOT be asserted. | |||
| The pathLenConstraint field is meaningful only if cA is set to TRUE. | The pathLenConstraint field is meaningful only if cA is set to TRUE. | |||
| In this case, it gives the maximum number of CA certificates that may | In this case, it gives the maximum number of CA certificates that may | |||
| follow this certificate in a certification path. (Note: One end- | follow this certificate in a certification path. (Note: One end- | |||
| entity certificate will follow the final CA certificate in the path. | entity certificate will follow the final CA certificate in the path. | |||
| The last certificate in a path is considered an end-entity certifi- | The last certificate in a path is considered an end-entity | |||
| cate, whether the subject of the certificate is a CA or not.) A | certificate, whether the subject of the certificate is a CA or not.) | |||
| pathLenConstrinat of zero indicates that only an end-entity certifi- | A pathLenConstrinat of zero indicates that only an end-entity | |||
| cate may follow in the path. Where it appears, the pathLenConstraint | certificate may follow in the path. Where it appears, the | |||
| field MUST be greater than or equal to zero. Where pathLenConstraint | pathLenConstraint field MUST be greater than or equal to zero. Where | |||
| does not appear, there is no limit to the allowed length of the cer- | pathLenConstraint does not appear, there is no limit to the allowed | |||
| tification path. | length of the certification path. | |||
| This extension MUST appear as a critical extension in all CA certifi- | This extension MUST appear as a critical extension in all CA | |||
| cates. This extension MAY appear as a critical or non-critical | certificates. This extension MAY appear as a critical or non- | |||
| extension in end entity certificates. | critical extension in end entity certificates. | |||
| 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.11 Name Constraints | 4.2.1.11 Name Constraints | |||
| The name constraints extension, which MUST be used only in a CA cer- | The name constraints extension, which MUST be used only in a CA | |||
| tificate, 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 shall be located. | subsequent certificates in a certification path shall be located. | |||
| Restrictions may apply to the subject distinguished name or subject | Restrictions may apply to the subject distinguished name or subject | |||
| alternative names. Restrictions apply only when the specified name | alternative names. Restrictions apply only when the specified name | |||
| form is present. If no name of the type is in the certificate, the | form is present. If no name of the type is in the certificate, the | |||
| certificate is acceptable. | certificate is acceptable. | |||
| Name constraints are not applied to certificates whose issuer and | Name constraints are not applied to certificates whose issuer and | |||
| subject are identical. (This could prevent CAs that utilize name | subject are identical. (This could prevent CAs that use name | |||
| constraints from issuing self-signed certificates to implement key | constraints from issuing self-signed certificates to implement key | |||
| rollover.) | rollover.) | |||
| Restrictions are defined in terms of permitted or excluded name sub- | Restrictions are defined in terms of permitted or excluded name | |||
| trees. Any name matching a restriction in the excludedSubtrees field | subtrees. Any name matching a restriction in the excludedSubtrees | |||
| is invalid regardless of information appearing in the permittedSub- | field is invalid regardless of information appearing in the | |||
| trees. This extension MUST be critical. | permittedSubtrees. This extension MUST be critical. | |||
| 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 is always zero, and maximum is always | any name forms, thus minimum is always zero, and maximum is always | |||
| absent. | absent. | |||
| 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 may specify a host or a domain. Examples would be | constraint may specify a host or a domain. Examples would be | |||
| "foo.bar.com"; and ".xyz.com". When the the constraint begins with | "foo.bar.com"; and ".xyz.com". When the the constraint begins with | |||
| a period, it may be expanded with one or more subdomains. That is, | a period, it may be expanded with one or more subdomains. That is, | |||
| the constraint ".xyz.com" is satisfied by both abc.xyz.com and | the constraint ".xyz.com" is satisfied by both abc.xyz.com and | |||
| abc.def.xyz.com. However, the constraint ".xyz.com" is not satisfied | abc.def.xyz.com. However, the constraint ".xyz.com" is not satisfied | |||
| by "xyz.com". When the constraint does not begin with a period, it | by "xyz.com". When the constraint does not begin with a period, it | |||
| specifies a host. | specifies a host. | |||
| A name constraint for Internat mail addresses may specify a particu- | A name constraint for Internet mail addresses may specify a | |||
| lar mailbox, all addresses at a particular host, or all mailboxes in | particular mailbox, all addresses at a particular host, or all | |||
| a domain. To indicate a particular mailbox, the constraint is the | mailboxes in a domain. To indicate a particular mailbox, the | |||
| complete mail address. For example, "root@xyz.com" indicates the | constraint is the complete mail address. For example, "root@xyz.com" | |||
| root mailbox on the host "xyz.com". To indicate all Internet mail | indicates the root mailbox on the host "xyz.com". To indicate all | |||
| addresses on a particular host, the constraint is specified as the | Internet mail addresses on a particular host, the constraint is | |||
| host name. For example, the constraint "xyz.com" is satisfied by any | specified as the host name. For example, the constraint "xyz.com" is | |||
| mail address at the host "xyz.com". To specify any address within a | satisfied by any mail address at the host "xyz.com". To specify any | |||
| domain, the constraint is specified with a leading period (as with | address within a domain, the constraint is specified with a leading | |||
| URIs). For example, ".xyz.com" indicates all the Internet mail | period (as with URIs). For example, ".xyz.com" indicates all the | |||
| addresses in the domain "xyz.com", but not Internet mail addresses on | Internet mail addresses in the domain "xyz.com", but not Internet | |||
| the host "xyz.com". | mail addresses on the host "xyz.com". | |||
| DNS name restrictions are expressed as foo.bar.com. Any DNS name that | DNS name restrictions are expressed as foo.bar.com. Any DNS name that | |||
| can be constructed by simply adding to the left hand side of the name | can be constructed by simply adding to the left hand side of the name | |||
| satisfies the name constraint. For example, www.foo.bar.com would | satisfies the name constraint. For example, www.foo.bar.com would | |||
| satisfy the constraint but foo1.bar.com would not. | satisfy the constraint but foo1.bar.com would not. | |||
| Legacy implementations exist where an RFC 822 name is embedded in the | Legacy implementations exist where an RFC 822 name is embedded in the | |||
| subject distinguished name in an attribute of type EmailAddress (see | subject distinguished name in an attribute of type EmailAddress (see | |||
| sec. 4.1.2.6). When rfc822 names are constrained, but the certificate | sec. 4.1.2.6). When rfc822 names are constrained, but the certificate | |||
| does not include a subject alternative name, the rfc822 name con- | does not include a subject alternative name, the rfc822 name | |||
| straint MUST be applied to the attribute of type EmailAddress in the | constraint MUST be applied to the attribute of type EmailAddress in | |||
| subject distinguished name. The ASN.1 syntax for EmailAddress and | the subject distinguished name. The ASN.1 syntax for EmailAddress | |||
| the corresponding OID are supplied in Appendix A and B. | and the corresponding OID are supplied in Appendix A and B. | |||
| 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 and to the subjectAltName extensions of type | field in the certificate and to the subjectAltName extensions of type | |||
| directoryName. Restrictions of the form x400Address MUST be applied | directoryName. Restrictions of the form x400Address MUST be applied | |||
| to subjectAltName extensions of type x400Address. | to subjectAltName extensions of type x400Address. | |||
| When applying restrictions of the form directoryName, an implementa- | When applying restrictions of the form directoryName, an | |||
| tion MUST compare DN attributes. At a minimum, implementations MUST | implementation MUST compare DN attributes. At a minimum, | |||
| perform the DN comparison rules specified in Section 4.1.2.4. CAs | implementations MUST perform the DN comparison rules specified in | |||
| issuing certificates with a restriction of the form directoryName | Section 4.1.2.4. CAs issuing certificates with a restriction of the | |||
| SHOULD NOT rely on implementation of the full ISO DN name comparison | form directoryName SHOULD NOT rely on implementation of the full ISO | |||
| algorithm. This implies name restrictions shall be stated identi- | DN name comparison algorithm. This implies name restrictions shall | |||
| cally to the encoding used in the subject field or subjectAltName | be stated identically to the encoding used in the subject field or | |||
| extension. | subjectAltName extension. | |||
| The syntax of iPAddress MUST be as described in section 4.2.1.7 with | The syntax of iPAddress MUST be as described in section 4.2.1.7 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 1519 (CIDR) to represent an | octets, encoded in the style of RFC 1519 (CIDR) to represent an | |||
| address range.[RFC 1519] For IPv6 addresses, the ipAddress field | address range.[RFC 1519] For IPv6 addresses, the ipAddress field | |||
| MUST contain 32 octets similarly encoded. For example, a name con- | MUST contain 32 octets similarly encoded. For example, a name | |||
| straint for "class C" subnet 10.9.8.0 shall be represented as the | constraint for "class C" subnet 10.9.8.0 shall be represented as the | |||
| octets 0A 09 08 00 FF FF FF 00, representing the CIDR notation | octets 0A 09 08 00 FF FF FF 00, representing the CIDR notation | |||
| 10.9.8.0/255.255.255.0. | 10.9.8.0/255.255.255.0. | |||
| The syntax and semantics for name constraints for otherName, ediPar- | The syntax and semantics for name constraints for otherName, | |||
| tyName, and registeredID are not defined by this specification. | ediPartyName, and registeredID are not defined by this specification. | |||
| 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 { | |||
| skipping to change at page 39, line 34 ¶ | skipping to change at page 40, line 14 ¶ | |||
| 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.12 Policy Constraints | 4.2.1.12 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 identif- | that each certificate in a path contain an acceptable policy | |||
| ier. | 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 | |||
| indicates that policy mapping may be processed in certificates issued | indicates that policy mapping may be processed in certificates issued | |||
| by the subject of this certificate, but not in additional certifi- | by the subject of this certificate, but not in additional | |||
| cates in the path. | certificates in the path. | |||
| If the requireExplicitPolicy field is present, subsequent certifi- | If the requireExplicitPolicy field is present, subsequent | |||
| cates shall include an acceptable policy identifier. The value of | certificates shall include an acceptable policy identifier. The value | |||
| requireExplicitPolicy indicates the number of additional certificates | of requireExplicitPolicy indicates the number of additional | |||
| that may appear in the path before an explicit policy is required. | certificates that may appear in the path before an explicit policy is | |||
| An acceptable policy identifier is the identifier of a policy | required. An acceptable policy identifier is the identifier of a | |||
| required by the user of the certification path or the identifier of a | policy required by the user of the certification path or the | |||
| policy which has been declared equivalent through policy mapping. | identifier of a policy which has been declared equivalent through | |||
| policy mapping. | ||||
| Conforming CAs MUST NOT issue certificates where policy constraints | Conforming CAs MUST NOT issue certificates where policy constraints | |||
| is a null sequence. That is, at least one of the inhibitPolicyMapping | is a null sequence. That is, at least one of the inhibitPolicyMapping | |||
| field or the requireExplicitPolicy field MUST be present. The | field or the requireExplicitPolicy field MUST be present. The | |||
| behavior of clients that encounter a null policy constraints field is | behavior of clients that encounter a null policy constraints field is | |||
| not addressed in this profile. | not addressed in this profile. | |||
| This extension may be critical or non-critical. | This extension may be critical or non-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.13 Extended key usage field | 4.2.1.13 Extended key usage field | |||
| This field indicates one or more purposes for which the certified | This field indicates one or more purposes for which the certified | |||
| public key may be used, in addition to or in place of the basic pur- | public key may be used, in addition to or in place of the basic | |||
| poses indicated in the key usage extension field. This field is | purposes indicated in the key usage extension field. This field is | |||
| defined as follows: | 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 | |||
| KeyPurposeId ::= OBJECT IDENTIFIER | KeyPurposeId ::= OBJECT IDENTIFIER | |||
| Key purposes may be defined by any organization with a need. Object | Key purposes may be defined by any organization with a need. Object | |||
| identifiers used to identify key purposes shall be assigned in accor- | identifiers used to identify key purposes shall be assigned in | |||
| dance with IANA or ITU-T Rec. X.660 | ISO/IEC/ITU 9834-1. | accordance with IANA or ITU-T Rec. X.660 | ISO/IEC/ITU 9834-1. | |||
| This extension may, at the option of the certificate issuer, be | This extension may, at the option of the certificate issuer, be | |||
| either critical or non-critical. | either critical or non-critical. | |||
| If the extension is flagged critical, then the certificate MUST be | If the extension is flagged critical, then the certificate MUST only | |||
| used only for one of the purposes indicated. | be used for one of the purposes indicated. If multiple purposes are | |||
| indicated the application need not recognize all purposes indicated, | ||||
| as long as the intended purpose is present and recognized. | ||||
| If the extension is flagged non-critical, then it indicates the | If the extension is flagged non-critical, then it indicates the | |||
| intended purpose or purposes of the key, and may be used in finding | intended purpose or purposes of the key, and may be used in finding | |||
| the correct key/certificate of an entity that has multiple | the correct key/certificate of an entity that has multiple | |||
| keys/certificates. It is an advisory field and does not imply that | keys/certificates. It is an advisory field and does not imply that | |||
| usage of the key is restricted by the certification authority to the | usage of the key is restricted by the certification authority to the | |||
| purpose indicated. Certificate using applications may nevertheless | purpose indicated. Certificate using applications may nevertheless | |||
| require that a particular purpose be indicated in order for the cer- | require that a particular purpose be indicated in order for the | |||
| tificate to be acceptable to that application. | certificate to be acceptable to that application. | |||
| If a certificate contains both a critical key usage field and a crit- | If a certificate contains both a critical key usage field and a | |||
| ical extended key usage field, then both fields MUST be processed | critical extended key usage field, then both fields MUST be processed | |||
| independently and the certificate MUST only be used for a purpose | independently and the certificate MUST only be used for a purpose | |||
| consistent with both fields. If there is no purpose consistent with | consistent with both fields. If there is no purpose consistent with | |||
| both fields, then the certificate MUST NOT be used for any purpose. | both fields, then the certificate MUST NOT be used for any purpose. | |||
| The following key usage purposes are defined by this profile: | The following key usage purposes are defined by this profile: | |||
| id-kp OBJECT IDENTIFIER ::= { id-pkix 3 } | id-kp OBJECT IDENTIFIER ::= { id-pkix 3 } | |||
| id-kp-serverAuth OBJECT IDENTIFIER ::= {id-kp 1} | id-kp-serverAuth OBJECT IDENTIFIER ::= {id-kp 1} | |||
| -- TLS Web server authentication | -- TLS Web server authentication | |||
| skipping to change at page 41, line 47 ¶ | skipping to change at page 42, line 32 ¶ | |||
| -- source. Key usage bits that may be consistent: digitalSignature, | -- source. Key usage bits that may be consistent: digitalSignature, | |||
| -- nonRepudiation | -- nonRepudiation | |||
| 4.2.1.14 CRL Distribution Points | 4.2.1.14 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 Distribution- | The cRLDistributionPoints extension is a SEQUENCE of | |||
| Point. A DistributionPoint consists of three fields, each of which | DistributionPoint. A DistributionPoint consists of three fields, | |||
| is optional: the name of the DistributionPoint, ReasonsFlags, and the | each of which is optional: the name of the DistributionPoint, | |||
| cRLIssuer. While each component is optional, a DistributionPoint | ReasonsFlags, and the cRLIssuer. While each component is optional, a | |||
| MUST NOT consist of only the ReasonsFlags field. If the distribution- | DistributionPoint MUST NOT consist of only the ReasonsFlags field. If | |||
| Point omits cRLIssuer, the CRL MUST be issued by the CA that issued | the distributionPoint omits cRLIssuer, the CRL MUST be issued by the | |||
| the certificate. If the distributionPointName is absent, cRLIssuer | CA that issued the certificate. If the distributionPointName is | |||
| MUST be present and include a Name corresponding to an X.500 or LDAP | absent, cRLIssuer MUST be present and include a Name corresponding to | |||
| directory entry where the CRL is located. | an X.500 or LDAP directory entry where the CRL is located. | |||
| If the cRLDistributionPoints extension contains a Distribution- | If the cRLDistributionPoints extension contains a | |||
| PointName of type URI, the following semantics MUST be assumed: the | DistributionPointName of type URI, the following semantics MUST be | |||
| URI is a pointer to the current CRL for the associated reasons and | assumed: the URI is a pointer to the current CRL for the associated | |||
| will be issued by the associated cRLIssuer. The expected values for | reasons and will be issued by the associated cRLIssuer. The expected | |||
| the URI are those defined in 4.2.1.7. Processing rules for other | values for the URI are those defined in 4.2.1.7. Processing rules for | |||
| values are not defined by this specification. If the distribution- | other values are not defined by this specification. If the | |||
| Point omits reasons, the CRL MUST include revocations for all rea- | distributionPoint omits reasons, the CRL MUST include revocations for | |||
| sons. | all reasons. | |||
| id-ce-cRLDistributionPoints OBJECT IDENTIFIER ::= { id-ce 31 } | id-ce-cRLDistributionPoints OBJECT IDENTIFIER ::= { id-ce 31 } | |||
| CRLDistributionPoints ::= SEQUENCE SIZE (1..MAX) OF DistributionPoint | CRLDistributionPoints ::= SEQUENCE SIZE (1..MAX) OF DistributionPoint | |||
| DistributionPoint ::= SEQUENCE { | DistributionPoint ::= SEQUENCE { | |||
| distributionPoint [0] DistributionPointName OPTIONAL, | distributionPoint [0] DistributionPointName OPTIONAL, | |||
| reasons [1] ReasonFlags OPTIONAL, | reasons [1] ReasonFlags OPTIONAL, | |||
| cRLIssuer [2] GeneralNames OPTIONAL } | cRLIssuer [2] GeneralNames OPTIONAL } | |||
| DistributionPointName ::= CHOICE { | DistributionPointName ::= CHOICE { | |||
| fullName [0] GeneralNames, | fullName [0] GeneralNames, | |||
| nameRelativeToCRLIssuer [1] RelativeDistinguishedName } | nameRelativeToCRLIssuer [1] RelativeDistinguishedName } | |||
| skipping to change at page 42, line 47 ¶ | skipping to change at page 43, line 32 ¶ | |||
| certificateHold (6) } | certificateHold (6) } | |||
| 4.2.1.15 Inhibit Any-Policy | 4.2.1.15 Inhibit Any-Policy | |||
| The inhibit any-policy extension can be used in certificates issued | The inhibit any-policy extension can be used in certificates issued | |||
| to CAs. The inhibit any-policy indicates that the special any-policy | to CAs. The inhibit any-policy indicates that the special any-policy | |||
| OID, with the value {2 5 29 32 0}, is not considered an explicit | OID, with the value {2 5 29 32 0}, is not considered an explicit | |||
| match for other certificate policies. The value indicates the number | match for other certificate policies. The value indicates the number | |||
| of additional certificates that may appear in the path before any- | of additional certificates that may appear in the path before any- | |||
| policy is no longer permitted. For example, a value of one indicates | policy is no longer permitted. For example, a value of one indicates | |||
| that any-policy may be processed in certificates issued by the sub- | that any-policy may be processed in certificates issued by the | |||
| ject of this certificate, but not in additional certificates in the | subject of this certificate, but not in additional certificates in | |||
| path. | the path. | |||
| This extension MUST be critical. | This extension MUST be 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.16 Freshest CRL (a.k.a. Delta CRL Distribution Point) | 4.2.1.16 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 non-critical. Further discussion of | obtained. The extension MUST be non-critical. Further discussion of | |||
| CRL management is contained in section 5. | CRL management is contained in section 5. | |||
| The same syntax is used for this extension and the cRLDistribution- | The same syntax is used for this extension and the | |||
| Points extension, and is described in section 4.2.1.14. The same | cRLDistributionPoints extension, and is described in section | |||
| conventions apply to both extensions. | 4.2.1.14. 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 one new extension for use in the Internet Public | This section defines one new extension for use in the Internet Public | |||
| Key Infrastructure. This extension may be used to direct applica- | Key Infrastructure. This extension may be used to direct | |||
| tions to identify an on-line validation service supporting the issu- | applications to identify an on-line validation service supporting the | |||
| ing CA. As the information may be available in multiple forms, each | issuing CA. As the information may be available in multiple forms, | |||
| extension is a sequence of IA5String values, each of which represents | each extension is a sequence of IA5String values, each of which | |||
| a URI. The URI implicitly specifies the location and format of the | represents a URI. The URI implicitly specifies the location and | |||
| information and the method for obtaining the information. | format of the information and the method for obtaining the | |||
| information. | ||||
| An object identifier is defined for the private extension. The | An object identifier is defined for the private extension. The | |||
| object identifier associated with the private extension is defined | object identifier associated with the private extension is defined | |||
| under the arc id-pe within the id-pkix name space. Any future exten- | under the arc id-pe within the id-pkix name space. Any future | |||
| sions defined for the Internet PKI will also be defined under the arc | extensions defined for the Internet PKI will also be defined under | |||
| 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 CA | The authority information access extension indicates how to access CA | |||
| skipping to change at page 44, line 38 ¶ | skipping to change at page 45, line 25 ¶ | |||
| by accessLocation. | by accessLocation. | |||
| This profile defines one OID for accessMethod. The id-ad-caIssuers | This profile defines one OID for accessMethod. The id-ad-caIssuers | |||
| OID is used when the additional information lists CAs that have | OID is used when the additional information lists CAs that have | |||
| issued certificates superior to the CA that issued the certificate | issued certificates superior to the CA that issued the certificate | |||
| containing this extension. The referenced CA Issuers description is | containing this extension. The referenced CA Issuers description is | |||
| intended to aid certificate users in the selection of a certification | intended to aid certificate users in the selection of a certification | |||
| path that terminates at a point trusted by the certificate user. | path that terminates at a point trusted by the certificate user. | |||
| When id-ad-caIssuers appears as accessInfoType, the accessLocation | When id-ad-caIssuers appears as accessInfoType, the accessLocation | |||
| field describes the referenced description server and the access pro- | field describes the referenced description server and the access | |||
| tocol to obtain the referenced description. The accessLocation field | protocol to obtain the referenced description. The accessLocation | |||
| is defined as a GeneralName, which can take several forms. Where the | field is defined as a GeneralName, which can take several forms. | |||
| information is available via http, ftp, or ldap, accessLocation MUST | Where the information is available via http, ftp, or ldap, | |||
| be a uniformResourceIdentifier. Where the information is available | accessLocation MUST be a uniformResourceIdentifier. Where the | |||
| via the directory access protocol (dap), accessLocation MUST be a | information is available via the directory access protocol (dap), | |||
| directoryName. When the information is available via electronic mail, | accessLocation MUST be a directoryName. When the information is | |||
| accessLocation MUST be an rfc822Name. The semantics of other name | available via electronic mail, accessLocation MUST be an rfc822Name. | |||
| forms of accessLocation (when accessMethod is id-ad-caIssuers) are | The semantics of other name forms of accessLocation (when | |||
| not defined by this specification. The information | accessMethod is id-ad-caIssuers) are not defined by this | |||
| specification. | ||||
| [RFC 2560] defines the access descriptor for the Online Certificate | [RFC 2560] defines the access descriptor for the Online Certificate | |||
| Status Protocol. Additional access descriptors may be defined in | Status Protocol. When this access descriptor appears in the | |||
| authority information access extension, this indicates the issuer | ||||
| provides revocation information for this certificate through the | ||||
| named OCSP service. Additional access descriptors may be defined in | ||||
| other PKIX specifications. | other PKIX specifications. | |||
| 4.2.2.2 Subject Information Access | ||||
| The subject information access extension indicates how to access | ||||
| information and services for the subject of the certificate in which | ||||
| the extension appears. When the subject is a CA, information and | ||||
| services may include certificate validation services and CA policy | ||||
| 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 contents of this extension are defined in the protocol | ||||
| specifications for the suported services. This extension may be | ||||
| included in subject or CA certificates, and it MUST be non-critical. | ||||
| id-pe-subjectInfoAccess OBJECT IDENTIFIER ::= { id-pe 11 } | ||||
| SubjectInfoAccessSyntax ::= | ||||
| SEQUENCE SIZE (1..MAX) OF AccessDescription | ||||
| AccessDescription ::= SEQUENCE { | ||||
| accessMethod OBJECT IDENTIFIER, | ||||
| accessLocation GeneralName } | ||||
| Each entry in the sequence SubjectInfoAccessSyntax describes the | ||||
| format and location of additional information provided by the subject | ||||
| of the certificate in which this extension appears. The type and | ||||
| format of the information is specified by the accessMethod field; the | ||||
| accessLocation field specifies the location of the information. The | ||||
| retrieval mechanism may be implied by the accessMethod or specified | ||||
| by accessLocation. | ||||
| This profile defines one accessMethod to be used when the subject is | ||||
| a CA, and one access mehod to be used when the subject is an end | ||||
| entity. Additional access methods may be defined in the future in | ||||
| the protocol specifications for other services. | ||||
| The id-ad-caRepository OID is used when the subject is a CA, and | ||||
| publishes its certificates and CRLs (if issued) in a repository. The | ||||
| accessLocation field is defined as a GeneralName, which can take | ||||
| several forms. Where the information is available via http, ftp, or | ||||
| ldap, accessLocation MUST be a uniformResourceIdentifier. Where the | ||||
| information is available via the directory access protocol (dap), | ||||
| accessLocation MUST be a directoryName. When the information is | ||||
| available via electronic mail, accessLocation MUST be an rfc822Name. | ||||
| The semantics of other name forms of of accessLocation (when | ||||
| accessMethod is id-ad-caRepository) are not defined by this | ||||
| specification. | ||||
| The id-ad-timeStamping OID is used when the subject offers | ||||
| timestamping services using the Time STamp Protocol defined in [PKIX | ||||
| TSA]. Where the timestamping services are available via http or ftp, | ||||
| accessLocation MUST be a uniformResourceIdentifier. Where the | ||||
| timestamping services are available via electronic mail, | ||||
| accessLocation MUST be an rfc822Name. Where timestamping services | ||||
| are available using TCP/IP, the dNSName and ipAddress name forms may | ||||
| be used. The semantics of other name forms of accessLocation (when | ||||
| accessMethod is id-ad-timeStamping) are not defined by this | ||||
| specification. | ||||
| Additional access descriptors may be defined in other PKIX | ||||
| specifications. | ||||
| id-ad OBJECT IDENTIFIER ::= { id-pkix 48 } | ||||
| id-ad-caRepository OBJECT IDENTIFIER ::= { id-ad 5 } | ||||
| id-ad-timeStamping OBJECT IDENTIFIER ::= { id-ad 3 } | ||||
| 5 CRL and CRL Extensions Profile | 5 CRL and CRL Extensions Profile | |||
| As described above, one goal of this X.509 v2 CRL profile is to | As described 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 speci- | To achieve this goal, guidelines for the use of extensions are | |||
| fied, and some assumptions are made about the nature of information | specified, and some assumptions are made about the nature of | |||
| 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 | |||
| profile establishes a common baseline for generic applications | profile establishes a common baseline for generic applications | |||
| requiring broad interoperability. The profile defines a baseline set | requiring broad interoperability. The profile defines a baseline set | |||
| of information that can be expected in every CRL. Also, the profile | of information that can be expected in every CRL. Also, the profile | |||
| defines common locations within the CRL for frequently used attri- | defines common locations within the CRL for frequently used | |||
| butes as well as common representations for these attributes. | attributes as well as common representations for these attributes. | |||
| This profile does not define any private Internet CRL extensions or | This profile does not define any private Internet CRL extensions or | |||
| CRL entry extensions. | 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. Conforming CAs that | certificate status mechanisms are provided. Conforming CAs that | |||
| issue CRLs MUST issue version 2 CRLs, and CAs MUST include the date | issue CRLs MUST issue version 2 CRLs, and CAs MUST include the date | |||
| by which the next CRL will be issued in the nextUpdate field (see | by which the next CRL will be issued in the nextUpdate field (see | |||
| sec. 5.1.2.5), the CRL number extension (see sec. 5.2.3) and the | sec. 5.1.2.5), the CRL number extension (see sec. 5.2.3) and the | |||
| authority key identifier extension (see sec. 5.2.1). Conforming | authority key identifier extension (see sec. 5.2.1). Conforming | |||
| applications are required to process version 1 and 2 CRLs. | applications are required to process version 1 and 2 CRLs. | |||
| 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 encod- | the data that is to be signed is ASN.1 DER encoded. ASN.1 DER | |||
| ing 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 } | |||
| TBSCertList ::= SEQUENCE { | TBSCertList ::= SEQUENCE { | |||
| version Version OPTIONAL, | version Version OPTIONAL, | |||
| -- if present, shall be v2 | -- if present, shall be v2 | |||
| signature AlgorithmIdentifier, | signature AlgorithmIdentifier, | |||
| skipping to change at page 46, line 32 ¶ | skipping to change at page 48, line 41 ¶ | |||
| 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 certifi- | issue date of the next list, the optional list of revoked | |||
| cates, and optional CRL extensions. When there are no revoked certi- | certificates, and optional CRL extensions. When there are no revoked | |||
| ficates, the revoked certificates list is absent. When one or more | certificates, the revoked certificates list is absent. When one or | |||
| certificates are revoked, each entry on the revoked certificate list | more certificates are revoked, each entry on the revoked certificate | |||
| is defined by a sequence of user certificate serial number, revoca- | list is defined by a sequence of user certificate serial number, | |||
| tion 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 CA to sign the CertificateList. The field | the algorithm used by the CA to sign the CertificateList. The field | |||
| is of type AlgorithmIdentifier, which is defined in section 4.1.1.2. | is of type AlgorithmIdentifier, which is defined in section 4.1.1.2. | |||
| [PKIX ALGS] lists the supported algorithms for this specification. | [PKIX ALGS] lists the supported algorithms for this specification. | |||
| Conforming CAs MUST use the algorithm identifiers presented in [PKIX | Conforming CAs MUST use the algorithm identifiers presented in [PKIX | |||
| ALGS] when signing with a supported signature algorithm. | ALGS] when signing with a supported signature algorithm. | |||
| This field MUST contain the same algorithm identifier as the signa- | This field MUST contain the same algorithm identifier as the | |||
| ture field in the sequence tbsCertList (see sec. 5.1.2.2). | signature field in the sequence tbsCertList (see sec. 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 then ASN.1 encoded as a BIT STRING and included in the CRL's sig- | is then ASN.1 encoded as a BIT STRING and included in the CRL's | |||
| natureValue field. The details of this process are specified for each | signatureValue field. The details of this process are specified for | |||
| of the supported algorithms in [PKIX ALGS]. | each of the supported algorithms in [PKIX ALGS]. | |||
| 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, the date and time the CRL | issuer, the algorithm used to sign the CRL, the date and time the CRL | |||
| was issued, and the date and time by which the CA will issue the next | was issued, and the date and time by which the CA will issue the next | |||
| CRL. | CRL. | |||
| Optional fields include lists of revoked certificates and CRL exten- | Optional fields include lists of revoked certificates and CRL | |||
| sions. The revoked certificate list is optional to support the case | extensions. The revoked certificate list is optional to support the | |||
| where a CA has not revoked any unexpired certificates that it has | case where a CA has not revoked any unexpired certificates that it | |||
| issued. The profile requires conforming CAs to use the CRL extension | has issued. The profile requires conforming CAs to use the CRL | |||
| cRLNumber in all CRLs issued. | extension cRLNumber 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. [PKIX ALGS] lists OIDs for the most popular signa- | to sign the CRL. [PKIX ALGS] lists OIDs for the most popular | |||
| ture algorithms used in the Internet PKI. | signature algorithms used in the Internet PKI. | |||
| This field MUST contain the same algorithm identifier as the signa- | This field MUST contain the same algorithm identifier as the | |||
| tureAlgorithm field in the sequence CertificateList (see section | signatureAlgorithm field in the sequence CertificateList (see 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 who has signed and issued the | The issuer name identifies the entity who has signed and issued the | |||
| CRL. The issuer identity is carried in the issuer name field. Alter- | CRL. The issuer identity is carried in the issuer name field. | |||
| native name forms may also appear in the issuerAltName extension (see | Alternative name forms may also appear in the issuerAltName extension | |||
| sec. 5.2.2). The issuer name field MUST contain an X.500 dis- | (see sec. 5.2.2). The issuer name field MUST contain an X.500 | |||
| tinguished name (DN). The issuer name field is defined as the X.501 | distinguished name (DN). The issuer name field is defined as the | |||
| type Name, and MUST follow the encoding rules for the issuer name | X.501 type Name, and MUST follow the encoding rules for the issuer | |||
| field in the certificate (see sec. 4.1.2.4). | name field in the certificate (see sec. 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. | |||
| CAs conforming to this profile that issue CRLs MUST encode thisUpdate | CAs conforming to this profile that issue CRLs MUST encode thisUpdate | |||
| as UTCTime for dates through the year 2049. CAs conforming to this | as UTCTime for dates through the year 2049. CAs conforming to this | |||
| profile that issue CRLs MUST encode thisUpdate as GeneralizedTime for | profile that issue CRLs MUST encode thisUpdate as GeneralizedTime for | |||
| dates in the year 2050 or later. | dates in the year 2050 or later. | |||
| Where encoded as UTCTime, thisUpdate MUST be specified and inter- | Where encoded as UTCTime, thisUpdate MUST be specified and | |||
| preted as defined in section 4.1.2.5.1. Where encoded as General- | interpreted as defined in section 4.1.2.5.1. Where encoded as | |||
| izedTime, thisUpdate MUST be specified and interpreted as defined in | GeneralizedTime, thisUpdate MUST be specified and interpreted as | |||
| 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. CAs SHOULD issue | not be issued any later than the indicated date. CAs SHOULD issue | |||
| CRLs with a nextUpdate time equal to or later than all previous CRLs. | CRLs with a nextUpdate time equal to or later than all previous CRLs. | |||
| nextUpdate may be encoded as UTCTime or GeneralizedTime. | nextUpdate may be encoded as UTCTime or GeneralizedTime. | |||
| This profile requires inclusion of nextUpdate in all CRLs issued by | This profile requires inclusion of nextUpdate in all CRLs issued by | |||
| conforming CAs. Note that the ASN.1 syntax of TBSCertList describes | conforming CAs. Note that the ASN.1 syntax of TBSCertList describes | |||
| this field as OPTIONAL, which is consistent with the ASN.1 structure | this field as OPTIONAL, which is consistent with the ASN.1 structure | |||
| defined in [X.509]. The behavior of clients processing CRLs which | defined in [X.509]. The behavior of clients processing CRLs which | |||
| omit nextUpdate is not specified by this profile. | omit nextUpdate is not specified by this profile. | |||
| CAs conforming to this profile that issue CRLs MUST encode nextUpdate | CAs conforming to this profile that issue CRLs MUST encode nextUpdate | |||
| as UTCTime for dates through the year 2049. CAs conforming to this | as UTCTime for dates through the year 2049. CAs conforming to this | |||
| profile that issue CRLs MUST encode nextUpdate as GeneralizedTime for | profile that issue CRLs MUST encode nextUpdate as GeneralizedTime for | |||
| dates in the year 2050 or later. | dates in the year 2050 or later. | |||
| Where encoded as UTCTime, nextUpdate MUST be specified and inter- | Where encoded as UTCTime, nextUpdate MUST be specified and | |||
| preted as defined in section 4.1.2.5.1. Where encoded as General- | interpreted as defined in section 4.1.2.5.1. Where encoded as | |||
| izedTime, nextUpdate MUST be specified and interpreted as defined in | GeneralizedTime, nextUpdate MUST be specified and interpreted as | |||
| 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 | |||
| is absent. Otherwise, revoked certificates are listed by their | is absent. Otherwise, revoked certificates are listed by their | |||
| serial numbers. Certificates revoked by the CA are uniquely identi- | serial numbers. Certificates revoked by the CA are uniquely | |||
| fied by the certificate serial number. The date on which the revoca- | identified by the certificate serial number. The date on which the | |||
| tion occurred is specified. The time for revocationDate MUST be | revocation occurred is specified. The time for revocationDate MUST | |||
| expressed as described in section 5.1.2.4. Additional information may | be expressed as described in section 5.1.2.4. Additional information | |||
| 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 (see sec. 5.1.2.1). | This field may only appear if the version is 2 (see sec. 5.1.2.1). | |||
| If present, this field is a SEQUENCE of one or more CRL extensions. | If present, this field is a SEQUENCE of one or more CRL extensions. | |||
| CRL extensions are discussed in section 5.2. | CRL extensions are discussed in section 5.2. | |||
| 5.2 CRL Extensions | 5.2 CRL Extensions | |||
| The extensions defined by ANSI X9 and ISO/IEC/ITU for X.509 v2 CRLs | The extensions defined by ANSI X9 and ISO/IEC/ITU for X.509 v2 CRLs | |||
| [X.509] [X9.55] provide methods for associating additional attributes | [X.509] [X9.55] provide methods for associating additional attributes | |||
| with CRLs. The X.509 v2 CRL format also allows communities to define | with CRLs. The X.509 v2 CRL format also allows communities to define | |||
| private extensions to carry information unique to those communities. | private extensions to carry information unique to those communities. | |||
| Each extension in a CRL may be designated as critical or non- | Each extension in a CRL may be designated as critical or non- | |||
| critical. A CRL validation MUST fail if it encounters a critical | critical. A CRL validation MUST fail if it encounters a critical | |||
| extension which it does not know how to process. However, an | extension which it does not know how to process. However, an | |||
| unrecognized non-critical extension may be ignored. The following | unrecognized non-critical extension may be ignored. The following | |||
| subsections present those extensions used within Internet CRLs. Com- | subsections present those extensions used within Internet CRLs. | |||
| munities may elect to include extensions in CRLs which are not | Communities may elect to include extensions in CRLs which are not | |||
| defined in this specification. However, caution should be exercised | defined in this specification. However, caution should be exercised | |||
| in adopting any critical extensions in CRLs which might be used in a | in adopting any critical extensions in CRLs which might be used in a | |||
| general context. | general context. | |||
| Conforming CAs that issue CRLs are required to include the authority | Conforming CAs that issue CRLs are required to include the authority | |||
| key identifier (see sec. 5.2.1) and the CRL number (see sec. 5.2.3) | key identifier (see sec. 5.2.1) and the CRL number (see sec. 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 identify- | The authority key identifier extension provides a means of | |||
| ing the public key corresponding to the private key used to sign a | identifying the public key corresponding to the private key used to | |||
| CRL. The identification can be based on either the key identifier | sign a CRL. The identification can be based on either the key | |||
| (the subject key identifier in the CRL signer's certificate) or on | identifier (the subject key identifier in the CRL signer's | |||
| the issuer name and serial number. This extension is especially use- | certificate) or on the issuer name and serial number. This extension | |||
| ful where an issuer has more than one signing key, either due to mul- | is especially useful where an issuer has more than one signing key, | |||
| tiple concurrent key pairs or due to changeover. | either due to multiple concurrent key pairs or due to changeover. | |||
| Conforming CAs MUST use the key identifier method, and MUST include | Conforming CAs MUST use the key identifier method, and MUST include | |||
| this extension in all CRLs issued. | 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 names extension allows additional identities | The issuer alternative names extension allows additional identities | |||
| to be associated with the issuer of the CRL. Defined options include | to be associated with the issuer of the CRL. Defined options include | |||
| an rfc822 name (electronic mail address), a DNS name, an IP address, | an rfc822 name (electronic mail address), a DNS name, an IP address, | |||
| and a URI. Multiple instances of a name and multiple name forms may | and a URI. Multiple instances of a name and multiple name forms may | |||
| be included. Whenever such identities are used, the issuer alterna- | be included. Whenever such identities are used, the issuer | |||
| tive name extension MUST be used. | alternative name extension MUST be used. | |||
| The issuerAltName extension SHOULD NOT be marked critical. | The issuerAltName extension SHOULD NOT be marked 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.8. | 4.2.1.8. | |||
| 5.2.3 CRL Number | 5.2.3 CRL Number | |||
| The CRL number is a non-critical CRL extension which conveys a mono- | The CRL number is a non-critical CRL extension which conveys a | |||
| tonically increasing sequence number for each CRL issued by a CA. | monotonically increasing sequence number for each CRL issued by a CA. | |||
| This extension allows users to easily determine when a particular CRL | This extension allows users to easily determine when a particular CRL | |||
| supersedes another CRL. CAs conforming to this profile MUST include | supersedes another CRL. CAs conforming to this profile MUST include | |||
| this extension in all CRLs. | this extension in all CRLs. | |||
| 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 sig- | that would appear in a complete CRL. The use of delta CRLs can | |||
| nificantly reduce network load and processing time in some environ- | significantly reduce network load and processing time in some | |||
| ments. Delta CRLs are generally smaller than the CRLs they update, | environments. Delta CRLs are generally smaller than the CRLs they | |||
| so applications that obtain delta CRLs consume less network bandwidth | update, so applications that obtain delta CRLs consume less network | |||
| than applications that obtain the corresponding complete CRLs. | bandwidth than applications that obtain the corresponding complete | |||
| Applications which store revocation information in a format other | CRLs. Applications which store revocation information in a format | |||
| than the CRL structure can add new revocation information to the | other than the CRL structure can add new revocation information to | |||
| local database without reprocessing information. | the local database without reprocessing information. | |||
| The delta CRL indicator extension contains a single value of type | The delta CRL indicator extension contains a single value of type | |||
| BaseCRLNumber. This value identifies the CRL number of the base CRL | BaseCRLNumber. This value identifies the CRL number of the base CRL | |||
| that was used as the foundation in the generation of this delta CRL. | that was used as the foundation in the generation of this delta CRL. | |||
| The referenced base CRL is a CRL that was explicitly issued as a CRL | The referenced base CRL is a CRL that was explicitly issued as a CRL | |||
| that is complete for a given scope (e.g., a set of revocation reasons | that is complete for a given scope (e.g., a set of revocation reasons | |||
| or a particular distribution point.) The CRL containing the delta CRL | or a particular distribution point.) The CRL containing the delta CRL | |||
| indicator extension contains all updates to the certificate revoca- | indicator extension contains all updates to the certificate | |||
| tion status for that same scope. The combination of a CRL containing | revocation status for that same scope. The combination of a CRL | |||
| the delta CRL indicator extension plus the CRL referenced in the | containing the delta CRL indicator extension plus the CRL referenced | |||
| BaseCRLNumber component of this extension is equivalent to a full | in the BaseCRLNumber component of this extension is equivalent to a | |||
| CRL, for the applicable scope, at the time of publication of the | full CRL, for the applicable scope, at the time of publication of the | |||
| delta CRL. | delta CRL. | |||
| When a conforming CA issues a delta CRL, the CA MUST also issue a CRL | When a conforming CA issues a delta CRL, the CA MUST also issue a CRL | |||
| that is complete for the given scope. Both the delta CRL and the | that is complete for the given scope. Both the delta CRL and the | |||
| complete CRL MUST include the CRL number extension (see sec. 5.2.3). | complete CRL MUST include the CRL number extension (see sec. 5.2.3). | |||
| The CRL number extension in the delta CRL and the complete CRL MUST | The CRL number extension in the delta CRL and the complete CRL MUST | |||
| contain the same value. When a delta CRL is issued, it MUST cover | contain the same value. When a delta CRL is issued, it MUST cover | |||
| the same set of reasons and same set of certificates that were | the same set of reasons and same set of certificates that were | |||
| covered by the base CRL it references. | covered by the base CRL it references. | |||
| An application can construct a CRL that is complete for a given | An application can construct a CRL that is complete for a given | |||
| scope, at the current time, in either of the following ways: | scope, at the current time, in either of the following ways: | |||
| (a) by retrieving the current delta CRL for that scope, and com- | ||||
| bining it with an issued CRL that is complete for that scope and | (a) by retrieving the current delta CRL for that scope, and | |||
| that has a cRLNumber greater than or equal to the cRLNumber of the | combining it with an issued CRL that is complete for that scope | |||
| base CRL referenced in the delta CRL; or | and that has a cRLNumber greater than or equal to the cRLNumber of | |||
| (b) by retrieving the current delta CRL for that scope and combin- | the base CRL referenced in the delta CRL; or | |||
| ing it with a locally constructed CRL whose cRLNumber is greater | ||||
| than or equal to the cRLNumber of the base CRL referenced in the | (b) by retrieving the current delta CRL for that scope and | |||
| current delta CRL. | combining it with a locally constructed CRL whose cRLNumber is | |||
| greater than or equal to the cRLNumber of the base CRL referenced | ||||
| in the current delta CRL. | ||||
| The constructed CRL has the CRL number specified in the CRL number | The constructed CRL has the CRL number specified in the CRL number | |||
| extension found in the delta CRL used in its construction. | extension found in the delta CRL used in its construction. | |||
| CAs must ensure that application of a delta CRL to the referenced | CAs must ensure that application of a delta CRL to the referenced | |||
| base revocation information accurately reflects the current status of | base revocation information accurately reflects the current status of | |||
| revocation. If a CA supports the certificateHold revocation reason | revocation. If a CA supports the certificateHold revocation reason | |||
| the following rules must be applied when generating delta CRLs: | the following rules must be applied when generating delta CRLs: | |||
| (a) If a certificate was listed as revoked with revocation reason | (a) If a certificate was listed as revoked with revocation reason | |||
| certificateHold on a CRL (either a delta CRL or a CRL that is com- | certificateHold on a CRL (either a delta CRL or a CRL that is | |||
| plete for a given scope), whose cRLNumber is n, and the hold is | complete for a given scope), whose cRLNumber is n, and the hold is | |||
| subsequently released, the certificate must be included in all | subsequently released, the certificate must be included in all | |||
| delta CRLs issued after the hold is released where the cRLNumber | delta CRLs issued after the hold is released where the cRLNumber | |||
| of the referenced base CRL is less than or equal to n. The certi- | of the referenced base CRL is less than or equal to n. The | |||
| ficate must be listed with revocation reason removeFromCRL unless | certificate must be listed with revocation reason removeFromCRL | |||
| the certificate is subsequently revoked again for one of the revo- | unless the certificate is subsequently revoked again for one of | |||
| cation reasons covered by the delta CRL, in which case the certi- | the revocation reasons covered by the delta CRL, in which case the | |||
| ficate must be listed with the revocation reason appropriate for | certificate must be listed with the revocation reason appropriate | |||
| the subsequent revocation. | for the subsequent revocation. | |||
| (b) If the certificate was not removed from hold, but was per- | (b) If the certificate was not removed from hold, but was | |||
| manently revoked, then it must be listed on all subsequent delta | permanently revoked, then it must be listed on all subsequent | |||
| CRLs where the cRLNumber of the referenced base CRL is less than | delta CRLs where the cRLNumber of the referenced base CRL is less | |||
| the cRLNumber of the CRL (either a delta CRL or a CRL that is com- | than the cRLNumber of the CRL (either a delta CRL or a CRL that is | |||
| plete for the given scope) on which the permanent revocation | complete for the given scope) on which the permanent revocation | |||
| notice first appeared. | notice first appeared. | |||
| id-ce-deltaCRLIndicator OBJECT IDENTIFIER ::= { id-ce 27 } | id-ce-deltaCRLIndicator OBJECT IDENTIFIER ::= { id-ce 27 } | |||
| deltaCRLIndicator EXTENSION ::= { | deltaCRLIndicator EXTENSION ::= { | |||
| SYNTAX BaseCRLNumber | SYNTAX BaseCRLNumber | |||
| IDENTIFIED BY id-ce-deltaCRLIndicator } | IDENTIFIED BY id-ce-deltaCRLIndicator } | |||
| 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 iden- | The issuing distribution point is a critical CRL extension that | |||
| tifies the CRL distribution point for a particular CRL, and it indi- | identifies the CRL distribution point for a particular CRL, and it | |||
| cates whether the CRL covers revocation for end entity certificates | indicates whether the CRL covers revocation for end entity | |||
| only, CA certificates only, or a limited set of reason codes. | certificates only, CA certificates only, or a limited set of reason | |||
| Although the extension is critical, conforming implementations are | codes. Although the extension is critical, conforming | |||
| not required to support this extension. | implementations are not required to support this extension. | |||
| The CRL is signed using the CA's private key. CRL Distribution | The CRL is signed using the CA's private key. CRL Distribution | |||
| Points do not have their own key pairs. If the CRL is stored in the | 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 corresponding to | X.500 Directory, it is stored in the Directory entry corresponding to | |||
| the CRL distribution point, which may be different than the Directory | the CRL distribution point, which may be different than the Directory | |||
| entry of the CA. | entry of the CA. | |||
| The reason codes associated with a distribution point shall be speci- | The reason codes associated with a distribution point shall be | |||
| fied in onlySomeReasons. If onlySomeReasons does not appear, the dis- | specified in onlySomeReasons. If onlySomeReasons does not appear, the | |||
| tribution point shall contain revocations for all reason codes. CAs | distribution point shall contain revocations for all reason codes. | |||
| may use CRL distribution points to partition the CRL on the basis of | CAs may use CRL distribution points to partition the CRL on the basis | |||
| compromise and routine revocation. In this case, the revocations | of compromise and routine revocation. In this case, the revocations | |||
| with reason code keyCompromise (1) and cACompromise (2) appear in one | with reason code keyCompromise (1) and cACompromise (2) appear in one | |||
| distribution point, and the revocations with other reason codes | distribution point, and the revocations with other reason codes | |||
| appear in another distribution point. | appear in another distribution point. | |||
| Where the issuingDistributionPoint extension contains a URL, the fol- | Where the issuingDistributionPoint extension contains a URL, the | |||
| lowing semantics MUST be assumed: the object is a pointer to the most | following semantics MUST be assumed: the object is a pointer to the | |||
| current CRL issued by this CA. The URI schemes ftp, http, mailto | most current CRL issued by this CA. The URI schemes ftp, http, | |||
| [RFC1738] and ldap [RFC1778] are defined for this purpose. The URI | mailto [RFC1738] and ldap [RFC1778] are defined for this purpose. | |||
| MUST be an absolute, not relative, pathname and MUST specify the | The URI MUST be an absolute, not relative, pathname and MUST specify | |||
| host. | the host. | |||
| 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 } | |||
| 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 CRL is obtained. The extension MUST be non-critical. | this CRL is obtained. The extension MUST be non-critical. | |||
| The same syntax is used for this extension as the cRLDistribution- | The same syntax is used for this extension as the | |||
| Points certificate extension, and is described in section 4.2.1.14. | cRLDistributionPoints certificate extension, and is described in | |||
| The same conventions apply to both extensions. | section 4.2.1.14. 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 | |||
| 5.3 CRL Entry Extensions | 5.3 CRL Entry Extensions | |||
| The CRL entry extensions already defined by ANSI X9 and ISO/IEC/ITU | The CRL entry extensions already defined by ANSI X9 and ISO/IEC/ITU | |||
| for X.509 v2 CRLs provide methods for associating additional attri- | for X.509 v2 CRLs provide methods for associating additional | |||
| butes with CRL entries [X.509] [X9.55]. The X.509 v2 CRL format also | attributes with CRL entries [X.509] [X9.55]. The X.509 v2 CRL format | |||
| allows communities to define private CRL entry extensions to carry | also allows communities to define private CRL entry extensions to | |||
| information unique to those communities. Each extension in a CRL | carry information unique to those communities. Each extension in a | |||
| entry may be designated as critical or non-critical. A CRL valida- | CRL entry may be designated as critical or non-critical. A CRL | |||
| tion MUST fail if it encounters a critical CRL entry extension which | validation MUST fail if it encounters a critical CRL entry extension | |||
| it does not know how to process. However, an unrecognized non- | which it does not know how to process. However, an unrecognized | |||
| critical CRL entry extension may be ignored. The following subsec- | non-critical CRL entry extension may be ignored. The following | |||
| tions present recommended extensions used within Internet CRL entries | subsections present recommended extensions used within Internet CRL | |||
| and standard locations for information. Communities may elect to use | entries and standard locations for information. Communities may | |||
| additional CRL entry extensions; however, caution should be exercised | elect to use additional CRL entry extensions; however, caution should | |||
| in adopting any critical extensions in CRL entries which might be | be exercised in adopting any critical extensions in CRL entries which | |||
| used in a general context. | might be used in a general context. | |||
| All CRL entry extensions used in this specification are non-critical. | All CRL entry extensions used in this specification are non-critical. | |||
| Support for these extensions is optional for conforming CAs and | Support for these extensions is optional for conforming CAs and | |||
| applications. However, CAs that issue CRLs SHOULD include reason | applications. However, CAs that issue CRLs SHOULD include reason | |||
| codes (see sec. 5.3.1) and invalidity dates (see sec. 5.3.3) whenever | codes (see sec. 5.3.1) and invalidity dates (see sec. 5.3.3) whenever | |||
| this information is available. | 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. CAs are strongly | the reason for the certificate revocation. CAs are strongly | |||
| encouraged to include meaningful reason codes in CRL entries; how- | encouraged to include meaningful reason codes in CRL entries; | |||
| ever, the reason code CRL entry extension SHOULD be absent instead of | however, the reason code CRL entry extension SHOULD be absent instead | |||
| using the unspecified (0) reasonCode value. | of using the unspecified (0) reasonCode value. | |||
| id-ce-cRLReason OBJECT IDENTIFIER ::= { id-ce 21 } | id-ce-cRLReason OBJECT IDENTIFIER ::= { id-ce 21 } | |||
| -- reasonCode ::= { CRLReason } | -- reasonCode ::= { CRLReason } | |||
| CRLReason ::= ENUMERATED { | CRLReason ::= ENUMERATED { | |||
| unspecified (0), | unspecified (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), | |||
| removeFromCRL (8) } | removeFromCRL (8) } | |||
| skipping to change at page 54, line 25 ¶ | skipping to change at page 56, line 38 ¶ | |||
| The hold instruction code is a non-critical CRL entry extension that | The hold instruction code is a non-critical CRL entry extension that | |||
| provides a registered instruction identifier which indicates the | provides a registered instruction identifier which indicates the | |||
| action to be taken after encountering a certificate that has been | action to be taken after encountering a certificate that has been | |||
| placed on hold. | placed on hold. | |||
| id-ce-holdInstructionCode OBJECT IDENTIFIER ::= { id-ce 23 } | id-ce-holdInstructionCode OBJECT IDENTIFIER ::= { id-ce 23 } | |||
| holdInstructionCode ::= OBJECT IDENTIFIER | holdInstructionCode ::= OBJECT IDENTIFIER | |||
| The following instruction codes have been defined. Conforming appli- | The following instruction codes have been defined. Conforming | |||
| cations that process this extension MUST recognize the following | applications that process this extension MUST recognize the following | |||
| instruction codes. | instruction codes. | |||
| holdInstruction OBJECT IDENTIFIER ::= | holdInstruction OBJECT IDENTIFIER ::= | |||
| { iso(1) member-body(2) us(840) x9-57(10040) 2 } | { iso(1) member-body(2) us(840) x9-57(10040) 2 } | |||
| id-holdinstruction-none OBJECT IDENTIFIER ::= {holdInstruction 1} | id-holdinstruction-none OBJECT IDENTIFIER ::= {holdInstruction 1} | |||
| id-holdinstruction-callissuer | id-holdinstruction-callissuer | |||
| OBJECT IDENTIFIER ::= {holdInstruction 2} | OBJECT IDENTIFIER ::= {holdInstruction 2} | |||
| id-holdinstruction-reject OBJECT IDENTIFIER ::= {holdInstruction 3} | id-holdinstruction-reject OBJECT IDENTIFIER ::= {holdInstruction 3} | |||
| Conforming applications which encounter an id-holdinstruction- | Conforming applications which encounter an id-holdinstruction- | |||
| callissuer MUST call the certificate issuer or reject the certifi- | callissuer MUST call the certificate issuer or reject the | |||
| cate. Conforming applications which encounter an id- | certificate. Conforming applications which encounter an id- | |||
| holdinstruction-reject MUST reject the certificate. The hold instruc- | holdinstruction-reject MUST reject the certificate. The hold | |||
| tion id-holdinstruction-none is semantically equivalent to the | instruction id-holdinstruction-none is semantically equivalent to the | |||
| absence of a holdInstructionCode, and its use is strongly deprecated | absence of a holdInstructionCode, and its use is strongly deprecated | |||
| for the Internet PKI. | for the Internet PKI. | |||
| 5.3.3 Invalidity Date | 5.3.3 Invalidity Date | |||
| The invalidity date is a non-critical CRL entry extension that pro- | The invalidity date is a non-critical CRL entry extension that | |||
| vides the date on which it is known or suspected that the private key | provides the date on which it is known or suspected that the private | |||
| 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 CA in a CRL, the invalidity date may | revocation is first posted by a CA in a CRL, the invalidity date may | |||
| precede the date of issue of earlier CRLs, but the revocation date | precede the date of issue of earlier CRLs, but the revocation date | |||
| SHOULD NOT precede the date of issue of earlier CRLs. Whenever this | SHOULD NOT precede the date of issue of earlier CRLs. Whenever this | |||
| information is available, CAs are strongly encouraged to share it | information is available, CAs are strongly encouraged to share it | |||
| with CRL users. | 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 | |||
| skipping to change at page 55, line 33 ¶ | skipping to change at page 57, line 45 ¶ | |||
| extension is not present on the first entry in an indirect CRL, the | extension is not present on the first entry in an indirect CRL, the | |||
| certificate issuer defaults to the CRL issuer. On subsequent entries | certificate issuer defaults to the CRL issuer. On subsequent entries | |||
| in an indirect CRL, if this extension is not present, the certificate | in an indirect CRL, if this extension is not present, the certificate | |||
| issuer for the entry is the same as that for the preceding entry. | issuer for the entry is the same as that for the preceding entry. | |||
| This field is defined as follows: | This field is defined as follows: | |||
| id-ce-certificateIssuer OBJECT IDENTIFIER ::= { id-ce 29 } | id-ce-certificateIssuer OBJECT IDENTIFIER ::= { id-ce 29 } | |||
| certificateIssuer ::= GeneralNames | certificateIssuer ::= GeneralNames | |||
| If used by conforming CAs that issue CRLs, this extension is always | If used by conforming CAs that issue CRLs, this extension MUST always | |||
| critical. If an implementation ignored this extension it could not | be critical. If an implementation ignored this extension it could | |||
| correctly attribute CRL entries to certificates. This specification | not correctly attribute CRL entries to certificates. This | |||
| RECOMMENDS that implementations recognize this extension. | specification RECOMMENDS 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 section 12.4.3 of [X.509]. Certification path processing | based on the algorithm supplied in [X.509]. Certification path | |||
| verifies the binding between the subject distinguished name and/or | processing verifies the binding between the subject distinguished | |||
| subject alternative name and subject public key. The binding is lim- | name and/or subject alternative name and subject public key. The | |||
| ited by constraints which are specified in the certificates which | binding is limited by constraints which are specified in the | |||
| comprise the path. The basic constraints and policy constraints | certificates which comprise the path and the initial state variables | |||
| extensions allow the certification path processing logic to automate | which are specified by the relying party. The basic constraints and | |||
| the decision making process. | policy constraints extensions allow the certification path processing | |||
| logic to automate 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 be functionally | 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. This text | In section 6.1, the text describes basic path validation. Valid paths | |||
| assumes that all valid paths begin with certificates issued by a sin- | begin with certificates issued by a "most-trusted CA". The algorithm | |||
| gle "most-trusted CA". The algorithm requires the public key of the | requires the public key of the CA, the CA's name, and any constraints | |||
| CA, the CA's name, the validity period of the public key, and any | upon the set of paths which may be validated using this key. | |||
| constraints upon the set of paths which may be validated using this | ||||
| key. | ||||
| The "most-trusted CA" is a matter of policy: it could be a root CA in | The selection of a "most-trusted CA" is a matter of policy: it could | |||
| a hierarchical PKI; the CA that issued the verifier's own | be the top CA in a hierarchical PKI; the CA that issued the | |||
| certificate(s); or any other CA in a network PKI. The path valida- | verifier's own certificate(s); or any other CA in a network PKI. The | |||
| tion procedure is the same regardless of the choice of "most-trusted | path validation procedure is the same regardless of the choice of | |||
| CA." | "most-trusted CA." In addition, different applications may rely on | |||
| different "most-trusted CA", or may accept paths that begin with any | ||||
| of a set of "most-trusted CAs." | ||||
| section 6.2 describes extensions to the basic path validation algo- | Section 6.2 describes methods for using the path validation algorithm | |||
| rithm. Two specific cases are discussed: the case where paths may | in specific implementations. Two specific cases are discussed: the | |||
| begin with one of several trusted CAs; and where compatibility with | case where paths may begin with one of several trusted CAs; and where | |||
| the PEM architecture is required. | compatibility with the PEM architecture is required. | |||
| Section 6.3 describes the steps necessary to determine if a | ||||
| certificate is revoked or on hold status when CRLs are the revocation | ||||
| mechanism used by the certificate issuer. | ||||
| 6.1 Basic Path Validation | 6.1 Basic Path Validation | |||
| This text describes an algorithm for X.509 path processing. A con- | This text describes an algorithm for X.509 path processing. A | |||
| formant implementation MUST include an X.509 path processing pro- | conformant implementation MUST include an X.509 path processing | |||
| cedure that is functionally equivalent to the external behavior of | procedure that is functionally equivalent to the external behavior of | |||
| this algorithm. | this algorithm. However, some of the certificate fields processed in | |||
| this algorithm are optional for compliant implementations. Clients | ||||
| that do not support these fields may omit the corresponding steps in | ||||
| the path validation algorithm. | ||||
| This text assumes that there is a single trust anchor for certifica- | For example, clients are not required to support the policy mapping | |||
| tion path processing, which simplifies the description of the path | extension. Clients that do not support this extension may omit the | |||
| processing procedure. This procedure can be extended to address mul- | path validation steps where policy mappings are processed. Note that | |||
| tiple trust anchors, as discussed further in Section 6.2. | clients MUST reject the certificate if it contains critical | |||
| extensions that are not supported. | ||||
| This text describes the trust anchor as an input to the algorithm. | ||||
| There is no requirement that the same trust anchor be used to | ||||
| validate all certification paths. Different trust anchors may be | ||||
| used to validate 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 subject alternative name and subject | a subject distinguished name or subject alternative name and subject | |||
| public key, as represented in the end entity certificate, based on | public key, as represented in the end entity certificate, based on | |||
| the public key of the trust anchor. This requires obtaining a | the public key of the trust anchor. This requires obtaining a | |||
| sequence of certificates that support that binding. The procedure | sequence of certificates that support that binding. The procedure | |||
| performed to obtain this sequence of certificates is outside the | performed to obtain this sequence of certificates is outside the | |||
| scope of this section. | scope of this section. | |||
| 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 certi- | things, that a prospective certification path (a sequence of n | |||
| ficates) satisfies the following conditions: | certificates) satisfies the following conditions: | |||
| (i) 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; | |||
| (ii) certificate 1 is issued by the trust anchor; | ||||
| (iii) certificate n is the end entity certificate; and | (b) certificate 1 is issued by the trust anchor; | |||
| (iv) for all x in {1, ..., n}, the certificate was valid at the | ||||
| (c) certificate n is the end entity certificate; and | ||||
| (d) for all x in {1, ..., n}, the certificate was valid at the | ||||
| time in question. | time in question. | |||
| A particular certification path may not, however, be appropriate for | A particular certification path may not, however, be appropriate for | |||
| all applications. The path validation process also determines the | all applications. The path validation process also determines the | |||
| set of certificate policies that are valid for this path, based on | set of certificate policies that are valid for this path, based on | |||
| the certificate policies extension, policy mapping extension, policy | the certificate policies extension, policy mapping extension, policy | |||
| constraints extension, and inhibit any-policy extension. To achieve | constraints extension, and inhibit any-policy extension. To achieve | |||
| this, the path validation algorithm constructs a "valid policy tree." | this, the path validation algorithm constructs a valid policy tree. | |||
| If the set of certificate policies that are valid for this path is | If the set of certificate policies that are valid for this path is | |||
| not empty, then the result will be a valid policy tree of depth n, | not empty, then the result will be a valid policy tree of depth n, | |||
| otherwise the result will be a NULL valid policy tree. | otherwise the result will be a NULL valid policy tree. | |||
| This section presents the algorithm in four basic steps: (1) initial- | This section presents the algorithm in four basic steps: (1) | |||
| ization, (2) basic certificate processing, (3) preparation for the | initialization, (2) basic certificate processing, (3) preparation for | |||
| next certificate, and (4) wrap-up. Steps (1) and (4) are performed | the next certificate, and (4) wrap-up. Steps (1) and (4) are | |||
| exactly once. Step (2) is performed for all certificates in the | performed exactly once. Step (2) is performed for all certificates | |||
| path. Step (3) is performed for all certificates in the path except | in the path. Step (3) is performed for all certificates in the path | |||
| the final certificate. Figure 2 provides a high-level flowchart of | except the final certificate. Figure 2 provides a high-level | |||
| this algorithm. | flowchart of this algorithm. | |||
| +-------+ | +-------+ | |||
| | START | | | START | | |||
| +-------+ | +-------+ | |||
| | | | | |||
| V | V | |||
| +----------------+ | +----------------+ | |||
| | Initialization | | | Initialization | | |||
| +----------------+ | +----------------+ | |||
| | | | | |||
| skipping to change at page 58, line 51 ¶ | skipping to change at page 61, line 51 ¶ | |||
| This algorithm assumes the following seven inputs are provided to the | This algorithm assumes the following seven inputs are provided to the | |||
| path processing logic: | path processing logic: | |||
| (a) a prospective certification path of length n; | (a) a prospective certification path of length n; | |||
| (b) the time, T, for which the validity of the path should be | (b) the time, T, for which the validity of the path should be | |||
| determined. This may be the current date/time, or some point in | determined. This may be the current date/time, or some point in | |||
| the past. | the past. | |||
| (c) user_initial_policy_set: A set of certificate policy identif- | (c) user-initial-policy-set: A set of certificate policy | |||
| iers naming the policies that are acceptable to the certificate | identifiers naming the policies that are acceptable to the | |||
| user. The user_initial_policy_set has the special value "any- | certificate user. The user-initial-policy-set contains the special | |||
| policy" if the user is not concerned about certificate policy. | value any-policy if the user is not concerned about 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 infor- | trust anchor for the certification path. The trust anchor | |||
| mation includes: | information includes: | |||
| (1) the trusted issuer name, | (1) the trusted issuer name, | |||
| (2) optionally, the trusted issuer unique identifier, | ||||
| (3) the trusted public key algorithm, | (2) the trusted public key algorithm, | |||
| (4) the trusted public key, and | ||||
| (5) optionally, the trusted public key parameters associated | (3) the trusted public key, and | |||
| (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 process- | The trust anchor information may be provided to the path | |||
| ing procedure in the form of a self-signed certificate. The | processing procedure in the form of a self-signed certificate. The | |||
| trusted anchor information is trusted because it was delivered to | trusted anchor information is trusted because it was delivered to | |||
| the path processing procedure by some trustworthy "out-of-band" | the path processing procedure by some trustworthy out-of-band | |||
| procedure. If the trusted public key algorithm requires parame- | procedure. If the trusted public key algorithm requires | |||
| ters, then the parameters are provided along with the trusted pub- | parameters, then the parameters are provided along with the | |||
| lic key. | trusted public key. | |||
| (e) initial-policy-mapping-inhibit, which indicates if policy map- | (e) initial-policy-mapping-inhibit, which indicates if policy | |||
| ping 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 | valid for at least one of the certificate policies in the user- | |||
| user_initial_policy_set. | initial-policy-set. | |||
| (g) initial-any-policy-inhibit, which indicates whether the any- | (g) initial-any-policy-inhibit, which indicates whether the any- | |||
| policy OID should be processed if it is included in a certificate. | policy OID should be processed if it is included in a certificate. | |||
| 6.1.2 Initialization | 6.1.2 Initialization | |||
| The initialization phase establishes twelve state variables based | The initialization phase establishes eleven state variables based | |||
| upon the seven inputs: | upon the seven 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 represents a | |||
| valid policy at this stage in the certification path validation. | valid policy at this stage in the certification path validation. | |||
| If valid policies exist at this stage in the certification path | If valid policies exist at this stage in the certification path | |||
| validation, the depth of the tree is equal to the number of certi- | validation, the depth of the tree is equal to the number of | |||
| ficates in the chain that have been processed. If valid policies | certificates in the chain that have been processed. If valid | |||
| do not exist at this stage in the certification path validation, | policies do not exist at this stage in the certification path | |||
| the tree is set to NULL. Once the tree is set to NULL, policy pro- | validation, the tree is set to NULL. Once the tree is set to NULL, | |||
| cessing ceases. | policy processing ceases. | |||
| Each node in the valid_policy_tree includes four data objects: the | Each node in the valid_policy_tree includes four data objects: the | |||
| valid policy, a set of associated policy qualifiers, a set of one | valid policy, a set of associated policy qualifiers, a set of one | |||
| or more expected policy values, and a criticality indicator. If | or more expected policy values, and a criticality indicator. If | |||
| the node is at depth x, the components of the node have the fol- | the node is at depth x, the components of the node have the | |||
| lowing semantics: | following semantics: | |||
| (i) 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. | |||
| (ii) 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. | |||
| (iii) The criticality_indicator indicates whether the certifi- | ||||
| cate policy extension in certificate x was marked as critical. | (3) The criticality_indicator indicates whether the certificate | |||
| (iv) The expected_policy_set contains one or more policy OIDs | policy extension in certificate x was marked as critical. | |||
| (4) 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 "any-policy", an empty qualifier_set, an | valid_policy any-policy, an empty qualifier_set, an | |||
| expected_policy_set with the single value "any-policy", and a | expected_policy_set with the single value any-policy, and a | |||
| criticality_indicator of FALSE. This node is considered to be at | criticality_indicator of FALSE. This node is considered to be at | |||
| depth zero. | 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. | |||
| +-----------------+ | +----------------+ | |||
| | "any-policy" | <---- valid_policy | | any-policy | <---- valid_policy | |||
| +-----------------+ | +----------------+ | |||
| | {} | <---- qualifier_set | | {} | <---- qualifier_set | |||
| +-----------------+ | +----------------+ | |||
| | FALSE | <---- criticality_indicator | | FALSE | <---- criticality_indicator | |||
| +-----------------+ | +----------------+ | |||
| | {"any-policy"} | <---- expected_policy_set | | {any-policy} | <---- 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 subject | |||
| names in subsequent certificates in the certification path shall | names in subsequent certificates in the certification path shall | |||
| fall. This variable includes a set for each name type: the initial | fall. This variable includes a set for each name type: the initial | |||
| value for the set for Distinguished Names is the set of all Dis- | value for the set for Distinguished Names is the set of all | |||
| tinguished names; the initial value for the set of RFC822 names is | Distinguished names; the initial value for the set of RFC822 names | |||
| the set of all RFC822 names, etc. | is the set of all RFC822 names, etc. | |||
| (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 name | |||
| in subsequent certificates in the certification path may fall. | in subsequent certificates in the certification path may fall. | |||
| This variable includes a set for each name type, and the initial | This variable includes a set for each name type, and the initial | |||
| value for each set is "empty". | value for each set is empty. | |||
| (d) explicit_policy: an integer which indicates if a non-NULL | (d) explicit_policy: an integer which indicates if a non-NULL | |||
| valid_policy_tree is required. The integer indicates the number of | valid_policy_tree is required. The integer indicates the number of | |||
| non-self-issued certificates to be processed before this require- | non-self-issued certificates to be processed before this | |||
| ment is imposed. Once set, this variable may be decreased, but may | requirement is imposed. Once set, this variable may be decreased, | |||
| not be increased. That is, if a certificate in the path requires a | but may not be increased. That is, if a certificate in the path | |||
| non-NULL valid_policy_tree, a later certificate can not remove | requires a non-NULL valid_policy_tree, a later certificate can not | |||
| this requirement. If initial-explicit-policy is set, then the ini- | remove this requirement. If initial-explicit-policy is set, then | |||
| tial value is 0, otherwise the initial value is n+1. | the initial value is 0, otherwise the initial value is n+1. | |||
| (e) inhibit_any-policy: an integer which indicates whether the | (e) inhibit_any-policy: an integer which indicates whether the | |||
| "any-policy" policy identifier is considered a match. The integer | any-policy policy identifier is considered a match. The integer | |||
| indicates the number of non-self-issued certificates to be pro- | indicates the number of non-self-issued certificates to be | |||
| cessed before the "any-policy" OID, if asserted in a certificate, | processed before the any-policy OID, if asserted in a certificate, | |||
| is ignored. Once set, this variable may be decreased, but may not | is ignored. Once set, this variable may be decreased, but may not | |||
| be increased. That is, if a certificate in the path inhibits pro- | be increased. That is, if a certificate in the path inhibits | |||
| cessing of "any-policy", a later certificate can not permit it. If | processing of any-policy, a later certificate can not permit it. | |||
| initial-any-policy-inhibit is set, then the initial value is 0, | If initial-any-policy-inhibit is set, then the initial value is 0, | |||
| otherwise the initial value is n+1. | otherwise the initial value is n+1. | |||
| (f) policy_mapping: an integer which indicates if policy mapping | (f) policy_mapping: an integer which 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-issued | |||
| certificates to be processed before policy mapping is inhibited. | certificates to be processed before policy mapping is inhibited. | |||
| Once set, this variable may be decreased, but may not be | Once set, this variable may be decreased, but may not be | |||
| increased. That is, if a certificate in the path specifies policy | increased. That is, if a certificate in the path specifies policy | |||
| mapping is not permitted, it can not be overridden by a later cer- | mapping is not permitted, it can not be overridden by a later | |||
| tificate. If initial-policy-mapping-inhibit is set, then the ini- | certificate. If initial-policy-mapping-inhibit is set, then the | |||
| tial value is 0, otherwise the initial value is n+1. | initial value is 0, otherwise the initial value is n+1. | |||
| (g) working_public_key_algorithm: the digital signature algorithm | (g) working_public_key_algorithm: the digital signature algorithm | |||
| used to verify the signature of a certificate. The | used to verify the signature of a certificate. The | |||
| working_public_key_algorithm is initialized from the trusted pub- | working_public_key_algorithm is initialized from the trusted | |||
| lic 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 signa- | (h) working_public_key: the public key used to verify the | |||
| ture of a certificate. The working_public_key is initialized from | signature of a certificate. The working_public_key is initialized | |||
| the trusted public key provided in the trust anchor information. | from the trusted public key provided in the trust anchor | |||
| information. | ||||
| (i) working_public_key_parameters: parameters associated with the | (i) working_public_key_parameters: parameters associated with the | |||
| current public key, that may required to verify a signature | current public key, that may required to verify a signature | |||
| (depending upon the algorithm). The working_public_key_parameters | (depending upon the algorithm). The working_public_key_parameters | |||
| variable is initialized from the trusted public key parameters | variable is initialized from the trusted public key parameters | |||
| provided in the trust anchor information. | 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 working_issuer_name is | |||
| initialized to the trusted issuer provided in the trust anchor | initialized to the trusted issuer provided in the trust anchor | |||
| information. | information. | |||
| (k) working_issuer_UID: a distinguished name may be associated | (k) max_path_length: this integer is initialized to n, and is | |||
| with an optional unique identifier. The working_issuer_UID is the | reset by the path length constraint field within the basic | |||
| unique identifier that is expected in the next certificate, or the | constraints extension of a CA certificate. | |||
| value NULL. The working_issuer_UID is initialized to the trusted | ||||
| issuer's unique identifier provided in the trust anchor informa- | ||||
| tion. | ||||
| (l) max_path_length: this integer is initialized to n, and is | ||||
| reset by the path length constraint field within the basic con- | ||||
| straints extension of a CA certificate. | ||||
| Upon completion of the initialization steps, perform the basic certi- | Upon completion of the initialization steps, perform the basic | |||
| ficate 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 | |||
| are listed below. | 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 certificate was signed with the | (1) The certificate was signed with the | |||
| working_public_key_algorithm using the working_public_key and | working_public_key_algorithm using the working_public_key and | |||
| the working_public_key_parameters. | the working_public_key_parameters. | |||
| (2) The certificate validity period includes time T. | (2) The certificate validity period includes time T. | |||
| (3) At time T, the certificate is not revoked and is not on | (3) At time T, the certificate is not revoked and is not on | |||
| hold status. This may be determined by obtaining the appropri- | hold status. This may be determined by obtaining the | |||
| ate CRL (see section 6.3), status information, or by out-of- | appropriate CRL (see section 6.3), status information, or by | |||
| band mechanisms. | out-of-band mechanisms. | |||
| (4) The certificate issuer name is the working_issuer_name. | (4) The certificate issuer name is the working_issuer_name. | |||
| (5) The certificate issuer unique identifier is the | (5) The certificate issuer unique identifier is the | |||
| working_issuer_UID, meaning: | working_issuer_UID, meaning: | |||
| (i) working_issuer_UID is non-null and matches the value in | (i) working_issuer_UID is non-null and matches the value in | |||
| the issuerUID field, or | the issuerUID field, or | |||
| (ii) working_issuer_UID is null and the issuerUID field is | (ii) working_issuer_UID is null and the issuerUID field is | |||
| not present. | not present. | |||
| (b) If certificate i is not self-issued, verify that the subject | (b) If certificate i is not self-issued, verify that the subject | |||
| name is within one of the permitted_subtrees for X.500 dis- | name is within one of the permitted_subtrees for X.500 | |||
| tinguished names, and verify that each of the alternative names in | distinguished names, and verify that each of the alternative names | |||
| the subjectAltName extension (critical or non-critical) is within | in the subjectAltName extension (critical or non-critical) is | |||
| one of the permitted_subtrees for that name type. | within one of the permitted_subtrees for that name type. | |||
| (c) If certificate i is not self-issued, verify that the subject | (c) If certificate i is not self-issued, verify that the subject | |||
| name is not within one of the excluded_subtrees for X.500 dis- | name is not within one of the excluded_subtrees for X.500 | |||
| tinguished names, and verify that each of the alternative names in | distinguished names, and verify that each of the alternative names | |||
| the subjectAltName extension (critical or non-critical) is not | in the subjectAltName extension (critical or non-critical) is not | |||
| within one of the excluded_subtrees for that name type. | within one of the excluded_subtrees for that name type. | |||
| (d) If the certificate policies extension is present in the certi- | (d) If the certificate policies extension is present in the | |||
| ficiate and the valid_policy_tree is not NULL, process the policy | certificiate and the valid_policy_tree is not NULL, process the | |||
| information by performing the following steps in order: | policy information by performing the following steps in order: | |||
| (1) For each policy P not equal to "any-policy" in the certifi- | (1) For each policy P not equal to any-policy in the | |||
| cate policies extension, let P-OID denote the OID in policy P | certificate policies extension, let P-OID denote the OID in | |||
| and P-Q denote the qualifier set for policy P. Perform the | policy P and P-Q denote the qualifier set for policy P. | |||
| following steps in order: | Perform the following steps in order: | |||
| (i) If the valid_policy_tree includes a node of depth i-1 | (i) If the valid_policy_tree includes a node of depth i-1 | |||
| where P-OID is in the expected_policy_set, create a child | where P-OID is in the expected_policy_set, create a child | |||
| node as follows: set the valid_policy to OID- P; set the | node as follows: set the valid_policy to OID- P; set the | |||
| qualifier_set to P-Q, and set the expected_policy_set to | qualifier_set to P-Q, and set the expected_policy_set to | |||
| {P-OID}. | {P-OID}. | |||
| For example, consider a valid_policy_tree with a node of | For example, consider a valid_policy_tree with a node of | |||
| depth i-1 where the expected_policy_set is {Gold, White}. | depth i-1 where the expected_policy_set is {Gold, White}. | |||
| Assume the certificate policies Gold and Silver appear in | Assume the certificate policies Gold and Silver appear in | |||
| the certificate policies extension of certificate i. The | the certificate policies extension of certificate i. The | |||
| Gold policy is matched but the Silver policy is not. This | Gold policy is matched but the Silver policy is not. This | |||
| rule will generate a child node of depth i for the Gold pol- | rule will generate a child node of depth i for the Gold | |||
| icy. The result is shown as Figure 4. | policy. The result is shown as Figure 4. | |||
| |-----------------| | |-----------------| | |||
| | Red | | | Red | | |||
| |-----------------| | |-----------------| | |||
| | {} | | | {} | | |||
| |-----------------| node of depth i-1 | |-----------------| node of depth i-1 | |||
| | FALSE | | | FALSE | | |||
| |-----------------| | |-----------------| | |||
| | {Gold, White} | | | {Gold, White} | | |||
| |-----------------| | |-----------------| | |||
| skipping to change at page 64, line 32 ¶ | skipping to change at page 67, line 32 ¶ | |||
| |-----------------| node of depth i | |-----------------| node of depth i | |||
| | uninitialized | | | uninitialized | | |||
| |-----------------| | |-----------------| | |||
| | {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 the | |||
| valid policy "any-policy", generate a child node with the | valid policy any-policy, generate a child node with the | |||
| following values: set the valid_policy to P-OID; set the | following values: set the valid_policy to P-OID; set the | |||
| qualifier_set to P-Q, and set the expected_policy_set to | qualifier_set to P-Q, and set the expected_policy_set to | |||
| {P-OID}. | {P-OID}. | |||
| For example, consider a valid_policy_tree with a node of | For example, consider a valid_policy_tree with a node of | |||
| depth i-1 where the valid_policy is "any-policy". Assume the | depth i-1 where the valid_policy is any-policy. Assume the | |||
| certificate policies Gold and Silver appear in the certifi- | certificate policies Gold and Silver appear in the | |||
| cate policies extension of certificate i. The Gold policy | certificate policies extension of certificate i. The Gold | |||
| does not have a qualifier, but the Silver policy has the | policy does not have a qualifier, but the Silver policy has | |||
| qualifier Q-Silver. If Gold and Silver were not matched in | the qualifier Q-Silver. If Gold and Silver were not matched | |||
| (i) above, this rule will generate two child nodes of depth | in (i) above, this rule will generate two child nodes of | |||
| i, one for each policy. The result is shown as Figure 5. | depth i, one for each policy. The result is shown as Figure | |||
| 5. | ||||
| |-----------------| | |-----------------| | |||
| | "any-policy" | | | any-policy | | |||
| |-----------------| | |-----------------| | |||
| | {} | | | {} | | |||
| |-----------------| node of depth i-1 | |-----------------| node of depth i-1 | |||
| | FALSE | | | FALSE | | |||
| |-----------------| | |-----------------| | |||
| | {"any-policy"} | | | {any-policy} | | |||
| |-----------------| | |-----------------| | |||
| / \ | / \ | |||
| / \ | / \ | |||
| / \ | / \ | |||
| / \ | / \ | |||
| |-----------------| |-----------------| | |-----------------| |-----------------| | |||
| | Gold | | Silver | | | Gold | | Silver | | |||
| |-----------------| |-----------------| | |-----------------| |-----------------| | |||
| | {} | | {Q-Silver} | | | {} | | {Q-Silver} | | |||
| |-----------------| nodes of |-----------------| | |-----------------| nodes of |-----------------| | |||
| | uninitialized | depth i | uninitialized | | | uninitialized | depth i | uninitialized | | |||
| |-----------------| |-----------------| | |-----------------| |-----------------| | |||
| | {Gold} | | {Silver} | | | {Gold} | | {Silver} | | |||
| |-----------------| |-----------------| | |-----------------| |-----------------| | |||
| Figure 5. Processing unmatched policies when a leaf node | Figure 5. Processing unmatched policies when a leaf node | |||
| specifies "any-policy" | specifies any-policy | |||
| (2) If the certificate policies extension includes the pol- | (2) If the certificate policies extension includes the policy | |||
| icy "any-policy" with the qualifier set AP-Q and | any-policy with the qualifier set AP-Q and inhibit_any-policy | |||
| inhibit_any-policy is greater than 0, then: | is greater than 0, then: | |||
| For each node in the valid_policy_tree of depth i-1, for | For each node in the valid_policy_tree of depth i-1, for each | |||
| each value in the expected_policy_set (including "any- | value in the expected_policy_set (including any-policy) that | |||
| policy") that does not appear in a child node, create a | does not appear in a child node, create a child node with the | |||
| child node with the following values: set the valid_policy | following values: set the valid_policy to the value from the | |||
| to the value from the expected_policy_set in the parent | expected_policy_set in the parent node; set the qualifier_set | |||
| node; set the qualifier_set to AP-Q, and set the | to AP-Q, and set the expected_policy_set to the value in the | |||
| expected_policy_set to the value in the valid_policy from | valid_policy from this node. | |||
| this node. | ||||
| For example, consider a valid_policy_tree with a node of | For example, consider a valid_policy_tree with a node of depth | |||
| depth i-1 where the expected_policy_set = {Gold, Silver}. | i-1 where the expected_policy_set = {Gold, Silver}. Assume | |||
| Assume "any-policy" appears in the certificate policies | any-policy appears in the certificate policies extension of | |||
| extension of certificate i, but Gold and Silver do not. | certificate i, but Gold and Silver do not. This rule will | |||
| This rule will generate two child nodes of depth i, one for | generate two child nodes of depth i, one for each policy. The | |||
| each policy. The result is shown below as Figure 6. | result is shown below as Figure 6. | |||
| |-----------------| | |-----------------| | |||
| | Red | | | Red | | |||
| |-----------------| | |-----------------| | |||
| | {} | | | {} | | |||
| |-----------------| node of depth i-1 | |-----------------| node of depth i-1 | |||
| | FALSE | | | FALSE | | |||
| |-----------------| | |-----------------| | |||
| | {Gold, Silver} | | | {Gold, Silver} | | |||
| |-----------------| | |-----------------| | |||
| / \ | / \ | |||
| / \ | / \ | |||
| / \ | / \ | |||
| / \ | / \ | |||
| |-----------------| |-----------------| | |-----------------| |-----------------| | |||
| | Gold | | Silver | | | Gold | | Silver | | |||
| |-----------------| |-----------------| | |-----------------| |-----------------| | |||
| | {} | | {} | | | {} | | {} | | |||
| |-----------------| nodes of |-----------------| | |-----------------| nodes of |-----------------| | |||
| | uninitialized | depth i | uninitialized | | | uninitialized | depth i | uninitialized | | |||
| |-----------------| |-----------------| | |-----------------| |-----------------| | |||
| | {Gold} | | {Silver} | | | {Gold} | | {Silver} | | |||
| |-----------------| |-----------------| | |-----------------| |-----------------| | |||
| Figure 6. Processing unmatched policies when the certificate | Figure 6. Processing unmatched policies when the certificate | |||
| policies extension specifies "any-policy" | policies extension specifies any-policy | |||
| (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 | |||
| or less without any child nodes, delete that node. Repeat | less without any child nodes, delete that node. Repeat this | |||
| this step until there are no nodes of depth i-1 or less | step until there are no nodes of depth i-1 or less without | |||
| without children. | children. | |||
| For example, consider the valid_policy_tree shown in Figure | For example, consider the valid_policy_tree shown in Figure 7 | |||
| 7 below. The two nodes at depth i-1 that are marked with an | below. The two nodes at depth i-1 that are marked with an to | |||
| to the resulting tree will cause the node at depth i-2 that | the resulting tree will cause the node at depth i-2 that is | |||
| is marked with an 'Y' to be deleted. The following applica- | marked with an 'Y' to be deleted. The following application of | |||
| tion of the rule does not cause any nodes to be deleted, and | the rule does not cause any nodes to be deleted, and this step | |||
| this step is complete. | is complete. | |||
| +-----------+ | +-----------+ | |||
| | | node of depth i-3 | | | node of depth i-3 | |||
| +-----------+ | +-----------+ | |||
| / | \ | / | \ | |||
| / | \ | / | \ | |||
| / | \ | / | \ | |||
| / | \ | +-----------+ +-----------+ +-----------+ | |||
| +-----------+ +-----------+ +-----------+ | | | | | | Y | nodes of | |||
| | | | | | Y | nodes of | +-----------+ +-----------+ +-----------+ depth i-2 | |||
| +-----------+ +-----------+ +-----------+ depth i-2 | / \ || || | |||
| / \ \ \ | / \ || || | |||
| / \ \ \ | / \ || || | |||
| +-----------+ +-----------+ +-----------+ +-----------+ nodes of | +-----------+ +-----------+ +-----------+ +-----------+ nodes of | |||
| | | | X | | | | X | depth | | | | X | | | | X | depth | |||
| +-----------+ +-----------+ +-----------+ +-----------+ 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 | |||
| (4) If the certificate policies extension was marked as criti- | (4) If the certificate policies extension was marked as | |||
| cal, set the criticality_indicator in all nodes of depth i to | critical, set the criticality_indicator in all nodes of depth i | |||
| TRUE. If the certificate policies extension was not marked | to TRUE. If the certificate policies extension was not marked | |||
| critical, set the criticality_indicator in all nodes of depth i | critical, set the criticality_indicator in all nodes of depth i | |||
| to FALSE. | to FALSE. | |||
| (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 ter- | If any of steps (a), (b), (c), or (f) fails, the procedure | |||
| minates, 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 6.1.4. If i is equal to n, perform the wrap-up steps | |||
| listed in 6.1.5. | listed in 6.1.5. | |||
| 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 following | To prepare for processing of certificate i+1, perform the following | |||
| steps for certificate i: | steps for certificate i: | |||
| (a) If a policy mapping extension is present, verify that the spe- | (a) If a policy mapping extension is present, verify that the | |||
| cial value "any-policy" does not appear as an issuerDomainPolicy | special value any-policy does not appear as an issuerDomainPolicy | |||
| or a subjectDomainPolicy. | or a subjectDomainPolicy. | |||
| (b) If a policy mapping extension is present, then for each | (b) If a policy mapping extension is present, then for each | |||
| issuerDomainPolicy ID-P in the policy mapping extension: | issuerDomainPolicy ID-P in the policy mapping 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 sub- | valid_policy, set expected_policy_set to the set of | |||
| jectDomainPolicy values that are specified as equivalent to | subjectDomainPolicy values that are specified as equivalent to | |||
| ID-P by the policy mapping extension. | ID-P by the policy mapping extension. | |||
| 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 any-policy, then generate a child node of the | ||||
| node of depth i-1 that has a valid_policy of any-policy as | ||||
| follows: | ||||
| (i) set the valid_policy to ID-P; | ||||
| (ii) set the qualifier_set to the qualifier set of the | ||||
| policy any-policy in the certificate policies extension of | ||||
| certificate i; | ||||
| (iii) set the criticality_indicator to the criticality of | ||||
| the certificate policies extension of certificate i; | ||||
| (iv) and set the expected_policy_set to the set of | ||||
| subjectDomainPolicy values that are specified as 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 node. | |||
| Repeat this step until there are no nodes of depth i-1 or | Repeat this step until there are no nodes of depth i-1 or | |||
| less without children. | 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 working_public_key. | (d) Assign the certificate subjectPublicKey to working_public_key. | |||
| (e) If the subjectPublicKeyInfo field of the certificate contains | (e) If the subjectPublicKeyInfo field of the certificate contains | |||
| skipping to change at page 68, line 46 ¶ | skipping to change at page 72, line 16 ¶ | |||
| If the subjectPublicKeyInfo field of the certificate contains an | If the subjectPublicKeyInfo field of the certificate contains an | |||
| algorithm field with null parameters or parameters are omitted, | algorithm field with null parameters or parameters are omitted, | |||
| compare the certificate subjectPublicKey algorithm to the | compare the certificate subjectPublicKey algorithm to the | |||
| working_public_key_algorithm. If the certificate subjectPublicKey | working_public_key_algorithm. If the certificate subjectPublicKey | |||
| algorithm and the working_public_key_algorithm are different, set | algorithm and the working_public_key_algorithm are different, set | |||
| the working_public_key_parameters to null. | 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 certifi- | (g) If a name constraints extension is included in the | |||
| cate, modify the permitted_subtrees and excluded_subtrees state | certificate, modify the permitted_subtrees and excluded_subtrees | |||
| variables as follows: | state variables as follows: | |||
| (1) If permittedSubtrees is present in the certificate, set the | (1) If permittedSubtrees is present in the certificate, set the | |||
| permitted_subtrees state variable to the intersection of its | permitted_subtrees state variable to the intersection of its | |||
| previous value and the value indicated in the extension field. If | previous value and the value indicated in the extension field. | |||
| permittedSubtrees does not include a particular name type, the | If permittedSubtrees does not include a particular name type, | |||
| permitted_subtrees state variable is unchanged for that name type. | the permitted_subtrees state variable is unchanged for that | |||
| name type. | ||||
| (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 previous | |||
| value and the value indicated in the extension field. If exclu- | value and the value indicated in the extension field. If | |||
| dedSubtrees does not include a particular name type, the | excludedSubtrees does not include a particular name type, the | |||
| excluded_subtrees state variable is unchanged for that name type. | excluded_subtrees state variable is unchanged for that name | |||
| type. | ||||
| (h) If the issuer and subject names are not identical: | (h) If the issuer and subject names are not identical: | |||
| (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_any-policy is not 0, decrement inhibit_any- pol- | (3) If inhibit_any-policy is not 0, decrement inhibit_any- | |||
| icy by 1. | policy by 1. | |||
| (i) If a policy constraints extension is included in the certifi- | (i) If a policy constraints extension is included in the | |||
| cate, modify the explicit_policy and policy_mapping state vari- | certificate, modify the explicit_policy and policy_mapping state | |||
| ables as follows: | 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 requireEx- | explicit_policy, set explicit_policy to the value of | |||
| plicitPolicy. | 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 inhibitPoli- | policy_mapping, set policy_mapping to the value of | |||
| cyMapping. | inhibitPolicyMapping. | |||
| (j) If the inhibitAnyPolicy extension is included in the certifi- | (j) If the inhibitAnyPolicy extension is included in the | |||
| cate and is less than inhibit_any-policy, set inhibit_any- policy | certificate and is less than inhibit_any-policy, set inhibit_any- | |||
| to the value of inhibitAnyPolicy. | policy to the value of inhibitAnyPolicy. | |||
| (k) Verify that the certificate is a CA certificate (as specified | (k) Verify that the certificate is a CA certificate (as specified | |||
| in a basicConstraints extension or as verified out-of-band). | in a basicConstraints extension or as verified out-of-band). | |||
| (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 max_path_length | |||
| by 1. | by 1. | |||
| (m) If pathLengthConstraint is present in the certificate and is | (m) If pathLengthConstraint 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 of | |||
| skipping to change at page 70, line 23 ¶ | skipping to change at page 73, line 44 ¶ | |||
| i and perform the basic certificate processing specified in 6.1.2. | i and perform the basic certificate processing specified in 6.1.2. | |||
| 6.1.5 Wrap-up procedure | 6.1.5 Wrap-up procedure | |||
| To complete the processing of the end entity certificate, perform the | To complete the processing of the end entity certificate, perform the | |||
| following steps for certificate n: | following steps for certificate n: | |||
| (a) If certificate n was not self-issued and explicit_policy is | (a) If certificate n was not self-issued and explicit_policy is | |||
| not 0, decrement explicit_policy by 1. | not 0, decrement explicit_policy by 1. | |||
| (b) If a policy constraints extension is included in the certifi- | (b) If a policy constraints extension is included in the | |||
| cate and requireExplicitPolicy is present and has a value of 0, | certificate and requireExplicitPolicy is present and has a value | |||
| set the explicit_policy state variable to 0. | of 0, set the explicit_policy state variable to 0. | |||
| (c) Assign the certificate subjectPublicKey to working_public_key. | (c) Assign the certificate subjectPublicKey to 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 parameters | |||
| to the working_public_key_parameters variable. | to the working_public_key_parameters variable. | |||
| If the subjectPublicKeyInfo field of the certificate contains an | If the subjectPublicKeyInfo field of the certificate contains an | |||
| algorithm field with null parameters or parameters are omitted, | algorithm field with null parameters or parameters are omitted, | |||
| compare the certificate subjectPublicKey algorithm to the | compare the certificate subjectPublicKey algorithm to the | |||
| skipping to change at page 70, line 47 ¶ | skipping to change at page 74, line 19 ¶ | |||
| algorithm and the working_public_key_algorithm are different, set | algorithm and the working_public_key_algorithm are different, set | |||
| the working_public_key_parameters to null. | 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. | the certificate n. | |||
| (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 NULL. | (i) If the valid_policy_tree is NULL, the intersection is NULL. | |||
| (ii) If the valid_policy_tree is not NULL and the | (ii) If the valid_policy_tree is not NULL and the user- | |||
| user_initial_policy_set is "any-policy", the intersection is | initial-policy-set is any-policy, the intersection is the | |||
| the entire valid_policy_tree. | entire valid_policy_tree. | |||
| (iii) If the valid_policy_tree is not NULL and the user- | ||||
| initial-policy-set is not any-policy, calculate the | ||||
| intersection of the valid_policy_tree and the user-initial- | ||||
| policy-set as follows: | ||||
| (iii) If the valid_policy_tree is not NULL and the | ||||
| user_initial_policy_set is not "any-policy", calculate the | ||||
| intersection of the valid_policy_tree and the | ||||
| user_initial_policy_set as follows: | ||||
| 1. Determine the set of policy nodes whose parent nodes have | 1. Determine the set of policy nodes whose parent nodes have | |||
| a valid_policy of "any-policy". This is the | a valid_policy of any-policy. 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-policy-set | |||
| and is not "any-policy", delete this node and all its chil- | and is not any-policy, delete this node and all its | |||
| dren. | children. | |||
| 3. If there is a node in the valid_policy_tree of depth n-1 | 3. If there is a node in the valid_policy_tree of depth n-1 | |||
| or less without any child nodes, delete that node. Repeat | or less without any child nodes, delete that node. Repeat | |||
| this step until there are no nodes of depth n-1 or less | this step until there are no nodes of depth n-1 or less | |||
| without children. | without children. | |||
| Upon completion of all steps, path processing has succeeded if the | Upon completion of all steps, path processing has succeeded if the | |||
| value of explicit_policy variable is greater than zero, or the | value of explicit_policy variable is greater than zero, or the | |||
| valid_policy_tree is not NULL. | valid_policy_tree is not NULL. | |||
| 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 Extending Path Validation | 6.2 Using the Path Validation Algorithm | |||
| The path validation algorithm presented in 6.1 is based on several | The path validation algorithm describes the process of validating a | |||
| simplifying assumptions (e.g., a single trusted CA that starts all | single certification path. While each path begins with a specific | |||
| valid paths). This algorithm may be extended for cases where the | trust anchor, there is no requirement that all paths validated by a | |||
| assumptions do not hold. | particular system share a single trust anchor. | |||
| This procedure may be extended for multiple trusted CAs by providing | The selection of one or more trusted CAs is a local decision. A | |||
| a set of self-signed certificates to the validation module. In this | system may provide any one of its trusted CAs as the trust anchor for | |||
| case, a valid path could begin with any one of the self-signed certi- | a particular path. The inputs to the path validation algorithm may | |||
| ficates. Limitations in the trust paths for any particular key may | be different for each path. The inputs used to process a path may | |||
| be incorporated into the self-signed certificate's extensions. In | reflect application-specific requirements or limitations in the trust | |||
| this way, the self-signed certificates permit the path validation | accorded a particular trust anchor. For example, a trusted CA may | |||
| module to automatically incorporate local security policy and | only be trusted for a particular certificate policy. This | |||
| requirements. | restriction can be expressed through the inputs to the path | |||
| validation procedure. | ||||
| It is also possible to specify an extended version of the above cer- | It is also possible to specify an extended version of the above | |||
| tification path processing procedure which results in default | certification path processing procedure which results in default | |||
| behavior identical to the rules of PEM [RFC 1422]. In this extended | behavior identical to the rules of PEM [RFC 1422]. In this extended | |||
| version, additional inputs to the procedure are a list of one or more | version, additional inputs to the procedure are a list of one or more | |||
| Policy Certification Authorities (PCAs) names and an indicator of the | Policy Certification Authorities (PCAs) names and an indicator of the | |||
| position in the certification path where the PCA is expected. At the | position in the certification path where the PCA is expected. At the | |||
| nominated PCA position, the CA name is compared against this list. | nominated PCA position, the CA name is compared against this list. | |||
| If a recognized PCA name is found, then a constraint of Subordina- | If a recognized PCA name is found, then a constraint of | |||
| teToCA is implicitly assumed for the remainder of the certification | SubordinateToCA is implicitly assumed for the remainder of the | |||
| path and processing continues. If no valid PCA name is found, and if | certification path and processing continues. If no valid PCA name is | |||
| the certification path cannot be validated on the basis of identified | found, and if the certification path cannot be validated on the basis | |||
| policies, then the certification path is considered invalid. | of identified policies, then the certification path is considered | |||
| invalid. | ||||
| 6.3 CRL Validation | 6.3 CRL Validation | |||
| This section describes the steps necessary to determine if a certifi- | This section describes the steps necessary to determine if a | |||
| cate is revoked or on hold status when CRLs are the revocation | certificate is revoked or on hold status when CRLs are the revocation | |||
| mechanism used by the certificate issuer. Conforming implementations | mechanism used by the certificate issuer. Conforming implementations | |||
| of this specification are not required to implement this algorithm, | of this specification are not required to implement this algorithm, | |||
| but MUST be functionally equivalent to the external behavior result- | but MUST be functionally equivalent to the external behavior | |||
| ing from this procedure. Any algorithm may be used by a particular | resulting from this procedure. Any algorithm may be used by a | |||
| implementation so long as it derives the correct result. | particular implementation so long as it derives the correct result. | |||
| 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. | |||
| 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 if a certificate is on a par- | number and issuer name to determine if a certificate is on a | |||
| ticular CRL. The basicConstraints extension is used to determine | particular CRL. The basicConstraints extension is used to | |||
| whether the supplied certificate is associated with a CA or an | determine whether the supplied certificate is associated with a CA | |||
| end-entity. If present, the algorithm may use the cRLDistribu- | or an end-entity. If present, the algorithm may use the | |||
| tionsPoint and freshestCRL extensions to determine revocation | cRLDistributionsPoint and freshestCRL extensions to determine | |||
| status. | revocation status. | |||
| (b) use-deltas: This boolean input determines if the delta needs | (b) use-deltas: This boolean input determines if the delta needs | |||
| to be checked if the CRL is still valid | to be checked if the CRL is still valid. | |||
| Note that implementations supporting legacy PKIs, such as RFC 1422 | Note that implementations supporting legacy PKIs, such as RFC 1422 | |||
| and X.509 version 1, will need an additional input indicating | and X.509 version 1, will need an additional input indicating | |||
| whether the supplied certificate is associated with a CA or an | whether the supplied certificate is associated with a CA or an | |||
| end-entity. | end-entity. | |||
| 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. The | reasons supported by the CRLs and delta CRLs processed so far. The | |||
| legal members of the set are the possible values for reasonflags: | legal members of the set are the possible values for reasonflags: | |||
| unspecified; keyCompromise; caCompromise; affiliationChanged; | unspecified; keyCompromise; caCompromise; affiliationChanged; | |||
| superseded; cessationOfOperation; and certificateHold. The spe- | superseded; cessationOfOperation; and certificateHold. The | |||
| cial value "all-reasons" is used to denote the set of all legal | special value all-reasons is used to denote the set of all legal | |||
| members. This variable is initialized to the empty set. | members. This variable is initialized to the empty set. | |||
| (b) cert_status: This variable contains the status of the certifi- | (b) cert_status: This variable contains the status of the | |||
| cate. Legal values are unspecified; keyCompromise; caCompromise; | certificate. Legal values are unspecified; keyCompromise; | |||
| affiliationChanged; superseded; cessationOfOperation; and certifi- | caCompromise; affiliationChanged; superseded; | |||
| cateHold, the special value "UNREVOKED", or the special value | cessationOfOperation; and certificateHold, the special value | |||
| "UNDETERMINED". This variable is initialized to the special value | UNREVOKED, or the special value UNDETERMINED. This variable is | |||
| "UNREVOKED". | initialized to the special value UNREVOKED. | |||
| (c) interim_reasons_mask: This contains the set of revocation rea- | (c) interim_reasons_mask: This contains the set of revocation | |||
| sons supported by the CRL or delta CRL currently being processed. | reasons supported by the CRL or delta CRL currently being | |||
| 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 envornments only are concerned with | codes. For example, some envornments only are concerned with | |||
| caCompromise and keyCompromise for CA certificates. This algorithnm | caCompromise and keyCompromise for CA certificates. This algorithnm | |||
| 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 the certificate is not revoked. | |||
| The algorithm checks one or more CRLs until either the certificate | The algorithm checks one or more CRLs until either the certificate | |||
| status is determined to be revoked or sufficent CRLs have been | status is determined to be revoked or sufficent CRLs have been | |||
| checked to cover all reason codes. | checked to cover all reason codes. | |||
| For each distribution point (DP) in the crl distribution points | For each distribution point (DP) in the crl distribution points | |||
| extension while ((reasons_mask is not "all-reasons") and (cert_status | extension while ((reasons_mask is not all-reasons) and (cert_status | |||
| is UNREVOKED)) | is UNREVOKED)) | |||
| (1) locate the corresponding CRL in CRL cache, and perform the | (1) locate the corresponding CRL in CRL cache, and perform the | |||
| following verifications: | following verifications: | |||
| (a) compute the interim_reasons_mask for this CRL as follows: | (a) compute the interim_reasons_mask for this CRL as follows: | |||
| 1. if the CRL includes reasons and the DP includes reasons, | 1. if the CRL includes reasons and the DP includes reasons, | |||
| then set interim_reasons_mask to the intersection of of rea- | then set interim_reasons_mask to the intersection of of | |||
| sons in the DP and reasons in CRL reasons extension. | reasons in the DP and reasons in CRL reasons extension. | |||
| 2. if the CRL includes reasons but the DP omits reasons, | 2. if the CRL includes reasons but the DP omits reasons, | |||
| then set interim_reasons_mask to the value of CRL reasons. | then set interim_reasons_mask to the value of CRL reasons. | |||
| 3. if the CRL omits reasons but the DP includes reasons, | 3. if the CRL omits reasons but the DP includes reasons, | |||
| then set interim_reasons_mask to the value of DP reasons. | then set interim_reasons_mask to the value of DP reasons. | |||
| 4. if the CRL omits reasons and the DP omits reasons, then | 4. if the CRL omits reasons and the DP omits reasons, then | |||
| set interim_reasons_mask to the special value "all-reasons". | set interim_reasons_mask to the special value all-reasons. | |||
| Verify that interim_reasons_mask includes one or more reasons | Verify that interim_reasons_mask includes one or more reasons | |||
| that is not included in the reasons_mask. | that is not included in the reasons_mask. | |||
| (b) Verify the issuer of the CRL as follows: | (b) Verify the issuer of the CRL as follows: | |||
| if the DP includes cRLIssuer, then verify that the CRL | if the DP includes cRLIssuer, then verify that the CRL | |||
| issuer matches cRLIssuer else verify that the CRL issuer | issuer matches cRLIssuer else verify that the CRL issuer | |||
| matches the certificate issuer. | matches the certificate issuer. | |||
| skipping to change at page 75, line 4 ¶ | skipping to change at page 78, line 29 ¶ | |||
| issuer | issuer | |||
| 2. validate the signature on the delta CRL | 2. validate the signature on the delta CRL | |||
| (e) If a delta CRL was obtained in (a) or (b), and the | (e) If a delta CRL was obtained in (a) or (b), and the | |||
| verifications (c) and (d) suceeded, combine the base and | verifications (c) and (d) suceeded, combine the base and | |||
| delta to form a complete CRL. | delta to form a complete CRL. | |||
| (3) If steps and (1) and (2) succeed, then set reasons_mask to the | (3) If steps and (1) and (2) succeed, then set reasons_mask to the | |||
| union of reasons_mask and interim_reasons_mask | union of reasons_mask and interim_reasons_mask | |||
| (4) Search for the certificate on the CRL | (4) Search for the certificate on the CRL | |||
| (a) search for the serial number on the CRL | (a) search for the serial number on the CRL | |||
| (b) if (a) succeeds, verify that (1) the CRL entry extension | (b) if (a) succeeds, verify that (1) the CRL entry extension | |||
| Certificate issuer is not present or (2) the issuer identified | Certificate issuer is not present or (2) the issuer identified | |||
| in the CRL entry extension Certificate issuer is the issuer of | in the CRL entry extension Certificate issuer is the issuer of | |||
| the certificate. | the certificate. | |||
| (c) if (a) and (b) succeeded, set the cert_status variable as | (c) if (a) and (b) succeeded, set the cert_status variable as | |||
| appropriate: | appropriate: | |||
| 1. if the reasons extension is present, set the cert_status | 1. if the reasons extension is present, set the cert_status | |||
| variable to the value of the reasons extension | variable to the value of the reasons extension | |||
| 2. if the reasons extension is not present, set the | 2. if the reasons extension is not present, set the | |||
| cert_status variable to the special value "not specified" | cert_status variable to the special value not-specified. | |||
| if ((reasons_mask is "all-reasons") OR (if cert_status is not | if ((reasons_mask is all-reasons) OR (if cert_status is not | |||
| UNREVOKED) return cert_status | UNREVOKED) return cert_status | |||
| If all CRLs named in the crl distribution points extension have | If all CRLs named in the crl distribution points extension have | |||
| been exhausted, and the reasons_mask is not "all-reasons" and the | been exhausted, and the reasons_mask is not all-reasons and the | |||
| cert_status is still UNREVOKED, the verifier must obtain addi- | cert_status is still UNREVOKED, the verifier must obtain | |||
| tional CRLs. If the | additional CRLs. If the | |||
| The verifier must repeat the process above with the additional | The verifier must repeat the process above with the additional | |||
| CRLs not specified in a distribution point. | CRLs not specified in a distribution point. | |||
| If all CRLs are exhausted and the reasons_mask is not "all rea- | If all CRLs are exhausted and the reasons_mask is not all-reasons | |||
| sons" return the cert_status UNDETERMINED. | return the cert_status UNDETERMINED. | |||
| 7 References | 7 References | |||
| [RFC 791] J. Postel, "Internet Protocol", September 1981. | [RFC 791] J. Postel, "Internet Protocol", September 1981. | |||
| [RFC 822] D. Crocker, "Standard for the format of ARPA Internet text | [RFC 822] D. Crocker, "Standard for the format of ARPA Internet text | |||
| messages", August 1982. | messages", August 1982. | |||
| [RFC 1034] P.V. Mockapetris, "Domain names - concepts and | [RFC 1034] P.V. Mockapetris, "Domain names - concepts and | |||
| facilities", November 1987. | facilities", November 1987. | |||
| skipping to change at page 77, line 24 ¶ | skipping to change at page 80, line 50 ¶ | |||
| [PKINIT] Tung, B., Neuman C., Hur M., Medvinsky A., Medvinsky S., | [PKINIT] Tung, B., Neuman C., Hur M., Medvinsky A., Medvinsky S., | |||
| Wray J., and J. Trostle, "Public Key Cryptography for | Wray J., and J. Trostle, "Public Key Cryptography for | |||
| Initial Authentciaion in Kerberos," | Initial Authentciaion in Kerberos," | |||
| draft-ietf-cat-kerberos-pk-init-11.txt, March 15, 2000. | draft-ietf-cat-kerberos-pk-init-11.txt, March 15, 2000. | |||
| [PKIX ALGS] Bassham, L., Housley, R., and W. Polk, "Internet X.509 | [PKIX ALGS] Bassham, L., Housley, R., and W. Polk, "Internet X.509 | |||
| Public Key Infrastructure Representation of Public Keys | Public Key Infrastructure Representation of Public Keys | |||
| and Digital Signatures," | and Digital Signatures," | |||
| draft-ietf-pkix-ipki-pkalgs-00.txt, July 14, 2000. | draft-ietf-pkix-ipki-pkalgs-00.txt, July 14, 2000. | |||
| [PKIX TSA] Cain, P., Pinkas, D., and R. Zuccherato, "Internet X.509 | ||||
| Public Key Infrastructure Time Stamp Protocol," | ||||
| draft-ietf-pkix-time-stamp-12.txt, November, 2000. | ||||
| 8 Intellectual Property Rights | 8 Intellectual Property Rights | |||
| The IETF has been notified of intellectual property rights claimed in | The IETF has been notified of intellectual property rights claimed in | |||
| regard to some or all of the specification contained in this docu- | regard to some or all of the specification contained in this | |||
| ment. For more information consult the online list of claimed | document. For more information consult the online list of claimed | |||
| rights. | rights. | |||
| The IETF takes no position regarding the validity or scope of any | The IETF takes no position regarding the validity or scope of any | |||
| intellectual property or other rights that might be claimed to per- | intellectual property or other rights that might be claimed to | |||
| tain to the implementation or use of the technology described in this | pertain to the implementation or use of the technology described in | |||
| document or the extent to which any license under such rights might | this document or the extent to which any license under such rights | |||
| or might not be available; neither does it represent that it has made | might or might not be available; neither does it represent that it | |||
| any effort to identify any such rights. Information on the IETF's | has made any effort to identify any such rights. Information on the | |||
| procedures with respect to rights in standards-track and standards- | IETF's procedures with respect to rights in standards-track and | |||
| related documentation can be found in BCP-11. Copies of claims of | standards-related documentation can be found in BCP-11. Copies of | |||
| rights made available for publication and any assurances of licenses | claims of rights made available for publication and any assurances of | |||
| to be made available, or the result of an attempt made to obtain a | licenses to be made available, or the result of an attempt made to | |||
| general license or permission for the use of such proprietary rights | obtain a general license or permission for the use of such | |||
| by implementors or users of this specification can be obtained from | proprietary rights by implementors or users of this specification can | |||
| the IETF Secretariat. | be obtained from the IETF Secretariat. | |||
| 9 Security Considerations | 9 Security Considerations | |||
| The majority of this specification is devoted to the format and con- | The majority of this specification is devoted to the format and | |||
| tent of certificates and CRLs. Since certificates and CRLs are digi- | content of certificates and CRLs. Since certificates and CRLs are | |||
| tally signed, no additional integrity service is necessary. Neither | digitally signed, no additional integrity service is necessary. | |||
| certificates nor CRLs need be kept secret, and unrestricted and | Neither certificates nor CRLs need be kept secret, and unrestricted | |||
| 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 sec- | will affect the assurance provided to certificate users. This | |||
| tion highlights critical issues that should be considered by imple- | section highlights critical issues that should be considered by | |||
| mentors, administrators, and users. | implementors, administrators, and users. | |||
| The procedures performed by CAs and RAs to validate the binding of | The procedures performed by CAs and RAs to validate the binding of | |||
| the subject's identity of their public key greatly affect the | the subject's identity of their public key greatly affect the | |||
| assurance that should be placed in the certificate. Relying parties | assurance that should be placed in the certificate. Relying parties | |||
| may wish to review the CA's certificate practice statement. This may | may wish to review the CA's certificate practice statement. This may | |||
| be particularly important when issuing certificates to other CAs. | be particularly important when issuing certificates 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 key | strongly discouraged. Use of separate key pairs for signature and key | |||
| management provides several benefits to the users. The ramifications | management provides several benefits to the users. The ramifications | |||
| associated with loss or disclosure of a signature key are different | associated with loss or disclosure of a signature key are different | |||
| from loss or disclosure of a key management key. Using separate key | from loss or disclosure of a key management key. Using separate key | |||
| pairs permits a balanced and flexible response. Similarly, different | pairs permits a balanced and flexible response. Similarly, different | |||
| validity periods or key lengths for each key pair may be appropriate | validity periods or key lengths for each key pair may be appropriate | |||
| in some application environments. Unfortunately, some legacy applica- | in some application environments. Unfortunately, some legacy | |||
| tions (e.g., SSL) use a single key pair for signature and key manage- | applications (e.g., SSL) use a single key pair for signature and key | |||
| ment. | management. | |||
| The protection afforded private keys is a critical factor in main- | The protection afforded private keys is a critical factor in | |||
| taining security. On a small scale, failure of users to protect | maintaining security. On a small scale, failure of users to protect | |||
| their private keys will permit an attacker to masquerade as them, or | their private keys will permit an attacker to masquerade as them, or | |||
| decrypt their personal information. On a larger scale, compromise of | decrypt their personal information. On a larger scale, compromise of | |||
| a CA's private signing key may have a catastrophic effect. If an | a CA's private signing key may have a catastrophic effect. If an | |||
| attacker obtains the private key unnoticed, the attacker may issue | attacker obtains the private key unnoticed, the attacker may issue | |||
| bogus certificates and CRLs. Existence of bogus certificates and | bogus certificates and CRLs. Existence of bogus certificates and | |||
| CRLs will undermine confidence in the system. If the compromise is | CRLs will undermine confidence in the system. If the compromise is | |||
| detected, all certificates issued to the CA shall be revoked, | detected, all certificates issued to the CA shall be revoked, | |||
| preventing services between its users and users of other CAs. | preventing services between its users and users of other CAs. | |||
| Rebuilding after such a compromise will be problematic, so CAs are | Rebuilding after such a compromise will be problematic, so CAs are | |||
| advised to implement a combination of strong technical measures | advised to implement a combination of strong technical measures | |||
| (e.g., tamper-resistant cryptographic modules) and appropriate | (e.g., tamper-resistant cryptographic modules) and appropriate | |||
| management procedures (e.g., separation of duties) to avoid such an | management procedures (e.g., separation of duties) to avoid such an | |||
| incident. | incident. | |||
| Loss of a CA's private signing key may also be problematic. The CA | Loss of a CA's private signing key may also be problematic. The CA | |||
| would not be able to produce CRLs or perform normal key rollover. | would not be able to produce CRLs or perform normal key rollover. | |||
| CAs are advised to maintain secure backup for signing keys. The | CAs are advised to maintain secure backup for signing keys. The | |||
| security of the key backup procedures is a critical factor in avoid- | security of the key backup procedures is a critical factor in | |||
| ing key compromise. | avoiding key compromise. | |||
| The availability and freshness of revocation information will affect | The availability and freshness of revocation information will affect | |||
| the degree of assurance that should be placed in a certificate. | the degree of assurance that should be placed in a certificate. | |||
| While certificates expire naturally, events may occur during its | While certificates expire naturally, events may occur during its | |||
| natural lifetime which negate the binding between the subject and | natural lifetime which negate the binding between the subject and | |||
| public key. If revocation information is untimely or unavailable, | public key. If revocation information is untimely or unavailable, | |||
| the assurance associated with the binding is clearly reduced. Simi- | the assurance associated with the binding is clearly reduced. | |||
| larly, implementations of the Path Validation mechanism described in | Similarly, implementations of the Path Validation mechanism described | |||
| section 6 that omit revocation checking provide less assurance than | in section 6 that omit revocation checking provide less assurance | |||
| those that support it. | than those that support it. | |||
| The path validation algorithm depends on the certain knowledge of the | The path validation algorithm depends on the certain knowledge of the | |||
| public keys (and other information) about one or more trusted CAs. | public keys (and other information) about one or more trusted CAs. | |||
| The decision to trust a CA is an important decision as it ultimately | The decision to trust a CA is an important decision as it ultimately | |||
| determines the trust afforded a certificate. The authenticated dis- | determines the trust afforded a certificate. The authenticated | |||
| tribution of trusted CA public keys (usually in the form of a "self- | distribution of trusted CA public keys (usually in the form of a | |||
| signed" certificate) is a security critical out of band process that | "self-signed" certificate) is a security critical out of band process | |||
| is beyond the scope of this specification. | that is beyond the scope of this specification. | |||
| 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 will | the path validation routine. Selection of too many trusted CAs will | |||
| make the trusted CA information difficult to maintain. On the other | make the trusted CA information difficult to maintain. On the other | |||
| hand, selection of only one trusted CA may limit users to a closed | hand, selection of only one trusted CA may limit users to a closed | |||
| community of users until a global PKI emerges. | community of users until a global PKI emerges. | |||
| The quality of implementations that process certificates may also | The quality of implementations that process certificates may also | |||
| affect the degree of assurance provided. The path validation algo- | affect the degree of assurance provided. The path validation | |||
| rithm described in section 6 relies upon the integrity of the trusted | algorithm described in section 6 relies upon the integrity of the | |||
| CA information, and especially the integrity of the public keys asso- | trusted CA information, and especially the integrity of the public | |||
| ciated with the trusted CAs. By substituting public keys for which | keys associated with the trusted CAs. By substituting public keys | |||
| an attacker has the private key, an attacker could trick the user | for which an attacker has the private key, an attacker could trick | |||
| into accepting false certificates. | the 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 tech- | advances in cryptology so they can employ strong cryptographic | |||
| niques. In addition, CAs should decline to issue certificates to CAs | techniques. In addition, CAs should decline to issue certificates to | |||
| or end entities that generate weak signatures. | CAs or end entities that generate weak signatures. | |||
| Inconsistent application of name comparison rules may result in | Inconsistent application of name comparison rules may result in | |||
| acceptance of invalid X.509 certification paths, or rejection of | acceptance of invalid X.509 certification paths, or rejection of | |||
| valid ones. The X.500 series of specifications defines rules for | valid ones. The X.500 series of specifications defines rules for | |||
| comparing distinguished names require comparison of strings without | comparing distinguished names require comparison of strings without | |||
| regard to case, character set, multi-character white space substring, | regard to case, character set, multi-character white space substring, | |||
| or leading and trailing white space. This specification relaxes | or leading and trailing white space. This specification relaxes | |||
| these requirements, requiring support for binary comparison at a | these requirements, requiring support for binary comparison at a | |||
| minimum. | minimum. | |||
| CAs shall encode the distinguished name in the subject field of a CA | CAs shall 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 the latter CA. If CAs use different encod- | in certificates issued by the latter CA. If CAs use different | |||
| ings, implementations of this specification may fail to recognize | encodings, implementations of this specification may fail to | |||
| name chains for paths that include this certificate. As a conse- | recognize name chains for paths that include this certificate. As a | |||
| quence, valid paths could be rejected. | consequence, valid paths could be rejected. | |||
| In addition, name constraints for distinguished names shall be stated | In addition, name constraints for distinguished names shall be stated | |||
| identically to the encoding used in the subject field or subjectAlt- | identically to the encoding used in the subject field or | |||
| Name extension. If not, (1) name constraints stated as excludedSub- | subjectAltName extension. If not, (1) name constraints stated as | |||
| Trees will not match and invalid paths will be accepted and (2) name | excludedSubTrees will not match and invalid paths will be accepted | |||
| constraints expressed as permittedSubtrees will not match and valid | and (2) name constraints expressed as permittedSubtrees will not | |||
| paths will be rejected. To avoid acceptance of invalid paths, CAs | match and valid paths will be rejected. To avoid acceptance of | |||
| should state name constraints for distinguished names as permit- | invalid paths, CAs should state name constraints for distinguished | |||
| tedSubtrees where ever possible. | names as permittedSubtrees where ever possible. | |||
| Appendix A. Psuedo-ASN.1 Structures and OIDs | Appendix A. Psuedo-ASN.1 Structures and OIDs | |||
| This section describes data objects used by conforming PKI components | This section describes data objects used by conforming PKI components | |||
| in an "ASN.1-like" syntax. This syntax is a hybrid of the 1988 and | in an "ASN.1-like" syntax. This syntax is a hybrid of the 1988 and | |||
| 1993 ASN.1 syntaxes. The 1988 ASN.1 syntax is augmented with 1993 | 1993 ASN.1 syntaxes. The 1988 ASN.1 syntax is augmented with 1993 | |||
| UNIVERSAL Types UniversalString, BMPString and UTF8String. | 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 | |||
| skipping to change at page 82, line 27 ¶ | skipping to change at page 85, line 27 ¶ | |||
| id-qt-cps OBJECT IDENTIFIER ::= { id-qt 1 } | id-qt-cps OBJECT IDENTIFIER ::= { id-qt 1 } | |||
| -- OID for CPS qualifier | -- OID for CPS qualifier | |||
| id-qt-unotice OBJECT IDENTIFIER ::= { id-qt 2 } | id-qt-unotice OBJECT IDENTIFIER ::= { id-qt 2 } | |||
| -- OID for user notice qualifier | -- OID for user notice qualifier | |||
| -- access descriptor definitions | -- access descriptor definitions | |||
| id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 } | id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 } | |||
| id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 } | id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 } | |||
| id-ad-timeStamping OBJECT IDENTIFIER ::= { id-ad 3 } | ||||
| id-ad-caRepository OBJECT IDENTIFIER ::= { id-ad 5 } | ||||
| -- attribute data types -- | -- attribute data types -- | |||
| Attribute ::= SEQUENCE { | Attribute ::= SEQUENCE { | |||
| type AttributeType, | type AttributeType, | |||
| values SET OF AttributeValue | values SET OF AttributeValue | |||
| -- at least one value is required -- } | -- at least one value is required -- } | |||
| AttributeType ::= OBJECT IDENTIFIER | AttributeType ::= OBJECT IDENTIFIER | |||
| skipping to change at page 101, line 6 ¶ | skipping to change at page 104, line 6 ¶ | |||
| -- invalidity date CRL entry extension OID and syntax | -- invalidity date CRL entry extension OID and syntax | |||
| 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 positive integer, that is, | CAs MUST force the serialNumber to be a non-negative integer, that | |||
| the sign bit in the DER encoding of the INTEGER value MUST be zero - | is, the sign bit in the DER encoding of the INTEGER value MUST be | |||
| this can be done by adding a leading (leftmost) `00'H octet if neces- | zero - this can be done by adding a leading (leftmost) `00'H octet if | |||
| sary. This removes a potential ambiguity in mapping between a string | necessary. This removes a potential ambiguity in mapping between a | |||
| of octets and an integer value. | string of octets and an integer value. | |||
| Given the uniqueness requirements above serial numbers can be | As noted in section 4.1.2.2, serial numbers can be expected to | |||
| expected to contain long integers. Certificate users MUST be able to | contain long integers. Certificate users MUST be able to handle | |||
| handle serialNumber values longer than 32 bits. Conformant CAs MUST | serialNumber values up to 20 octets in length. Conformant CAs MUST | |||
| NOT use serialNumber values longer than 20 octets. | NOT use serialNumber 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. Implementa- | one entry. MAX indicates the upper bound is unspecified. | |||
| tions are free to choose an upper bound that suits their environment. | Implementations are free to choose an upper bound that suits their | |||
| environment. | ||||
| The construct "positiveInt ::= INTEGER (0..MAX)" defines positiveInt | The construct "positiveInt ::= INTEGER (0..MAX)" defines positiveInt | |||
| as a subtype of INTEGER containing integers greater than or equal to | as a subtype of INTEGER containing integers greater than or equal to | |||
| zero. The upper bound is unspecified. Implementations are free to | zero. The upper bound is unspecified. Implementations are free to | |||
| select an upper bound that suits their environment. | select an upper bound that suits their 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 lower case letters 'a' through 'z', upper case | |||
| 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. | |||
| The character string type TeletexString is a superset of Printable- | The character string type TeletexString is a superset of | |||
| String. TeletexString supports a fairly standard (ascii-like) Latin | PrintableString. TeletexString supports a fairly standard (ascii- | |||
| character set, Latin characters with non-spacing accents and Japanese | like) Latin character set, Latin characters with non-spacing accents | |||
| characters. | and Japanese characters. | |||
| The character string type UniversalString supports any of the charac- | The character string type UniversalString supports any of the | |||
| ters allowed by ISO 10646-1. ISO 10646 is the Universal multiple- | characters allowed by ISO 10646-1. ISO 10646 is the Universal | |||
| octet coded Character Set (UCS). ISO 10646-1 specifes the architec- | multiple-octet coded Character Set (UCS). ISO 10646-1 specifes the | |||
| ture and the "basic multilingual plane" - a large standard character | architecture and the "basic multilingual plane" - a large standard | |||
| set which includes all major world character standards. | character set which includes all major world character standards. | |||
| The character string type UTF8String will be introduced in the 1998 | The character string type UTF8String will be introduced in the 1998 | |||
| version of ASN.1. UTF8String is a universal type and has been | version of ASN.1. UTF8String is a universal type and has been | |||
| assigned tag number 12. The content of UTF8String was defined by RFC | assigned tag number 12. The content of UTF8String was defined by RFC | |||
| 2044 and updated in RFC 2279, "UTF-8, a transformation Format of ISO | 2044 and updated in RFC 2279, "UTF-8, a transformation Format of ISO | |||
| 10646." ISO is expected to formally add UTF8String to the list of | 10646." ISO is expected to formally add UTF8String to the list of | |||
| choices for DirectoryString in 1998 as well. | choices for DirectoryString in 1998 as well. | |||
| 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 RFC 2277, IETF Policy on Character Sets and | |||
| Languages, this document includes UTF8String as a choice in Directo- | Languages, this document includes UTF8String as a choice in | |||
| ryString and the CPS qualifier extensions. | DirectoryString and the CPS qualifier extensions. | |||
| 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, this | requires ordering of the encodings of the values. In particular, this | |||
| issue arises with respect to distinguished names. | issue arises with respect to distinguished names. | |||
| Object Identifiers (OIDs) are used throught this specification to | Object Identifiers (OIDs) are used throught 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 which have arc elements | This specification mandates support for OIDs which have arc elements | |||
| with values that are less than 2^28, i.e. they MUST be between 0 and | with values that are less than 2^28, i.e. they MUST be between 0 and | |||
| 268,435,455 inclusive. This allows each arc element to be represented | 268,435,455 inclusive. This allows each arc element to be represented | |||
| within a single 32 bit word. Implementations MUST also support OIDs | within a single 32 bit word. Implementations MUST also support OIDs | |||
| where the length of the dotted decimal (see [LDAP], section 4.1.2) | where the length of the dotted decimal (see [LDAP], section 4.1.2) | |||
| string representation can be up to 100 bytes (inclusive). Implementa- | string representation can be up to 100 bytes (inclusive). | |||
| tions MUST be able to handle OIDs with up to 20 elements (inclusive). | Implementations MUST be able to handle OIDs with up to 20 elements | |||
| CAs SHOULD NOT issue certificates which contain OIDs that breach | (inclusive). CAs SHOULD NOT issue certificates which contain OIDs | |||
| these requirements. | that breach these requirements. | |||
| Appendix C. Examples | Appendix C. Examples | |||
| This section contains four examples: three certificates and a CRL. | This section contains four examples: three certificates and a CRL. | |||
| The first two certificates and the CRL comprise a minimal certifica- | The first two certificates and the CRL comprise a minimal | |||
| tion path. | certification path. | |||
| Section C.1 contains an annotated hex dump of a "self-signed" certi- | Section C.1 contains an annotated hex dump of a "self-signed" | |||
| ficate issued by a CA whose distinguished name is | certificate issued by a CA whose distinguished name is | |||
| cn=us,o=gov,ou=nist. The certificate contains a DSA public key with | cn=us,o=gov,ou=nist. The certificate contains a DSA public key with | |||
| parameters, and is signed by the corresponding DSA private key. | parameters, and is signed by the corresponding DSA private key. | |||
| Section C.2 contains an annotated hex dump of an end-entity certifi- | Section C.2 contains an annotated hex dump of an end-entity | |||
| cate. The end entity certificate contains a DSA public key, and is | certificate. The end entity certificate contains a DSA public key, | |||
| signed by the private key corresponding to the "self-signed" certifi- | and is signed by the private key corresponding to the "self-signed" | |||
| cate in section C.1. | certificate in section C.1. | |||
| Section C.3 contains a dump of an end entity certificate which con- | Section C.3 contains a dump of an end entity certificate which | |||
| tains an RSA public key and is signed with RSA and MD5. This certi- | contains an RSA public key and is signed with RSA and MD5. This | |||
| ficate is not part of the minimal certification path. | certificate is not part of the minimal certification path. | |||
| Section C.4 contains an annotated hex dump of a CRL. The CRL is | Section C.4 contains an annotated hex dump of a CRL. The CRL is | |||
| issued by the CA whose distinguished name is cn=us,o=gov,ou=nist and | issued by the CA whose distinguished name is cn=us,o=gov,ou=nist and | |||
| the list of revoked certificates includes the end entity certificate | the list of revoked certificates includes the end entity certificate | |||
| presented in C.2. | presented in C.2. | |||
| The certificates were processed using Peter Gutman's dumpasn1 utility | The certificates were processed using Peter Gutman's dumpasn1 utility | |||
| to generate the output. The source for the dumpasn1 utility is | to generate the output. The source for the dumpasn1 utility is | |||
| available at <http://www.cs.auckland.ac.nz/~pgut001/dumpasn1.c>. The | available at <http://www.cs.auckland.ac.nz/~pgut001/dumpasn1.c>. The | |||
| binaries for the certificates and CRLs are available at | binaries for the certificates and CRLs are available at | |||
| skipping to change at page 103, line 18 ¶ | skipping to change at page 106, line 19 ¶ | |||
| C.1 Certificate | C.1 Certificate | |||
| This section contains an annotated hex dump of a 699 byte version 3 | This section contains an annotated hex dump of a 699 byte version 3 | |||
| certificate. The certificate contains the following information: | certificate. The certificate contains the following information: | |||
| (a) the serial number is 23 (17 hex); | (a) the serial number is 23 (17 hex); | |||
| (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 OU=NIST; O=gov; C=US | (c) the issuer's distinguished name is OU=NIST; O=gov; C=US | |||
| (d) and the subject's distinguished name is OU=NIST; O=gov; C=US | (d) and the subject's distinguished name is OU=NIST; O=gov; C=US | |||
| (e) the certificate was issued on June 30, 1997 and will expire on | (e) the certificate was issued on June 30, 1997 and will expire on | |||
| December 31, 1997; | December 31, 1997; | |||
| (f) the certificate contains a 1024 bit DSA public key with parame- | (f) the certificate contains a 1024 bit DSA public key with | |||
| ters; | parameters; | |||
| (g) the certificate contains a subject key identifier extension; and | (g) the certificate contains a subject key identifier extension; 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 30 701: SEQUENCE { | 0 30 701: SEQUENCE { | |||
| 4 30 637: SEQUENCE { | 4 30 637: SEQUENCE { | |||
| 8 A0 3: [0] { | 8 A0 3: [0] { | |||
| 10 02 1: INTEGER 2 | 10 02 1: INTEGER 2 | |||
| : } | : } | |||
| 13 02 1: INTEGER 23 | 13 02 1: INTEGER 23 | |||
| skipping to change at page 106, line 17 ¶ | skipping to change at page 109, line 17 ¶ | |||
| This section contains an annotated hex dump of a 730 byte version 3 | This section contains an annotated hex dump of a 730 byte version 3 | |||
| certificate. The certificate contains the following information: | certificate. The certificate contains the following information: | |||
| (a) the serial number is 18 (12 hex); | (a) the serial number is 18 (12 hex); | |||
| (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 OU=nist; O=gov; C=US | (c) the issuer's distinguished name is OU=nist; O=gov; C=US | |||
| (d) and the subject's distinguished name is CN=Tim Polk; OU=nist; | (d) and the subject's distinguished name is CN=Tim Polk; OU=nist; | |||
| O=gov; C=US | O=gov; C=US | |||
| (e) the certificate was valid from July 30, 1997 through December 1, | (e) the certificate was valid from July 30, 1997 through December 1, | |||
| 1997; | 1997; | |||
| (f) the certificate contains a 1024 bit DSA public key; | (f) the certificate contains a 1024 bit DSA public key; | |||
| (g) the certificate is an end entity certificate, as the basic con- | (g) the certificate is an end entity certificate, as the basic | |||
| straints 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; | |||
| and | and | |||
| (i) the certificate includes one alternative name - an RFC 822 | (i) the certificate includes one alternative name - an RFC 822 | |||
| address. | address. | |||
| 0 30 734: SEQUENCE { | 0 30 734: SEQUENCE { | |||
| 4 30 669: SEQUENCE { | 4 30 669: SEQUENCE { | |||
| 8 A0 3: [0] { | 8 A0 3: [0] { | |||
| 10 02 1: INTEGER 2 | 10 02 1: INTEGER 2 | |||
| : } | : } | |||
| skipping to change at page 109, line 13 ¶ | skipping to change at page 112, line 13 ¶ | |||
| : EA CC 22 B2 16 01 FF 13 02 15 00 97 D0 24 96 0F | : EA CC 22 B2 16 01 FF 13 02 15 00 97 D0 24 96 0F | |||
| : 64 8A C3 8D 41 B2 0E B9 26 D5 31 D1 A0 F1 BC | : 64 8A C3 8D 41 B2 0E B9 26 D5 31 D1 A0 F1 BC | |||
| : } | : } | |||
| C.3 End-Entity Certificate Using RSA | C.3 End-Entity Certificate Using RSA | |||
| This section contains an annotated hex dump of a 675 byte version 3 | This section contains an annotated hex dump of a 675 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 RSA and the MD2 hash algorithm; | (b) the certificate is signed with RSA and the MD2 hash algorithm; | |||
| (c) the issuer's distinguished name is OU=Dept. Arquitectura de Com- | (c) the issuer's distinguished name is OU=Dept. Arquitectura de | |||
| putadors; O=Universitat Politecnica de Catalunya; C=ES | Computadors; O=Universitat Politecnica de Catalunya; C=ES | |||
| (d) and the subject's distinguished name is CN=Francisco Jordan; | (d) and the subject's distinguished name is CN=Francisco Jordan; | |||
| OU=Dept. Arquitectura de Computadors; O=Universitat Politecnica de | OU=Dept. Arquitectura de Computadors; O=Universitat Politecnica de | |||
| Catalunya; C=ES | Catalunya; C=ES | |||
| (e) the certificate was issued on May 21, 1996 and expired on May 21, | (e) the certificate was issued on May 21, 1996 and expired on May 21, | |||
| 1997; | 1997; | |||
| (f) the certificate contains a 768 bit RSA public key; | (f) the certificate contains a 768 bit RSA public key; | |||
| (g) the certificate is an end entity certificate (not a CA certifi- | (g) the certificate is an end entity certificate (not a CA | |||
| cate); | certificate); | |||
| (h) the certificate includes an alternative subject name and an | (h) the certificate includes an alternative subject name and an | |||
| alternative issuer name - bothe are URLs; | alternative issuer name - bothe are URLs; | |||
| (i) the certificate include an authority key identifier and certifi- | (i) the certificate include an authority key identifier and | |||
| cate policies extensions; and | certificate policies extensions; and | |||
| (j) the certificate includes a critical key usage extension specify- | (j) the certificate includes a critical key usage extension | |||
| ing the public is intended for generation of digital signatures. | specifying the public is intended for generation of digital | |||
| signatures. | ||||
| 0 30 654: SEQUENCE { | 0 30 654: SEQUENCE { | |||
| 4 30 503: SEQUENCE { | 4 30 503: SEQUENCE { | |||
| 8 A0 3: [0] { | 8 A0 3: [0] { | |||
| 10 02 1: INTEGER 2 | 10 02 1: INTEGER 2 | |||
| : } | : } | |||
| 13 02 2: INTEGER 256 | 13 02 2: INTEGER 256 | |||
| 17 30 13: SEQUENCE { | 17 30 13: SEQUENCE { | |||
| 19 06 9: OBJECT IDENTIFIER | 19 06 9: OBJECT IDENTIFIER | |||
| : sha1withRSAEncryption (1 2 840 113549 1 1 5) | : sha1withRSAEncryption (1 2 840 113549 1 1 5) | |||
| skipping to change at page 114, line 50 ¶ | skipping to change at page 117, line 50 ¶ | |||
| This document and translations of it may be copied and furnished to | This document and translations of it may be copied and furnished to | |||
| others, and derivative works that comment on or otherwise explain it | others, and derivative works that comment on or otherwise explain it | |||
| or assist in its implementation may be prepared, copied, published | or assist in its implementation may be prepared, copied, published | |||
| and distributed, in whole or in part, without restriction of any | and distributed, in whole or in part, without restriction of any | |||
| kind, provided that the above copyright notice and this paragraph are | kind, provided that the above copyright notice and this paragraph are | |||
| included on all such copies and derivative works. In addition, the | included on all such copies and derivative works. In addition, the | |||
| ASN.1 modules presented in Appendices A and B may be used in whole or | ASN.1 modules presented in Appendices A and B may be used in whole or | |||
| in part without inclusion of the copyright notice. However, this | in part without inclusion of the copyright notice. However, this | |||
| document itself may not be modified in any way, such as by removing | document itself may not be modified in any way, such as by removing | |||
| the copyright notice or references to the Internet Society or other | the copyright notice or references to the Internet Society or other | |||
| Internet organizations, except as needed for the purpose of develop- | Internet organizations, except as needed for the purpose of | |||
| ing Internet standards in which case the procedures for copyrights | developing Internet standards in which case the procedures for | |||
| defined in the Internet Standards process shall be followed, or as | copyrights defined in the Internet Standards process shall be | |||
| required to translate it into languages other than English. | followed, or as required to translate it into languages other than | |||
| English. | ||||
| The limited permissions granted above are perpetual and will not be | The limited permissions granted above are perpetual and will not be | |||
| revoked by the Internet Society or its successors or assigns. This | revoked by the Internet Society or its successors or assigns. This | |||
| document and the information contained herein is provided on an "AS | document and the information contained herein is provided on an "AS | |||
| IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK | IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK | |||
| FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT | FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT | |||
| LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL | LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL | |||
| NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY | NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY | |||
| OR FITNESS FOR A PARTICULAR PURPOSE. | OR FITNESS FOR A PARTICULAR PURPOSE. | |||
| End of changes. 313 change blocks. | ||||
| 1183 lines changed or deleted | 1349 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||