Re: Critical certificate policies extension

Niklas Matthies <[email protected]> Tue, 19 Jul 2022 21:28:08 +0200
Newsgroups gmane.ietf.x509
Message-ID <[email protected]>
On Thu 2022-07-14 at 08:31h, Peter Gutmann wrote on pkix:
>Niklas Matthies <[email protected]> writes:
>
>>Yes, but the flag is set by default, and the documentation [2] notes that if
>>it is not set, then the implementation is not PKIX compliant by itself.
>
>That seems incorrect, I'd expect it to be off by default.

It is on by default. From the documentation I linked:

     When a PKIXParameters object is created, this flag is set to true.
     This setting reflects the most common (and simplest) strategy for
     processing policy qualifiers. Applications that want to use a more
     sophisticated policy must set this flag to false.

>>Right. So I gather that rejecting all certificates containing a 
>>critical certificate policies extension with an unknown policy OID 
>>would be a valid interpretation of the RFC requirements I cited.
>
>Uhh... pass.  Technically it's OK if it's in the initial policy set, 
>but then you get into the rathole of what it means to "regcognise" an 
>extension.  Which was also debated endlessly on the list, see e.g. 
>the PKIX thread "What is meant by recognizing critical extensions?"

Right. At the very least, it makes sense to me to apply the principle 
that the critical flag should not make a difference for elements where 
the applicable requirements are fully supported. That is, the critical 
flag would only ever used along the lines of:

     if (I_do_not_know_this_extension ||
         I_do_not_comply_with_some_applicable_requirement_for_this_extension)
     {
         if (extension_is_critical)
         {
             reject_certificate();
         }
     }

And never along the lines of:

     if (I_know_this_extension_and_comply_with_all_applicable_requirements)
     {
         if (extension_is_critical)
         {
             do_something();
         }
         else
         {
             do_something_different();
         }
     }

The set of "applicable requirements" can of course still be unclear. 
But you don't have different sets of applicable extension-specific 
requirements depending on whether the extension is critical or not.

Niklas