I've run across a bit of a problem locally which I'm wondering if there 
is interest in a general solution for, or whether this is going to just 
need to remain a local mod.  Let me try to explain what's going on 
through a scenario, as I promise if I use real names it's likely to be 
even more confusing.

Alice and Bob are two members of an organization, and each runs their 
own root Certificate Authority within the company.  Both CAs issue 
certificates for user and machine identification (including S/MIME).  
Alice issues her certificates in a three-tier'd system (root, 
intermediate, leaf), while Bob has implemented a half dozen tiers within 
his structure (root, intermediate-1, intermediate-2, ... , leaf).

Alice has implemented CAS for authenticating her users [Bob's users 
don't need access to the systems, nor are they likely to] and employs 
CAS' exceptional ability to do CRL checking without having to restart 
every time those are updated [currently hourly - she runs a tight ship!].

One day - completely out of the blue if you ask her - Alice is reminded 
that she actually works for Bob, and that that means her certificates 
should integrate in a trust chain.  To keep things working until Alice's 
root CA expires, management decides that a cross-signed trust must be 
established between the two trees, such that Bob Intermediate Cert-2 is 
going to sign Alice's root certificate, and both will continue to exist 
in the wild.  Neither is given an option in this arrangement.

Over time as emails bounce back and forth, both Alice and Bob's systems 
begin to discover what has happened through the magic of chain 
completion, but due to implementation bugs [which are beyond the scope 
of this conversation - Very Large Customers cannot seem to get them 
fixed], machines in Alice's domain begin to become confused about what 
'right' looks like.  This manifests itself in CAS AuthN when they begin 
to present a certificate chain to the server which instead of chaining 
back to Alice's Root CA chains back to Bob's Root CA through the 
bridge.  Fred would be an example of this.  Fred presents Fred->Alice 
Intermediate->Alice Root CA->Bob Intermediate 2->Bob Intermediate 1->Bob 
Root CA, but CAS errors out when it begins to evaluate a certificate 
which isn't actually in the Tomcat truststore and for which it doesn't 
have a CRL, denying Fred access he should legitimately have.

To my [perhaps incredibly naive] read of the code, Alice now faces three 
options:

 1. Only examine the leaf certificate presented by the client.
     1. Most implementations of this are going to be a bit brittle, but
        that should be considered in context of:
     2. There is no requirement in the protocol [at least none
        respected] that a client actually present their certificate
        chain when attempting to authenticate; they may choose to send
        only the leaf certificate if that suits them.
     3. Evaluating only the leaf certificate means that intermediate
        certs are not examined for revocation.  Obviously a rare event,
        but principally that's bad; especially if you're already
        updating CRLs hourly.
 2. Build the chain from the TC truststore [or a configured one] and the
    presented leaf certificate, arriving at a chain which can actually
    pass validation.
     1. In Alice and Bob's case, the example would be Fred above whose
        certificate submission would be refactored to terminate at Alice
        Root CA (as the self-signed version) instead of the submitted chain.
     2. This is a good bit of work per AuthN (relatively speaking
        anyway), but is the most secure [up to date CRL checks for all
        certs in the final chain; all signatures verified].
 3. Force users to be properly configured to handle the completely
    confused hierarchy.
     1. Throw-away - BYOD has made this functionally impossible for the
        chain discovery & bug issues.

In the real world version of this I've implemented a POC of #1 through 
an 'ignoreClientChain' property which can be set in 
X509AuthenticationHandler, achieving a marginally acceptable result, but 
I'm wondering whether there is any community interest in the capability, 
and if so which COA is perceived as best for everyone?

Thanks!

Sean


-- 
Ne Desit Virtus,

Sean R. Baker
1LT, MS
United States Army
Office #: (301) 319-0712
Email: sean.ba...@usuhs.edu


-- 
You are currently subscribed to cas-dev@lists.jasig.org as: 
arch...@mail-archive.com
To unsubscribe, change settings or access archives, see 
http://www.ja-sig.org/wiki/display/JSG/cas-dev

Reply via email to