Raspberry Pi jako webserver - HTTPS a Let's Encrypt

Jak na Raspberry Pi zprovoznit HTTPS a jak nainstalovat a použít certifikát vygenerovaný Let's Encrypt?

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.

Obrázky se nestihly načíst.
Prosím opakujte akci zachvilku.

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.

Obrázky se nestihly načíst.
Prosím opakujte akci zachvilku.

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

Raspberry Pi, Webserver, Lets Encrypt, HTTPS

- (12. 4. 2019)

Jsem programátor, horolezec a tak trochu FlexiBee fanatik :-).
Na CharlieBlogu sepisuji své nápady a poznatky už od roku 2006.

Powered by CharlieBlog Engine v2.1