views:

1746

answers:

3

Hi,

through the bouncycastle wiki page I was able to understand how to create a X.509 root certificate and a certification request, but I do not quite understand how to proceed concept- and programming wise after that.

Lets assume party A does a cert request and gets his client certificate from the CA. How can some party B validate A's certificate? What kind of certificate does A need? A root certificate? A 'normal' client certificate?

And how does the validation work on programming level, if we assume that A has successfully send his certificate in DER or PEM format to B?

Any help is much appreciated.

Best Regards, Rob

+1  A: 

Ok, the idea behind CAs is as follows:

  • CAs are people everyone trusts. To this end, a selection of Trusted CAs is available in your browser/email client/even on my mobile. In your case, your public root key (certificate) should be in your application.
  • Users send requests to the CA for a certificate in PEM format with the public key. CAs do some (I leave this ambiguous deliberately) form of verification of the end user, such as charging them money or in the case of enhanced verification (green) certs, background checks.
  • If the CA doesn't think the user's request is valid, they communicate this somehow.
  • If they do, they sign the public key and produce a certificate containing this information. This is where you process the cert-req and turn it into an X.509 cert.
  • Other users come across our fictitious user and want to know if they can trust them. So, they take a look at the certificate and find it is digitally signed by someone they have in their trust list. So, the fact that they trust the root CA and only the root CA could sign (via their private key) this user's public key and the CA trusts the user, we deduce that the new user can trust mr fictitious.

On a programmatic level, you implement this by reading the X.509 certificate and working out who the CA is supposed to be. Given that CA's fingerprint, you find it in your database and verify the signature. If it matches, you have your chain of trust.

This works because, as I've said, only the CA can create the digital signature but anyone can verify it. It is exactly the reverse of the encryption concept. What you do is "encrypt with the private key" the data you wish to sign and verify that the "decrypt with the public key" equals the data you've got.

Ninefingers
Thanks for your detailed explanation of the CA concept. I understand it now. I just have to figure out the details on programming level now.
Rob
+1  A: 
erickson
Thanks for your answer, but I should have said, that I am using Java ME so I have to rely on the bouncycastle-(lightweight)-API to do the validation of the certificate. Do you have an idea, or better yet again a code snippet, for that? Thanks a lot.
Rob
A: 

PS at all: I am using Java ME so I have to rely on the bouncycastle-(lightweight)-API to do the validation of the certificate. Does anyone have an idea, or better yet a code snippet, for that?

Thanks a lot.

Rob