I want to setup a enterprise certification authority for my domain. So I can issue certificates for various purposes. I would like to follow the best practice of having an offline CA as the root, and setup my enterprise CA as a subordinate. But it seems silly to license a fully copy of Windows for this task.
What I am hoping to be able to do is to install some live distribution onto a USB flash disk, and then install openssl, and setup my CA on flash drive. When I am ready to build the root key/cert I will disconnect the computer from the network, and then never use that USB disk on a network attached computer again.
Will I be able to properly sign and create a subordinate CA certificate for a Windows enterprise CA, that will be usable. What options do I need to use with OpenSSL to build the CA and sign the subordinate CA certificate properly.
I have attempted searched the web, and the this was the only thing I could find on the subject. But it predates 2008, and I am not entirely sure the person was every successful.
Yup, it works just fine; a Windows certificate authority has no qualms about running as a subordinate to a non-Windows root.
Tested with an OpenSSL root and a Windows 2008 R2 subordinate in Enterprise mode.
A couple things to play nice with what the MS CA expects in the OpenSSL config:
Valid AIA and CDP locations should apply to the root certificate, in the section configured by the
x509_extensions
property of the[req]
section for the self-signed root. Something along these lines:A given OpenSSL config probably doesn't allow subordinate CAs by default. Change that for signed requests (make sure this isn't in place for requests that shouldn't be CAs, of course). This will be in the section configured by the
x509_extensions
property of the[ca]
section:So, we'll do a CA to test.
Make your root:
Fiddle with your config and create the necessary files and directories in the
[ca]
section of your OpenSSL config.All set to get the Microsoft side of things going; create a Windows subordinate CA with manual signing.
Upload the certificate request to the OpenSSL server. While you're at it, download the root certificate. Import it into the trusted roots store - of the computer, not your user!
Issue the subordinate certificate:
If that didn't work, your CA probably has an issue with the config - new certs directory, index file, serial file, etc. Check the error message.
If it went, then that's it. If you haven't, make a CRL and put it in the CDP that you configured above; I just installed Apache and jammed it in webroot:
And put your certificate in the AIA location, if it isn't already:
Download the newly issued subordinate certificate and install it to the CA with the Certification Authority MMC snap-in. It'll gripe about any issues with trust or validation, but it has no moral objection to taking it.
End result; a working Windows CA with no complaining from the Enterprise PKI snap-in, with a telltale
OpenSSL Generated Certificate
in the attributes.I see what you are getting at, but I don't think OpenSSL is quite the tool for the job. You might want to look at Open Source Certificate Authority projects such as EJBCA which are more focussed on this functionality than OpenSSL, and have specific documentation you can use.
I don't see a reason why the concept wouldn't work, since all you are doing is signing the subordinate CA's certificate. If you were paying a public CA to do this for you, you wouldn't necessarily know or care what flavour of server they were using.
All you need to care about is:
I can't say I have done this, but I am sure if you follow the docs for generating a CSR from a windows box, then follow your CA docs for generating a .p7k cert from a CSR, then you should be fine.
By the way - I would recommend you create your CA as a virtual machine for a popular hypervisor such as Hyper-V or VMware, rather than a boot disk, make sure you store it very securely somewhere your successor can find it, and spin it up offline periodically to make sure it runs, or transfer it to new media/technology. A root CA may have a life of 10 or 20 years...