Skip to content

Instantly share code, notes, and snippets.

@maxvt
Last active August 29, 2015 14:12
Show Gist options
  • Save maxvt/1482152fd829dd9f2293 to your computer and use it in GitHub Desktop.
Save maxvt/1482152fd829dd9f2293 to your computer and use it in GitHub Desktop.

How to generate a web server certificate for signing with StartSSL

The authoritative version of this gist will be maintained at http://www.maxvt.net/2014/12/23/web-certificate-startssl.html

A lot of advice on the web is outdated. There are three critical points that might be out of date or wrong:

  • Use 2048 bit key length. 1024 bit length is no longer considered secure, but if your server software is old enough, it might still be the default setting.
  • Use SHA-256 hash. The default is the older SHA1, which is being phased out since it is considered less secure. Apparently, by choosing SHA-256, you will lose compatibility with Windows XP and Windows Server 2003. Hopefully you do not run those anymore and therefore don't care.
  • Create a CSR (certificate signing request), not a self-signed certificate. A lot of advice on self-signed certificates was written when SSL certs were expensive. Today, SSL is free (with some limitations), for example with StartSSL. There is no excuse for using self signed certs anymore.

openssl req -new -newkey rsa:2048 -days 365 -nodes -sha256 -out your_key_name.csr -subj "/C=US/ST=California/L=/O=example.com/CN=server.example.com" -keyout your_private_key_name.pem

Replace country, state, org, common name (server name, in this case) as appropriate. digicert has a nice form to generate the subject of the certificate for you; it would be great if they used SHA-256 by default too, but oh well.

This certificate will expire in a year. I don't mind doing this once a year, and StartSSL will only sign a free certificate for one year.

The first thing you should do is set the private key (your_private_key_name.pem) to be owned by root and remove access by anyone except root.

Look at the resulting csr file. If it starts with -----BEGIN CERTIFICATE REQUEST-----, you're good. Copy the contents, skip the "form" step in StartSSL, paste the CSR, click a few more Next buttons, download your shiny new modern and signed certificate. Careful, it's still hot.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment