Hi,

Dave, thank you very much for your suggestions. This sounds like the
solution I'm looking for. I've set up a completely new PKI to test this,
but I'm still having one problem.

What I did was:

- I generated a newRootCA (new keypair, selfsigned certificate).

- I generated another selfsigned certificate (bridgeCert) from the
  newRootCA's private key. From this cert, I used the -x509toreq
  option to generate a csr (bridgeCSR).

- I took the bridgeCSR and issued a certificate using the oldRootCA.
  The certificate issued has AKI = oldRootCA and SKI = newRootCA

- I generated a CSR for a new subCA and issued a certificate using
  newRootCA. The AKI of the subCA cert is the same as the SKI of
  newRootCA and bridgeCert. The AKI does not include any issuer or
  serial information

What I am able to do now is:

- As long as I trust oldRoot and my server handshake send subCA and
bridge, the trustchain verifies: "Verify return code: 0 (ok)"

- As long as I trust newRoot any my server handshake send subCA but NOT
bridge, the trustchain verifies: "Verify return code: 0 (ok)"

- If I only trust newRoot but send the bridgeCert, I get an error. Also,
if I only trust oldRoot and do not send bridge, I get an error.

Am I still missing something?

Regards, Sven.


> If you can get (all) the clients to update, yes. Sometimes that's hard.
> Sometimes it's hard even *locating* the clients, especially programs.
> 
> You shouldn't cross-sign the new root itself, then it isn't a true root
> and (more importantly) won't consistently be accepted as an anchor.
> 
> What you can do, and in my experience real public CAs actually do, is:
> 
> - create new root key, and new (selfsigned) root cert for it.
> 
> - also create a 'bridge' cert for the new root key, and the new root DN if 
> different (which it usually is, e.g. Joe's Clam, Oyster and Cert Emporium 
> Gen3 
> supercedes Joe's Clam and Cert Shack Gen2), (cross)signed by the old root
> (thus with issuer and AKI if present identifying oldroot, but SKI same as 
> newroot).
> 
> - issue the subCA cert(s) with AKI keyid for the new root key or omitted, and
> issuer matching both newroot and bridge, but NOT using AKI issuer&serial 
> 
> - have server(s) handshake send subCA and bridge certs, at least for a period 
> of time. 
> A stale client has only oldroot will chain bridge to oldroot and succeed as 
> long as 
> oldroot doesn't expire. A clever fresh client has newroot abd will chain 
> subCA to 
> newroot, ignoring bridge -- while a dumb client will ignore available newroot 
> and 
> insist on chaining bridge to oldroot. Every time I've looked (not 
> systematically) 
> major browsers and Java are clever, but OpenSSL (client/relier) through 1.0.1 
> is not. 
> I know 1.0.2 will change verification but don't know about this particular 
> point.



-- 
PGP Key: https://0x80.io/pub/files/key.asc

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to