]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
x509/v3_purp.c etc.: improve doc/comments on codesign and timestamp purpose checks
authorDr. David von Oheimb <David.von.Oheimb@siemens.com>
Thu, 25 Aug 2022 15:24:27 +0000 (17:24 +0200)
committerTomas Mraz <tomas@openssl.org>
Fri, 18 Nov 2022 14:10:01 +0000 (15:10 +0100)
Reviewed-by: Dmitry Belyavskiy <beldmit@gmail.com>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/19064)

CHANGES.md
crypto/x509/v3_purp.c
doc/man3/X509_STORE_CTX_new.pod

index a55a6c47aaa6a8d6e3d084d63e982847c21fd69a..e4dd7833fa39d7bb661c4e2d76305c15169b800b 100644 (file)
@@ -170,6 +170,11 @@ OpenSSL 3.2
 
    *Tomáš Mráz*
 
+ * Add X.509 certificate codeSigning purpose and related checks on key usage and
+   extended key usage of the leaf certificate according to the CA/Browser Forum.
+
+   * Lutz Jänicke*
+
  * Fix and extend certificate handling and the apps `x509`, `verify` etc.
    such as adding a trace facility for debugging certificate chain building.
 
index a261d9082dbcfaf62acc5e73b8ea039f1900b06b..ce195daa5fb52149070abbc893bdaf0b8d4d9e1f 100644 (file)
@@ -839,10 +839,21 @@ static int check_purpose_timestamp_sign(const X509_PURPOSE *xp, const X509 *x,
 {
     int i_ext;
 
-    /* If ca is true we must return if this is a valid CA certificate. */
+    /*
+     * If require_ca is true we must check if this is a valid CA certificate.
+     * The extra requirements by the CA/Browser Forum are not checked.
+     */
     if (require_ca)
         return check_ca(x);
 
+    /*
+     * Key Usage is checked according to RFC 5280 and
+     * Extended Key Usage attributes is checked according to RFC 3161.
+     * The extra (and somewhat conflicting) CA/Browser Forum
+     * Baseline Requirements for the Issuance and Management of
+     * Publicly‐Trusted Code Signing Certificates, Version 3.0.0,
+     * Section 7.1.2.3: Code signing and Timestamp Certificate are not checked.
+     */
     /*
      * Check the optional key usage field:
      * if Key Usage is present, it must be one of digitalSignature
@@ -871,21 +882,24 @@ static int check_purpose_code_sign(const X509_PURPOSE *xp, const X509 *x,
 {
     int i_ext;
 
-    /* If ca is true we must return if this is a valid CA certificate. */
+    /*
+     * If require_ca is true we must check if this is a valid CA certificate.
+     * The extra requirements by the CA/Browser Forum are not checked.
+     */
     if (require_ca)
         return check_ca(x);
 
     /*
      * Check the key usage and extended key usage fields:
      *
-     * Reference: CA Browser Forum,
-     * Baseline Requirements for the Issuance and Management of 
+     * Reference: CA/Browser Forum,
+     * Baseline Requirements for the Issuance and Management of
      * Publicly‐Trusted Code Signing Certificates, Version 3.0.0,
      * Section 7.1.2.3: Code signing and Timestamp Certificate
      *
      * Checking covers Key Usage and Extended Key Usage attributes.
-     * Other properties like CRL Distribution Points and Authoriy
-     * Information Access (AIA) are not checked.
+     * The certificatePolicies, cRLDistributionPoints (CDP), and
+     * authorityInformationAccess (AIA) extensions are so far not checked.
      */
     /* Key Usage */
     if ((x->ex_flags & EXFLAG_KUSAGE) == 0)
index 72f60093d7e832834b28ace2f0c59436760717c2..d12dbfb8037c6af594e8d9e65403b8ad97e7a944 100644 (file)
@@ -189,13 +189,16 @@ B<X509_PURPOSE_NS_SSL_SERVER>, B<X509_PURPOSE_SMIME_SIGN>,
 B<X509_PURPOSE_SMIME_ENCRYPT>, B<X509_PURPOSE_CRL_SIGN>, B<X509_PURPOSE_ANY>,
 B<X509_PURPOSE_OCSP_HELPER>, B<X509_PURPOSE_TIMESTAMP_SIGN> and
 B<X509_PURPOSE_CODE_SIGN>.  It is also
-possible to create a custom purpose value. Setting a purpose will ensure that
-the key usage declared within certificates in the chain being verified is
-consistent with that purpose as well as, potentially, other checks. Every
-purpose also has an associated default trust value which will also be set at the
-same time. During verification this trust setting will be verified to check it
-is consistent with the trust set by the system administrator for certificates in
-the chain.
+possible to create a custom purpose value. Setting a purpose requests that
+the key usage and extended key usage (EKU) extensions optionally declared within
+the certificate and its chain are verified to be consistent with that purpose.
+For SSL client, SSL server, and S/MIME purposes, the EKU is checked also for the
+CA certificates along the chain, including any given trust anchor certificate.
+Potentially also further checks are done (depending on the purpose given).
+Every purpose also has an associated default trust value, which will also be set
+at the same time. During verification, this trust setting will be verified
+to check whether it is consistent with the trust set by the system administrator
+for certificates in the chain.
 
 X509_STORE_CTX_set_trust() sets the trust value for the target certificate
 being verified in the I<ctx>. Built-in available values for the I<trust>