There are Javascript libraries which range from generating key pairs to 
creating x509 certificates.  So you could generate a keypair in the browser, 
then generate a certificate signing request, send the CSR to a remote API along 
with a challenge response, and then get back a signed x509 certificate from 
your RA -- all in the browser using XHR.

However, you can't get anything out of the browser without a local application. 
 You'd need some combination of the HTML5 FileWriter API and an application 
registered to a URL protocol which could be triggered by the browser to read 
your certificates and install them.  I make no comment on the security of that 
scheme, but it definitely seems possible.

On Jul 29, 2012, at 12:52 AM, Sanford Staab 
<sanfo...@gmail.com<mailto:sanfo...@gmail.com>> wrote:

Good questions and similar to what is on my mind.  Please let me know if you 
get any good answers to these questions.

From: Ted Byers<mailto:r.ted.by...@gmail.com>
Sent: Saturday, July 28, 2012 12:15 PM
To: openssl-users@openssl.org<mailto:openssl-users@openssl.org>
Subject: client server management of client SSL certificates

I am familiar with basic usage of openssl to make certificates, but what I am 
unclear about is how one has a CA (certificate authority) on a server, for a 
given organization, and an RA (registration authority) using a different server 
in that organization, and then supports creating client certificates on a given 
user's machine once that user has logged into a secure website and passed a 
series of challenges and responses established between the RA and the user.  
And perhaps, someone can shed a little light on whether there is anything more 
between an RA and CA than simply a message from the RA that a given person, who 
gives the right responses to these challenge questions, ought to receive a 
certificate.

How does one do that in a manner that is user friendly (i.e. without requiring 
the user to install openssl on his personal computer or mobile device, or 
having the user's private key transmitted over the web)?  I would suppose that 
the key would remain confidential once the user has established a SSL 
connection with the server, so it could be made using a cgi script that in turn 
uses openssl to make the csr and then send the private key and certificate to 
the user.  But then, the user would have to figure out how and where to install 
the key and certificate, and there is the question of whether or not the 
client's private key ought to ever be on the server.  I know people who are 
'technically challenged' (you could almost describe them as Luddites, except 
that they are addicted to their smart phones and other assorted mobile devices 
- to the point they deserve the tickets they'd get while using them when 
driving) who could benefit from use of a combination of server and client 
certificates, if somehow I could establish a web server that makes it as easy 
for them to get their client certificates as it is for them to browse 
amazon.com<http://amazon.com/> to buy a book.  Anything beyond that and their 
eyes would start to glaze over when you start giving them instructions on how 
to proceed.  And we really want to avoid the glazed eye phenomenon!  And we 
also want to avoid having a company's MIS or his designated assistant, having 
to create and install these certificates on every mobile device (smart phone, 
laptop, &c.) the company's staff have, or having to go to each of their homes 
to install the keys and certificates on their home computers.

Is there a JavaScript solution that handles creating the private key and CSR in 
the client's browser, and transmits the CSR to the server so it can create and 
sign the certificate which then sends it back to the browser so a different 
JavaScript function can handle installing both the key and certificate in the 
right places, and back up both to a 'safe' place?  If so, is there a variant 
which is certain to work in all browsers and that can install the certificates 
in all the browsers installed on the clients machine as well as in all the 
email clients installed on the clients machine (so the user can encrypt or 
sign, or both, any document, and check signatures and decrypt documents, 
regardless of whether transmitted via email or the web)?

Any information that can be provided would be greatly appreciated.

Thanks

Ted

Reply via email to