Tento tutoriál vás provede vaší úplně první konfigurací webu SSL s certifikací Let's Encrypt. Let's Encrypt je nová autorita SSL, která poskytuje bezplatné certifikáty SSL. Použijeme dva stávající návody („Jak nastavit středně kompatibilní web SSL s certifikátem Let's Encrypt“ a „Dokonalý server – Ubuntu 15.10 (Wily Werewolf) s Apache, PHP, MySQL, PureFTPD, BIND, Postfix, Dovecot a ISPConfig 3”).
Zde popsané nastavení je kompatibilní s jakýmkoli serverem Ubuntu LAMP, takže jej můžete použít také jako základní nastavení.
Tento tutoriál vám ukáže, jak nastavit Let's Encrypt na serverech bez ISPConfig 3, protože brzy bude přímá implementace služby Let's Encrypt v příštím vydání ISPConfig 3 (verze 3.1). Pokud tedy plánujete používat ISPConfig, počkejte na vydání 3.1 a také na nový tutoriál.
Vytvoření webu
Prvním krokem je vytvoření konfigurace a adresáře webu a povolení SSL (Apache mod_ssl). Je jen na vás, zda použijete výchozí konfiguraci pro jeden web na serveru nebo plánujete používat více hostitelů vhost k hostování více než jedné domény. Pro spolehlivější a škálovatelnější použití vytvořím konfiguraci vhost pro svou „lab“ doménu isp1.cloudapp.net z Azure.
Všechny vhosty jsou na Ubuntu a Debianu standardně uloženy v adresáři /etc/apache2/sites-available. Spusťte následující příkaz a načtěte seznam existujících konfiguračních souborů vhost.
ls -l /etc/apache2/sites-available/
Můj výstup vypadá takto:
[email protected]:/home/falco# ls -l /etc/apache2/sites-available/
-rw-r--r-- 1 root root 1332 May 20 2015 000-default.conf
-rw-r--r-- 1 root root 6437 May 20 2015 default-ssl.conf
Nyní můžeme pro klonování použít "výchozí" konfigurační soubor a upravit jej nebo můžeme použít vlastní konfiguraci. Dávám přednost používání vlastní konfigurace, jak to dělám po mnoho let, takže vytvořte nového vhost vytvořením souboru:
vi /etc/apache2/sites-available/isp1.cloudapp.net.conf
Do tohoto souboru vložte následující obsah:
<VirtualHost *:80>
ServerName isp1.cloudapp.net
ServerAlias www.isp1.cloudapp.net
DocumentRoot /home/web/isp1.cloudapp.net/public_html
ErrorLog /home/web/isp1.cloudapp.net/log/habdak.eu_error_log
CustomLog /home/web/isp1.cloudapp.net/log/habdak.eu_access_log combinedScriptAlias /cgi-bin/ /home/web/isp1.cloudapp.net/cgi-bin/
DirectoryIndex index.html index.htm index.php index.php4 index.php5
<Directory /home/web/isp1.cloudapp.net/public_html>
Options -Indexes +IncludesNOEXEC +SymLinksIfOwnerMatch +ExecCGI
allow from all
AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
Require all granted
AddType application/x-httpd-php .php
AddType application/json .json
</Directory>
<Directory /home/web/isp1.cloudapp.net/cgi-bin>
allow from all
AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
Require all granted
</Directory>
RemoveHandler .php
RemoveHandler .php5
php_admin_value engine Off
IPCCommTimeout 301
FcgidMaxRequestLen 1073741824
php_value memory_limit 128M
php_value suhosin.session.encrypt Off
</VirtualHost>
<VirtualHost *:443>
ServerName isp1.cloudapp.net
ServerAlias www.isp1.cloudapp.net
DocumentRoot /home/web/isp1.cloudapp.net/public_html
ErrorLog /home/web/isp1.cloudapp.net/log/habdak.eu_error_log
CustomLog /home/web/isp1.cloudapp.net/log/habdak.eu_access_log combined
ScriptAlias /cgi-bin/ /home/web/isp1.cloudapp.net/cgi-bin/
DirectoryIndex index.html index.htm index.php index.php4 index.php5
<Directory /home/web/isp1.cloudapp.net/public_html >
Options -Indexes +IncludesNOEXEC +SymLinksIfOwnerMatch +ExecCGI
allow from all
AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
Require all granted
AddType application/x-httpd-php .php
AddType application/json .json
</Directory>
<Directory /home/web/isp1.cloudapp.net/cgi-bin >
allow from all
AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
Require all granted
</Directory>
RemoveHandler .php
RemoveHandler .php5
php_admin_value engine Off
IPCCommTimeout 301
FcgidMaxRequestLen 1073741824
php_value memory_limit 128M
php_value suhosin.session.encrypt Off
SSLEngine on
SSLCertificateFile /home/web/isp1.cloudapp.net /ssl.cert
SSLCertificateKeyFile /home/web/isp1.cloudapp.net /ssl.key
SSLCACertificateFile /home/web/isp1.cloudapp.net /ssl.ca
SSLCipherSuite 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:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-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:!KRB5-DES-CBC3-SHA
SSLProtocol All -SSLv2 -SSLv3
SSLCompression off
SSLHonorCipherOrder On
</VirtualHost>
Nahraďte název domény svou doménou, kdekoli se vyskytuje, a uložte soubor. Chcete-li aktivovat konfiguraci, spusťte:
a2ensite isp1.cloudapp.net.conf
Nyní znovu vytvořte složky pro web:
mkdir /home/web
mkdir /home/web/isp1.cloudapp.net
mkdir /home/web/isp1.cloudapp.net/public_html
mkdir /home/web/isp1.cloudapp.net/cgi-bin
mkdir /home/web/isp1.cloudapp.net/logs
Chcete-li použít novou konfiguraci, restartujte apache:
sudo service apache2 restart
Nyní musíme vygenerovat soubory certifikátu.
Nainstalujte si Let's Encrypt a vygenerujte svůj první certifikát SSL
Dávám přednost použití přihlášení root pro administraci místo spouštění sudo před každým příkazem, takže su uživateli root:
sudo su
Přejděte do kořenového domovského adresáře:
cd ~root
Nainstalujte git pro načtení souborů úložiště git Let's Encrypt:
apt-get install git
Nyní naklonujte úložiště git Let's Encrypt:
git clone https://github.com/letsencrypt/letsencrypt.git letsencrypt
Přejděte do své nové složky letsencrypt:
cd letsencrypt
A vyžádejte si certifikát SSL:
./letsencrypt-auto certonly --webroot -w /home/web/isp1.cloudapp.net/public_html -d isp1.cloudapp.net
Pokud požadujete certifikát pro hlavní doménu (doména 1 úrovně aka cloudapp.net), použijte parametr -d dvakrát. S předponou www a bez ní, jako je tato:
./letsencrypt-auto certonly --webroot -w /home/web/cloudapp.net/public_html -d cloudapp.net -d www.cloudapp.net
Pokud tak neučiníte, certifikát nebude platný pro návštěvníky otevírající váš web s předponou www.
K jednomu certifikátu můžete přidat i další subdomény. Pokud se například vaše subdoména admin.cloudapp.net shoduje se stejným webem (stejnou složkou na serveru), měli byste ji přidat také k tomuto certifikátu. S let's encrypt bohužel nemůžete použít zástupnou kartu jako (*.cloudapp.net).
Let's Encrypt automaticky aktualizuje všechny závislosti a provede vás jeho nastavením. Vše, co musíte udělat, je počkat na okno s výzvou k zadání vaší e-mailové adresy. Tato adresa se používá pouze pro obnovu ztracených dat.
Vaše nové klíče jsou nyní standardně uloženy v /etc/letsencrypt/. Propojíme je s adresářem našich webových stránek, abychom klíče mohli spravovat později.
ln -s /etc/letsencrypt/archive/isp1.cloudapp.net/cert1.pem /home/web/isp1.cloudapp.net/ssl.cert
ln -s /etc/letsencrypt/archive/isp1.cloudapp.net/chain1.pem /home/web/isp1.cloudapp.net/ssl.ca
ln -s /etc/letsencrypt/archive/isp1.cloudapp.net/privkey1.pem /home/web/isp1.cloudapp.net/ssl.key
Nyní byste měli mít přístup k vašemu webu pomocí SSL. Let's Encrypt vás bude automaticky včas informovat o vypršení platnosti certifikátů zasláním e-mailu na adresu, kterou jste uvedli při instalaci Let's Encrypt.