yselkowitz / rpms / krb5

Forked from rpms/krb5 2 years ago
Clone
Blob Blame History Raw
Reading the NID_key_usage extension doesn't ensure that the ex_flags and
ex_kusage fields that the ku_reject() macro checks.  It'd probably be
better to check the usage string directly, but calling X509_check_ca()
makes the right things happen.  RT#6775, part of #629022.

Index: src/plugins/preauth/pkinit/pkinit_crypto_openssl.c
===================================================================
--- src/plugins/preauth/pkinit/pkinit_crypto_openssl.c	(revision 24312)
+++ src/plugins/preauth/pkinit/pkinit_crypto_openssl.c	(revision 24313)
@@ -2005,6 +2005,7 @@
             pkiDebug("%s: found acceptable EKU, checking for digitalSignature\n", __FUNCTION__);
 
             /* check that digitalSignature KeyUsage is present */
+            X509_check_ca(reqctx->received_cert);
             if ((usage = X509_get_ext_d2i(reqctx->received_cert,
                                           NID_key_usage, NULL, NULL))) {
 
@@ -4551,6 +4552,7 @@
     }
 
     /* Make sure usage exists before checking bits */
+    X509_check_ca(x);
     usage = X509_get_ext_d2i(x, NID_key_usage, NULL, NULL);
     if (usage) {
         if (!ku_reject(x, X509v3_KU_DIGITAL_SIGNATURE))