Přehled
Let’s encrypt je certifikační autorita, která poskytuje jednoduchý způsob, jak zdarma získat certifikát SSL/TLS pro váš web, a tím umožnit šifrované https na webových serverech. Let’s Encrypt zjednodušuje pořízení a instalaci SSL certifikátu pomocí softwaru s názvem CertBot. Tento softwarový klient slouží plně automatizovanému procesu pro webové servery Apache. Bezplatné SSL certifikáty od Let’s Encrypt však lze ručně nainstalovat na jakýkoli webový server s několika interními úpravami.
V tomto tutoriálu si ukážeme postup použití certbot-auto
Zašifrujte klienta, abyste získali bezplatný certifikát SSL a použili jej s Nginx na Ubuntu 14.04. Tento tutoriál vám také vysvětlí, jak automaticky obnovit váš certifikát SSL. Pokud používáte jiný webový server, jednoduše postupujte podle dokumentace k vašemu webovému serveru a zjistěte, jak používat certifikát s vaším nastavením.
Předpoklad
- Uživatel bez oprávnění root s právy Sudo
- Musíte vlastnit nebo mít administrativní kontrolu nad doménou, pro kterou chcete získat certifikát SSL.
- Záznam A vytvořený na panelu DNS, který odkazuje vaši doménu na veřejnou IP adresu vašeho serveru. Je to vyžadováno kvůli tomu, jak Let’s Encrypt ověřuje, že vlastníte doménu, pro kterou vydává certifikát. Například pokud chcete získat certifikát pro
example.com
, tato doména se musí přenést na váš server, aby proces ověření fungoval. Naše nastavení bude používatexample.com
awww.example.com
jako názvy domén, takže jsou vyžadovány oba záznamy DNS
Krok 1 — Instalace klienta Let's Encrypt
Zpočátku si musíte na svůj server stáhnout softwarového klienta CertBot. CertBot si můžete stáhnout z oficiálních stránek EFF.
Stáhněte si software CertBot do adresáře /usr/local/sbin directory on your server:
cd /usr/local/sbin sudo wget https://dl.eff.org/certbot-auto
$ cd /usr/local/sbin sudo wget https://dl.eff.org/certbot-auto [sudo] password for example: --2016-11-28 13:26:28-- https://dl.eff.org/certbot-auto Resolving dl.eff.org... 173.239.79.196 Connecting to dl.eff.org|173.239.79.196|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 44442 (43K) [text/plain] Saving to: `certbot-auto' 100%[======================================>] 44,442 154K/s in 0.3s 2016-11-28 13:26:30 (154 KB/s) - `certbot-auto' saved [44442/44442]
Cert-Bot je nyní stažen do /usr/local/sbin na vašem serveru. Nyní udělejte soubor spustitelným zadáním následujícího příkazu:
sudo chmod a+x /usr/local/sbin/certbot-auto
Software Cerbot-auto je nyní připraven k instalaci.
Krok 2 – Získejte certifikát
Existuje několik způsobů, jak získat certifikát SSL od Let’s Encrypt prostřednictvím různých pluginů. Chcete-li získat certifikát SSL, musíte získat ověřovací plugin. Ujistěte se, že tyto pluginy získají pouze certifikát a certifikát musíte nainstalovat ručně.
V tomto tutoriálu použijeme plugin s názvem Webroot pro ověření.
Plugin Webroot
Plugin Webroot vygeneruje exkluzivní soubor v adresáři / .well-known v kořenovém adresáři dokumentů, ke kterému lze přistupovat pomocí Let's Encrypt přes váš webový server, čímž se dokončí ověření vaši pravomoc nad doménou. Možná budete muset nakonfigurovat oprávnění pro soubor v / .well-known.
Pokud jste Ngnix ještě nenainstalovali, nainstalujte jej pomocí níže uvedených příkazů:
sudo yum update sudo yum install ngnix
Aby byl soubor přístupný pro certbot-auto, proveďte požadované změny v konfiguračním souboru Nginx. Konfigurační soubor ngnix je standardně umístěn v adresáři /etc/nginx/sites-available/default. Upravme konfigurační soubor:
sudo vim /etc/nginx/sites-available/default
Přidejte do souboru následující blok umístění:
Přidat k serveru SSL blockserver {
. . .
location ~ /.well-known {
allow all;
}
. . .
}
Budete také chtít vyhledat kořenový adresář vašeho dokumentu vyhledáním root
direktiva, protože cesta je vyžadována pro použití pluginu Webroot. Pokud používáte výchozí konfigurační soubor, kořenový adresář bude /usr/share/nginx/html
.
Uložte soubor stisknutím klávesy Esc a následně :wq! a stiskněte klávesu enter.
Můžete zkontrolovat, zda konfigurační soubor neobsahuje syntaktické chyby:
sudo nginx -t
Pokud zjistíte, že konfigurační soubor neobsahuje chyby syntaxe, restartujte službu ngnix
sudo service nginx restart
Nyní můžeme k ověření použít plugin webroot, protože známe přesné umístění cesty webroot. Pro vyžádání certifikátu SSL pomocí pluginu webroot použijte následující příkaz:
certbot-auto certonly -a webroot --webroot-path=/usr/share/nginx/html -d example.com -d www.example.com
Názvy domén musí být specifikovány pomocí -d volba. Pokud chcete, aby jeden certifikát fungoval s více názvy domén (např. example.com a www.example.com ), nezapomeňte zahrnout všechny, počínaje doménou nejvyšší úrovně (např. example.com ).
Poznámka: certbot-auto
software vyžaduje práva superuživatele, takže pokud jste nepoužili sudo
, budete požádáni o zadání hesla nedávno.
Když certbot-auto inicializuje, budete vyzváni k zadání některých informací. Přesné výzvy se mohou lišit v závislosti na tom, zda jste použili certbot-auto klient dříve. Zadejte potřebné informace a na konci vyberte Souhlasím.
Výstup:IMPORTANT NOTES:
- If you lose your account credentials, you can recover through
e-mails sent to [email protected]
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/example.com/fullchain.pem. Your
cert will expire on 2016-03-15. To obtain a new version of the
certificate in the future, simply run Let's Encrypt again.
- Your account credentials have been saved in your Let's Encrypt
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Let's
Encrypt so making regular backups of this folder is ideal.
- If like Let's Encrypt, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Poznamenejte si cestu a datum vypršení platnosti z výstupu.
Poznámka k firewallu: Pokud se zobrazí chyba jako Failed to connect to host for DVSNI challenge
, může být nutné nakonfigurovat bránu firewall vašeho serveru tak, aby umožňovala provoz TCP na portu 80
a 443
.
Poznámka: Pokud vaše doména směruje přes službu DNS, jako je CloudFlare, budete ji muset dočasně deaktivovat, dokud certifikát nezískáte.
Soubory certifikátů
Po získání certifikátu budete mít následující soubory v kódování PEM:
- cert.pem: certifikát vaší domény
- chain.pem: Certifikát řetězce Let’s Encrypt
- fullchain.pem:cert.pem a chain.pem kombinované
- privkey.pem: Soukromý klíč vašeho certifikátu
Můžete zkontrolovat, zda soubory existují spuštěním tohoto příkazu (nahrazením názvu vaší domény):
sudo ls -l /etc/letsencrypt/live/your_domain_name
Výstupem by měly být čtyři výše uvedené soubory certifikátů. Během okamžiku nakonfigurujete svůj webový server tak, aby používal fullchain.pem jako soubor certifikátu a privkey.pem jako soubor klíče certifikátu.
Vygenerovat silnou skupinu Diffie-Hellman
Pro další zvýšení zabezpečení vygenerujte silnou skupinu Diffie-Hellman pomocí příkazu:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Cesta skupiny DH by byla /etc/ssl/certs/dhparam.pem 2048
Krok 3 — Konfigurace TLS/SSL na webovém serveru (Nginx)
Nyní musíte nakonfigurovat webový server Nginx, abyste jej mohli používat. Upravte konfiguraci Nginx, která obsahuje váš blok serveru:
sudo nano /etc/nginx/sites-available/default
Najděte server
blok. Přidejte komentář nebo smazat řádky, které konfigurují tento blok serveru tak, aby naslouchal na portu 80. Ve výchozí konfiguraci by měly být tyto dva řádky odstraněny:
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
Nakonfigurujeme tento blok serveru tak, aby naslouchal na portu 443 s povoleným SSL. Na vašem server {
bloku, přidejte následující řádky, ale nahraďte všechny instance example.com
s vlastní doménou:
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
To vašemu serveru umožní používat SSL a říká mu, aby použil certifikát Let's Encrypt SSL, který jsme získali dříve.
Chcete-li povolit pouze nejbezpečnější protokoly a šifry SSL a používat silnou skupinu Diffie-Hellman, kterou jsme vygenerovali, přidejte do stejného bloku serveru následující řádky:
Přidání konfigurace Nginx — 2 ze 3 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;
A konečně, mimo původní blok serveru (který naslouchá na HTTPS, port 443), přidejte tento blok serveru pro přesměrování HTTP (port 80) na HTTPS.
Přidání konfigurace Nginx — 3 ze 3server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
Uložit a ukončit.
Otestujte konfigurační soubor na chyby syntaxe zadáním:
sudo nginx -t
Jakmile ověříte, že neexistují žádné syntaktické chyby, uveďte změny v platnost restartováním Nginx:
sudo service nginx restart
Certifikát Let’s Encrypt TLS/SSL je nyní zaveden. V tomto okamžiku byste měli otestovat, že certifikát TLS/SSL funguje, návštěvou vaší domény přes HTTPS ve webovém prohlížeči.
Můžete použít zprávu Qualys SSL Labs Report, abyste viděli, jak skóre konfigurace vašeho serveru:
Ve webovém prohlížeči:https://www.ssllabs.com/ssltest/analyze.html?d=example.com
Toto nastavení SSL by mělo hlásit A+ hodnocení.
Krok 4 — Nastavení automatického obnovení
Certifikáty Let’s Encrypt jsou platné 90 dní, ale doporučujeme je každých 60 dní obnovovat, aby se vyloučila chyba. V době psaní tohoto článku není automatická obnova stále dostupná jako funkce samotného klienta, ale certifikáty můžete obnovit ručně spuštěním certbot-auto
klient s renew
možnost.
Chcete-li spustit proces obnovení pro všechny nainstalované domény, spusťte tento příkaz:
certbot-auto renew
Vzhledem k tomu, že jsme certifikát nainstalovali nedávno, příkaz pouze zkontroluje datum vypršení platnosti a vytiskne zprávu s informací, že certifikát ještě není kvůli obnově. Výstup by měl vypadat takto:
Výstup:Checking for new version...
Requesting root privileges to run letsencrypt...
/home/sammy/.local/share/letsencrypt/bin/letsencrypt renew
Processing /etc/letsencrypt/renewal/example.com.conf
The following certs are not due for renewal yet:
/etc/letsencrypt/live/example.com/fullchain.pem (skipped)
No renewals were attempted.
Všimněte si, že pokud jste vytvořili spojený certifikát s více doménami, ve výstupu se zobrazí pouze název základní domény, ale obnovení by mělo být platné pro všechny domény zahrnuté v tomto certifikátu .
Praktický způsob, jak zajistit, že vaše certifikáty nebudou zastaralé, je vytvořit úlohu cron, která bude za vás pravidelně provádět příkaz k automatické obnově. Vzhledem k tomu, že obnovení nejprve zkontroluje datum vypršení platnosti a provede obnovení pouze v případě, že do vypršení platnosti certifikátu zbývá méně než 30 dní, je bezpečné vytvořit úlohu cron, která se spouští například každý týden nebo dokonce každý den.
Pojďme upravit crontab a vytvořit novou úlohu, která bude každý týden spouštět příkaz k obnovení. Chcete-li upravit crontab pro uživatele root, spusťte:
sudo crontab -e
Přidejte následující řádky:
crontab entry30 2 * * 1 /usr/local/sbin/certbot-auto renew >> /var/log/le-renew.log
35 2 * * 1 /etc/init.d/nginx reload
Uložte a ukončete. Tím se vytvoří nová úloha cron, která provede certbot-auto renew
příkaz každé pondělí ve 2:30 a znovu načtěte Nginx ve 2:35 (takže bude použit obnovený certifikát). Výstup vytvořený příkazem bude přesměrován do souboru protokolu umístěného na adrese /var/log/le-renewal.log
.