Nejprve musíme povolit mod ssl.
sudo a2enmod ssl
Dalším krokem je vytvoření symlinku na do adresáře /etc/apache2/sites-enabled. Tento symlink musí ukazovat na soubor /etc/apache2/sites-available/default-ssl.conf
sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/000-default-ssl.conf
Do souboru /etc/apache2/sites-available/default-ssl.conf pak doplníme cesty k certifikátům.
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
Pokud máme všechno připravené je potřeba restartovat apache server.
sudo apachectl restart
Self - Signed certifikát
Pro HTTPS je ale nutný certikát. Nejjednoduší možností je tzv.
self-signed certifikát, neboli certifikát podepsaný sám sebou.
K jeho vygenerování je potřeba mít nainstalovaný OpenSSL.
Vygenerování certifikátu se provádí příkazem
sudo openssl req -x509 -nodes -days 1095 -newkey rsa:2048 -out /etc/apache2/ssl/server.crt -keyout /etc/apache2/ssl/server.key
OpenSSL vygeneruje oba soubory server.crt a server.key, které jsme dříve zapisovali do souboru default-ssl.conf.
Pozor ale na to, že self-signed certifikáty již moderní prohlížeče nepovažují za bezpečné a proto je nutné přidávat bezpečnostní výjimky.
Let's Encrypt
Řešením problému se self-signed certifikátem je použití certifikační autority Let's Encrypt. Tato autorita umožňuje zdarma vygenerovat certifikát pro HTTPS a zjednodušuje jeho nasazení. Cerifikáty jsou platné jen 3 měsíce, ale je možné je jednoduše obnovovat.
K získání a nasazení certifikátu slouží program certbot.
Stažení a příprava pragramu certbot se provádí příkazy
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
Po úspěšném stažení programu je možné ho spustit příkazem
./certbot-auto
Po spuštění, si certbot donačte všechny potřebné závislosti a spustí generování certifikátu.
Vzhledem k tomu, že máme již nainstalovaný apache server je nejlepší možností použít příkaz
./certbot-auto --apache
Tento příkaz provede vygenerování certifikátu a jeho automatické nasazení do apache serveru. Není tedy potom nutné již v konfiguraci apache nic měnit. Jen opět restartovat apache.
sudo apachectl restart
Výhodou využití Let's Encrypt je, že ze Vás vyřeší i vypnutí již nebezpečných protokolů SSL v2 a SSL v3 a další bezpečnostní nastavení.
Návod s dalšími podrobnostmi naleznete na stránce Certbota v oddíle debain other.
Kvalitu HTTPS je možné otestovat na stránkách SSL Labs.
např. SSL Labs test root.cz
Obnovení certifikátu Let's Encrypt
Jednou za 3 měsíce dorazí e-mail s upozorněním na to, že je potřeba obnovit certifikát (prodloužit platnost). Obnovu provedeme spuštěním příkazů:
sudo ./certbot-auto renew --dry-run
sudo ./certbot-auto renew
První příkaz vyzkouší obnovení "na nečisto". Během tohoto pokusu se mi zatím pokaždé zaktualizoval program certbot 🙂, a jednou ze dvou pokusů aktualizace spadla. Takže se dry-run vyplatí.
Druhý příkaz již provede reálné obnovení certifikátu.
Po úspěšné obnově můžeme opět otestovat kvalitu HTTPS.
Aktualizace 11. 4. 2019 - Nefunkční certbot-auto
Při pokusu o obnovu certifikátu přestal fungovat certbot-auto.
THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE. If you have updated the package versions, please update the hashes. Otherwise, examine the package contents carefully; someone may have tampered with them.
pycparser==2.19 from https://www.piwheels.org/simple/pycparser/pycparser-2.19-py2.py3-none-any.whl#sha256=344870c533812cb119c5475b5aed033ec546118711338ff9b2b78e67098d64e7 (from -r /tmp/tmp.T7h8YKzqsl/letsencrypt-auto-requirements.txt (line 105)):
Expected sha256 a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3
Got 344870c533812cb119c5475b5aed033ec546118711338ff9b2b78e67098d64e7
=====================================================
Certbot has problem setting up the virtual environment.
We were not be able to guess the right solution from your pip output.
Consult https://certbot.eff.org/docs/install.html#problems-with-python-virtual-environment for possible solutions.
You may also find some support resources at https://certbot.eff.org/support/ .
Řešení jsem nalezl na fóru let's encrypt.
sudo apt-get update
sudo apt-get install certbot
sudo apt-get install python-certbot-apache
sudo certbot renew
Dokumentace k certbotu pro debian stretch: https://certbot.eff.org/lets-encrypt/debianstretch-other