On February 22, 2010 09:18:25 am Eisenacher, Patrick wrote:
> > -----Original Message-----
> > From: Patrick Patterson
> >
> > On 12/02/10 8:51 AM, skillz...@gmail.com wrote:
> > > Is there a way (via the API rather than the tool) to tell
> >
> > OpenSSL that
> >
> > > the sub-CA certificate is trusted and it doesn't need to
> >
> > walk further
> >
> > > up the chain? For my case, I embed the sub-CA certificate in my code
> > > and I'm space constrained so I'd prefer to not include the entire
> > > certificate chain.
> >
> > According to RFC5280 this is not allowed (See section 6).
> > Given that if
> > the Root revokes the Sub-CA, the EE cert is invalid, you have to check
> > the entire chain to ensure that all parts are still valid. As a rule,
> > you can only use self-signed certificates as trust anchors.
>
> This is not true. You only have to do path validation up to your trust
> anchor, whatever that is, be it a root-ca, an subordinate-ca or even an ee.
> Only if you check for revocation you have to walk up the whole chain from
> ee to root-ca.
>
According to RFC5280 (Section 6.1) - the following is the basic requirement 
for Path Validation:

"The primary goal of path validation is to verify the binding between
   a subject distinguished name or a subject alternative name and
   subject public key, as represented in the target certificate, based
   on the public key of the trust anchor.  In most cases, the target
   certificate will be an end entity certificate, but the target
   certificate may be a CA certificate as long as the subject public key
   is to be used for a purpose other than verifying the signature on a
   public key certificate.  Verifying the binding between the name and
   subject public key requires obtaining a sequence of certificates that
   support that binding.  The procedure performed to obtain this
   sequence of certificates is outside the scope of this specification.

To meet this goal, the path validation process verifies, among other
   things, that a prospective certification path (a sequence of n
   certificates) satisfies the following conditions:

      (a)  for all x in {1, ..., n-1}, the subject of certificate x is
           the issuer of certificate x+1;

      (b)  certificate 1 is issued by the trust anchor;

      (c)  certificate n is the certificate to be validated (i.e., the
           target certificate); and

      (d)  for all x in {1, ..., n}, the certificate was valid at the
           time in question.
"

If you DON'T use a self signed trust anchor, then you have to have special 
processing instructions, and/or have a certificate store that is able to 
absolutely treat a certificate differently when it is part of a chain, or when 
it is a trust anchor (for, and the reason why most Root CA profiles don't have 
CRL DP or OCSP info in them, a trust anchor is NOT checked for validity - it 
is assumed by its continued presence as a Trust Anchor to be valid).

Yes, it is probably a limitation to OpenSSL that it doesn't really have a 
"Trust Anchor only" store, but if you take a look at most major 
implementations (US DoD, FBCA, CertiPath, SAFE, etc.) then they pretty much 
always use self signed "root" certs as the trust anchor.

> Unfortunately, the perceived verification algorithm is a limitation in
> openssl, which always wants to do path validation up to a self signed cert,
> even if no revocation checking is requested. And no, there's no way to
> modify its verification algorithm besides from changing the code.
>
> This also has consequences for applications using openssl for ssl support
> like apache, where you can not easily configure to authenticate only those
> clients presenting a cert that was issued by a specific subordinate-ca.
>
From a design point of view - why not use a self signed Root CA as the trust 
anchor, but policy or name constrain the sub CA, and then issue EE certs with 
the appropriate Policy or Name space? This accomplishes the same thing as what 
you want to do, is probably better PKI (why do you only trust that one CA - 
probably because of the policy it is issuing the certs under), and is fully 
supportable today.

as an example:

Root CA --- SubCA1  (Policy 1.2.3.4,                    - EE (Policy 1.2.3.4)
             |                  Namespace email = foo.com)      (email 
b...@foo.com)
             \
               \ -- SubCA2 (Policy 2.3.4.5,             - EE (policy 2.3.4.5)
                                 Namespace bar.com)          (email 
c...@bar.com)   


Then, you could configure Apache to accept the Root CA, and, either using your 
application on that server, or some tool (like Pathfinder), to constrain on 
Policy.

To do otherwise is probably against the Relying Party provisions of the PKI 
provider policy (who, at the end of the day, is the one who says which of its 
certificates can be used as a Trust Anchor) - most policies that I know of 
basically say that if the PKI has revoked any certificate in that PKI, and the 
Relying Party doesn't check for that,  then any use of the certs is at the 
RP's own risk.

Which means that if an RP says that they only want to trust certs coming from 
a particular Subordinate CA in a given PKI, and that PKI publishes revocation 
information for that CA (they only handle out-of-band trust anchor management 
for their Roots), then it is at the RP's own risk, if they do NOT check for 
the revocation of that  SubCA. It's probably to stop people from shooting 
themselves in the foot in this way that the OpenSSL folks DON'T have special 
handling rules for SubCA revocation checking.

Now, if TAMP ever makes it to a full standard at the IETF, then there may have 
to be some re-thinking of this, but for now, for, I would say, a good portion 
of PKIs in place  and deployed, the policies of those PKIs frown upon an RP 
making a trust decision using only a SubCA.

If you know of any policy that is currently operational that DOES allow this 
(Trust Anchor on a SubCA explicitly allowed by PKI policy), I'd be curious to 
see how they manage the issues involved, and what their profiles indicate.

Best Regards,

-- 
Patrick Patterson
President and Chief PKI Architect,
Carillon Information Security Inc.
http://www.carillon.ca
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to