Subject: cRLDistributionPoints errors

From: Peter Gutmann <[email-masked]>
Date: Wed, 5 Apr 2000 17:59:09 -0400 (EDT)

Currently there are two mutually incompatible interpretations of
cRLDistributionPoints floating around.  The reason for this is that the use of
GeneralNames is causing confusion among implementors, with the result that
we're seeing certs with either of the following two formatting options:

  SEQUENCE {
    OBJECT IDENTIFIER cRLDistributionPoints (2 5 29 31)
    OCTET STRING, encapsulates {
        SEQUENCE {
          SEQUENCE {
            [0] {
              [0] {
                [2] 'wibble'
                }
              }
            }
          }
        }
    }

  SEQUENCE {
    OBJECT IDENTIFIER cRLDistributionPoints (2 5 29 31)
    OCTET STRING, encapsulates {
        SEQUENCE {
          SEQUENCE {
            [0] {
              [0] {
                SEQUENCE {
                  [2] 'wibble'
                  }
                }
              }
            }
          }
        }
    }

(I've deleted the CA's URL's :-).  Note the extra SEQUENCE in the second one,
which IMHO is wrong:

   fullName [0] GeneralNames
-> fullName [0] IMPLICIT SEQUENCE OF GeneralName
-> fullName [0] GeneralName

(ie the SEQUENCE gets eaten by the parent tag).  Here's what happens when you
feed these to some common software:

                 IE4             IE5         Netscape
Implicit tag     OK              OK             OK
Explicit tag     OK              X              OK

I suspect that NS4 and IE4 are ignoring the extension, which is why they don't
complain about the explicit tagging, while IE5, which doesn't ignore it, is
rejecting it.

It looks like we're stuck with both forms for the forseeable future (does
anyone know which software is generating the broken form?  I get sent these
things by my spies, but since they're often from obscure CA's I can't figure
out what the originating application is).  If it'd possible to get some idea of
how widespread this is it's possible to determine whether you can say "It's
busted, go away" or whether you have to add yet another nondeterministic
parsing kludge to your ASN.1 parser to handle it.

Peter.