Research SSL certificates and authorities. Time required: an hour or two
Purchase SSL certificate (DigiCert SSL Plus). Time required: a minute or two
Generate command-line for CSR creation using OpenSSL CSR Wizard. Paste result into server's terminal, creating tinyapps_org.key and tinyapps_org.csr in /etc/ssl/. Paste tinyapps_org.csr into form in my DigiCert control panel. Time required: a few minutes
Validate organization info with DigiCert. (They asked via email for a photo ID via email or fax; I later found out from phone support that they have a secure web form for submissions. I also later discovered that the cert was issued in my name instead of the corporation's; they verified the corp online with the DCCA and reissued the certificate.) Time required: 30 minutes from time of sending ID (plus another 30 minutes or so to receive the corrected certificate)
Receive tinyapps_org.pem file from DigiCert and copy to /etc/ssl/. Time required: 'twas but the work of a moment
Update iptables to allow incoming traffic on port 443 by adding -A INPUT -i eth0 -p tcp -m tcp --dport 443 -j ACCEPT
to /etc/iptables.up.rules and reload iptables: iptables-restore < /etc/iptables.up.rules
Time required: a few minutes to dig through my notes and Google
Update OpenSSL (Time required: Longer than it should have; with these direction, should only take a few minutes):
#wget https://www.openssl.org/source/openssl-1.0.1j.tar.gz | tar xvf && cd openssl-1.0.1j && ./config && make && make install
The old version had not been replaced: #which openssl /usr/bin/openssl #openssl version OpenSSL 0.9.8g 19 Oct 2007
Archive the old version and symlink the new one: #mv /usr/bin/openssl /path/to/ancients/openssl_old #ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl #openssl version OpenSSL 1.0.1j 15 Oct 2014
Update nginx (Time required: Way longer than it should have; with these direction, should only take a few minutes):
#wget http://nginx.org/download/nginx-1.6.2.tar.gz | tar xvf nginx-1.6.2.tar.gz && cd nginx-1.6.2
Checked configure arguments from previous install (nginx -V)
Ran ./configure with previous arguments, adding: --with-openssl=/temp/openssl-1.0.1j \
--with-http_ssl_module \
--with-http_secure_link_module \
--with-http_spdy_module
(I had to explicitly point nginx to the OpenSSL source folder in order to get SSL working)
#make
Backup the current working nginx binary: #cp /usr/sbin/nginx /path/to/ancients/nginx_old
#/etc/init.d/nginx stop
#make install
#/etc/init.d/nginx start
Configure and test nginx (Time required: Way, way longer than it should have; with this example, it should be much faster):
Nginx resolver vulnerabilities allow cache poisoning attack - "Never configure nginx with the resolver directive pointing to a resolver on the Internet like Google Public DNS, OpenDNS, or your ISP’s resolver. Many nginx users make this exact mistake. Even pointing to a resolver on your internal local network may be a bad idea. Running a resolver on localhost is the only safe option."