
Let’s Encrypt před pár dny vstoupil do veřejné beta verze a napadlo mě, se pokusit sepsat jakýsi postup pro ostatní nadšence, kteří si tento ssl certifikát chtějí také vyzkoušet.
To řečeno, spoléhám na to, že kdo čte dále má zkušenosti s nastavováním apache serveru!
Co je vůbec “Let’s Encrypt”?
Dle jejich stránek :
Let’s Encrypt je automatizovaná certifikační autorita (CA), která je zdarma a snaží se být ve prospěch veřejnosti (huh)?
Tuto službu poskytuje Internet Security Research Group (ISRG) a projekt podporují společnosti jako je EFF, CISCO, Facebook, Mozilla, …
Využití tohoto certifikátu zdarma vypadá v praxi tak, že si přes git stáhnete jejich klienta “letsencrypt”.
To má ale jeden háček a to ten, že musíte použít jejich program, abyste mohli dostat certifikát.
To není přece nic špatného, ale defaultní instrukce spoléhají na to, že program poběží na serveru pod rootem, aby mohl editovat apace/nginx konfigurační soubory.
Nesnažím se být teď přehnaně paranoidní, nedej bože tu tvrdit něco o NSA, ale jen z bezpečnostního hlediska nechci, aby takový program měl možnost editovat moje nastavení serveru a mohl přistupovat k mým privátním klíčům.
Samozřejmě si moc vážím práce vývojářů za tímto projektem a není to nic proti nim.
Dejte mi jen prosím ssl klíč zadarmo, víc nechci.
Požadavky
- openssl
- python (volitelné)
- znalost apache
Ještě než začneme
Otevřete si — https://gethttpsforfree.com/
Tato stránka generuje jednotlivé příkazy, které pak pustíte v terminálu. Tyto příkazy vydají žádost přes Let’s Encrypt ACME API k vygenerování vašeho certifikátu.
Pokud vám jde o bezpečnost, tak celá celá stránka je statická a funguje pouze přes ajax request k připojení Let’s Encrypt API. Nezaznamenává žádnou aktivitu.
To znamená, že si můžete stránku klidně lokálně uložit přes “Save Page As…” ve vašem prohlížeči.
Kdyby jste měli i přes to pochybnosti, tak si můžete projít zdrojové kódy — https://github.com/diafygi/gethttpsforfree
Začínáme
Prvně si potřebujete vygenerovat uživatelské klíče, která pak poskytnete
Let’s Encrypt.
Klíč, ten veřejný, používáte k bezpečnému obnovování/rušení certifikátu, či jiném problému.
Privátní klíč držte v tajnosti a NIKDY nikomu nedávejte!
Vygenerujeme klíče:
~# openssl genrsa 4096 > user.key
~# openssl rsa -in user.key -pubout > user.pub
První a druhý krok
PUBLIC klíč zkopírujete do prvního pole “Account Public Key”. Ještě před tím vyplňte email, který slouží pro případnou komunikaci v problému.
Validujte data.
Vygenerujeme doménový klíč a CSR (certificate signing request) klíč.
CSR klíč obsahuje informace o doméně a public klíč vašeho TLS privátního klíče.
Privátní klíč držte v tajnosti a NIKDY nikomu nedávejte!
Pokud už máte doménový klíč a CSR vygenerované z dřívějška, můžete tento krok přeskočit.
Nahraďte “example.com” doménou, pro kterou generujete klíč.
~# openssl genrsa 4096 > domain.key
~# openssl req -new -sha256 -key domain.key -subj "/CN=example.com" > domain.csr
Obsah domain.csr vložte do druhého pole a validujte.

Třetí krok
Spustíte příkazy a hodnoty, které se zobrazí vložíte do jednotlivých polí, poté validujte.
nezapomeňte změnit =./account.key na název vašeho user klíče

Čtvrtý krok
Nyní se ověří vlastnictví vaší domény. První část je stejná, jako v předchozím kroku. V druhé části si vyberte možnost, jak chcete ověřit vlastnictví se servery Let’s Encrypt.

Pro pohodlí volím python variantu.
Aby nevznikl konflikt na 80 portu, musím vypnout apache server během této operace.
~# sudo service apache2 stop // ubuntu
Copy & Paste python script a spustíme ho. Validujte a pokud vše funguje dostanete informaci, že je doména ověřena.
Znovu spusťte Apache
~# sudo service apache2 start // ubuntu
Pátý krok
Zkopírujte Signed Certificate -Váš podepsaný certifikát od Let’s Ecnrypt a uložte signed.crt ve svojí home directory -odtud na něj budeme posléze odkazovat v apache config.
Intermediate Certificate můžete jednoduše stáhnout :
~# wget https://letsencrypt.org/certs/lets-encrypt-x1-cross-signed.pem
Instalace certifikátů na Apache
Ověřte si, že máte všechny certifikáty, které potřebujeme ke konfiguraci Apache, ve své domovské directory
- domain.key
- signed.crt
- lets-encrypt-x1-cross-signed.pem
Nastavení Apache config
cd /etc/apache2/sites-available
Otevřete soubor
sudo nano 000-default.conf //zaměňte za váš název
A vložte následující:
<VirtualHost *:443>
ServerAdmin email@email.com
ServerName example.com
DocumentRoot /var/www/example.com/public_html
SSLEngine on
SSLCertificateFile /home/USER/signed.crt
SSLCertificateKeyFile /home/USER/domain.key
SSLCACertificateFile /home/USER/lets-encrypt-x1-cross-signed.pem
</VirtualHost>
Nezapomeňte změnit údaje
Pokud používáte Apache verzi 2.4.8 a níž, musíte přidat tento řádek:
SSLCertificateChainFile /home/USER/lets-encrypt-x1-cross-signed.pem
Nezapomeňte přesměrovat všechen traffic z HTTP na HTTPS a to tak, že přidáte toto do VirtualHost *:80
<VirtualHost *:80>
Redirect permanent / https://example.com
</VirtualHost>
Nyní stačí aktivovat SSL modul
sudo a2enmod ssl
a restartovat Apache
sudo service apache2 restart
Final
Hotovo, teď byste měli mít funkční HTTPS na své doméně, stejně jako já.
Vše si ověřte na https://www.ssllabs.com/ssltest
Za zvážení ještě stojí si nastavit DHE Parametr pro silnější 4096-bitový klíč.