navody:hosting:ssl
Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revizePředchozí verzeNásledující verze | Předchozí verze | ||
navody:hosting:ssl [2014/04/30 17:59] – gandalf | navody:hosting:ssl [Neznámé datum] (aktuální) – odstraněno - upraveno mimo DokuWiki (Neznámé datum) 127.0.0.1 | ||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
- | ====== SSL certifikáty ====== | ||
- | |||
- | Zde popisuji, jak získat, nainstalovat a používat služby, zabezpečené pomocí SSL - [[wp> | ||
- | |||
- | ===== Generování requestu ===== | ||
- | |||
- | Aby to celé mělo smysl, musím si svůj certifikát nechat podepsat nějakou důvěryhodnou certifikační autoritou, kterou znají prohlížeče a poštovní klienti. | ||
- | |||
- | V krajním případě můžeme použít také vlastní certifikační autoritu nebo si vygenerovat tzv. self-signed certifikát, | ||
- | |||
- | Pro získání podepsaného certifikátu je nejprve nutné vygenerovat tajný klíč. Tajný klíč se zpravidla umisťuje do adresáře **/ | ||
- | |||
- | <WRAP center round box 80%> | ||
- | |||
- | Vygenerované certifikáty je dobré ukládat podle jména domény, např. vasedomena-cz.key Přípona souboru je pak určena dle významu klíče | ||
- | |||
- | * key - tajný klíč (necháváme na serveru) | ||
- | * crt - veřejný klíč (dostaneme podepsaný od certifikační autority na základě žádosti) | ||
- | * csr - žádost o certifikát. Žádost si vygeneruje k již vygenerovánu tajnému klíči a vzniklý soubor odešleme certifikační autoritě | ||
- | * pem - tento soubor obsahuje zpravidla jak tajný klíč tak k němu odpovídající veřejný klíč včetně veřejných klíčů a root certifikátu | ||
- | </ | ||
- | |||
- | | ||
- | 1. V adresáři /// | ||
- | |||
- | <code bash> | ||
- | openssl genrsa -out nazevdomeny.key 2048 | ||
- | </ | ||
- | |||
- | 2. Nyní ke klíči připravíme žádost o certifikát | ||
- | |||
- | <code bash> | ||
- | openssl req -new -key nazevdomeny.key -out nazevdomeny.csr | ||
- | </ | ||
- | |||
- | 3. Soubor < | ||
- | |||
- | 4. Jakmile je proces u autority hotov, obdržíme podepsaný certifikát. Tento certifikát následně uložíme ve tvaru **nazevdomeny.crt** do adresáře /// | ||
- | |||
- | |||
- | <note tip>V našem případě využíváme certifikační autoritu [[http:// | ||
- | </ | ||
- | |||
- | |||
- | V našem případě tedy stáhneme do adresáře /// | ||
- | |||
- | |||
- | <code bash> | ||
- | cat / | ||
- | </ | ||
- | |||
- | |||
- | ===== Nastavení Apache ===== | ||
- | |||
- | Zpravidla se používá pro každou doménu, kterou chceme zabezpečit, | ||
- | |||
- | V Apachi je potřeba povolit mod_ssl | ||
- | |||
- | < | ||
- | a2enmod ssl | ||
- | </ | ||
- | |||
- | ==== Konfigurace virtual hostu ==== | ||
- | |||
- | Příklad konfigurace Apache virtualhostu. Věnujte pozornost nastavení zejména položek | ||
- | * VirtualHost - Uvadíme IP adresu, na které chceme SSL provozovat | ||
- | * ServerName a ServerAlias - Uvádíme doménu, na kterou je vystaven SSL certifikát. Pokud certifikát obsahuje alternativní jména, uvedeme je dále jako ServerAlias | ||
- | * SSLCertificateFile - podepsaný certifikát | ||
- | * SSLCertificateKeyFile - náš tajný klíč | ||
- | * SSLCertificateChainFile a SSLCACertificateFile - ChainFile a Root certifikát, | ||
- | |||
- | **/ | ||
- | <code file> | ||
- | Listen 443 | ||
- | NameVirtualHost 123.456.78.90: | ||
- | </ | ||
- | |||
- | **/ | ||
- | <code file> | ||
- | < | ||
- | ServerAdmin admin@vasedomena | ||
- | ServerName vasedomena | ||
- | | ||
- | DocumentRoot / | ||
- | < | ||
- | Options FollowSymLinks MultiViews | ||
- | AllowOverride None | ||
- | Order allow,deny | ||
- | allow from all | ||
- | </ | ||
- | |||
- | ErrorLog / | ||
- | LogLevel warn | ||
- | CustomLog / | ||
- | |||
- | # SSL Engine Switch: | ||
- | # | ||
- | SSLEngine on | ||
- | |||
- | # A self-signed (snakeoil) certificate can be created by installing | ||
- | # the ssl-cert package. See | ||
- | # / | ||
- | # If both key and certificate are stored in the same file, only the | ||
- | # | ||
- | SSLCertificateFile | ||
- | SSLCertificateKeyFile / | ||
- | |||
- | # | ||
- | # Point SSLCertificateChainFile at a file containing the | ||
- | # | ||
- | # | ||
- | # the referenced file can be the same as SSLCertificateFile | ||
- | # when the CA certificates are directly appended to the server | ||
- | # | ||
- | SSLCertificateChainFile / | ||
- | |||
- | # | ||
- | # Set the CA certificate verification path where to find CA | ||
- | # | ||
- | # huge file containing all of them (file must be PEM encoded) | ||
- | # Note: Inside SSLCACertificatePath you need hash symlinks | ||
- | # to point to the certificate files. Use the provided | ||
- | # | ||
- | SSLCACertificatePath / | ||
- | SSLCACertificateFile / | ||
- | |||
- | </ | ||
- | |||
- | <WRAP center round important 80%> | ||
- | Pokud neuvedete SSLCertificateChainFile a SSLCACertificateFile, | ||
- | </ | ||
- | |||
- | ==== Použítí SNI ==== | ||
- | |||
- | Pokud např. nemáme dostatek veřejných IP adres pro každou SSL doménu, můžeme využít SNI, tzn. certifikáty se budou brát podle jména domény a všechno poběží s jednou IP adresou. Nevýhoda tohoto řešení je, že starší prohlížeče nebo většina textových klientů bude mít potíže se zobrazením. Podrobnosti o SNI lze získat na [[wp> | ||
- | |||
- | V současné době umí SNI pouze tyto prohlížeče: | ||
- | |||
- | * Mozilla Firefox 2.0 nebo novější | ||
- | * Opera 8.0 nebo novější (musí být povolen protokol TLS) | ||
- | * Internet Explorer 7 (Vista, ne XP) nebo novější | ||
- | * Google Chrome | ||
- | * Safari 3.2.1 Mac OS X 10.5.6 | ||
- | |||
- | |||
- | Z hlediska SNI je nastavení virtualhostu uplně stejné, jako v předchozím případě, akorát se na jednu IP adresu na portu 443 binduje libovolný počet virtualů s ruzným ServerName a svojí definicí certifikátů. | ||
- | |||
- | <WRAP center round important 80%> | ||
- | POZOR: Pokud klient NEPODPORUJE SNI, pak mu Apache v uvedeném nastavení na portu 443 bude servírovat první virtualhost, | ||
- | </ | ||
- | |||
- | ===== Courier IMAP / POP ===== | ||
- | |||
- | Courier vyžaduje mít uložené všechny certifikáty spolu s klíčem v jednom souboru. Použijeme tedy náš vytvořený soubor **/ | ||
- | |||
- | V souboru **imapd-ssl** a **pop3d-ssl** najdete příslušnou volbu a upravíme jí takto: | ||
- | |||
- | <code file> | ||
- | TLS_CERTFILE=/ | ||
- | </ | ||
- | |||
- | ===== Postfix ===== | ||
- | |||
- | Postfix sice podporuje uložení certifikátu a klíče v odděleném souboru, ale je v tomto případě problém používat spolu s root certifikátem autority, takže potom poštovní klient při odesílání hlásí nedůvěryhodný certifikát. Doporučuji tedy použít opět náš společný soubor **/ | ||
- | |||
- | V konfiguraci postfixe je potřeba nastavit v souboru **main.cf** v sekci nastavení TLS parametru následující volby | ||
- | |||
- | <code file> | ||
- | smtpd_tls_cert_file = / | ||
- | smtpd_tls_key_file = $smtpd_tls_cert_file | ||
- | </ | ||
- | |||
- | ===== Lighttpd ===== | ||
- | |||
- | Editujeme soubor **/ | ||
- | |||
- | <code file> | ||
- | $SERVER[" | ||
- | ssl.engine | ||
- | ssl.pemfile = "/ | ||
- | </ | ||
- | |||
- | ===== Testování nainstalovaného certifikátu ===== | ||
- | |||
- | Nainstalovaný certifikát můžeme otestovat buď přímo v prohlížeči tj. https:// | ||
- | |||
- | Ostatní služby můžeme testovat pomocí příkazu openssl - [[man> | ||
- | |||
- | <code bash> | ||
- | openssl s_client -starttls smtp -crlf -connect vasedomena: | ||
- | </ | ||
- | |||
- | ===== Self-Signed certifikát ===== | ||
- | |||
- | Někdy nám stačí certifikát, | ||
- | Vygenerování takového certifikátu probíhá obdobně, jako v předchozím případě: | ||
- | |||
- | 1. V adresáři /// | ||
- | |||
- | <code bash> | ||
- | openssl genrsa -out nazevdomeny.key 2048 | ||
- | </ | ||
- | |||
- | 2. Nyní ke klíči připravíme žádost o certifikát | ||
- | |||
- | <code bash> | ||
- | openssl req -new -key nazevdomeny.key -out nazevdomeny.csr | ||
- | </ | ||
- | |||
- | 3. Následně vytvoříme certifikát, | ||
- | |||
- | <code bash> | ||
- | openssl x509 -req -days 365 -in nazevdomeny.csr -signkey nazevdomeny.key -out nazevdomeny.crt | ||
- | </ | ||
- | |||
- | |||
- | A máme hotovo. | ||
- | |||
- | |||
- | ===== Chyby v knihovně OpenSSL ===== | ||
- | |||
- | Začátkem dubna 2014 se objevila nepříjmená chyba v knihovně OpenSSL, která umožnuje ve verzi 1.0.1 útocníkům zjistit tajné klíče SSL certifikátů a následně dešifrovat hesla. | ||
- | |||
- | Chyba se týká verze OpenSSL 1.0.1 - 1.0.1f a je opravena až od verze 1.0.1g | ||
- | |||
- | * OpenSSL 1.0.1 through 1.0.1f (inclusive) are vulnerable | ||
- | * OpenSSL 1.0.1g is NOT vulnerable | ||
- | * OpenSSL 1.0.0 branch is NOT vulnerable | ||
- | * OpenSSL 0.9.8 branch is NOT vulnerable | ||
- | |||
- | {{ : | ||
- | |||
- | **Tyto verze OS jsou chybou dotčeni**: | ||
- | |||
- | * Debian Wheezy (stable), OpenSSL 1.0.1e-2+deb7u4 | ||
- | * Ubuntu 12.04.4 LTS, OpenSSL 1.0.1-4ubuntu5.11 | ||
- | * CentOS 6.5, OpenSSL 1.0.1e-15 (**opravuje balik 1.0.1e-16**) | ||
- | * Fedora 18, OpenSSL 1.0.1e-4 | ||
- | * OpenBSD 5.3 (OpenSSL 1.0.1c 10 May 2012) and 5.4 (OpenSSL 1.0.1c 10 May 2012) | ||
- | * FreeBSD 10.0 - OpenSSL 1.0.1e 11 Feb 2013 | ||
- | * NetBSD 5.0.2 (OpenSSL 1.0.1e) | ||
- | * OpenSUSE 12.2 (OpenSSL 1.0.1c) | ||
- | |||
- | **Je nutné o nejdříve provést aktualizaci uvedených systémů a po provedené aktualizaci je nutno provést regenerování všech SSL certifikátů na serveru a změne hesel v aplikacích, | ||
- | |||
- | Starsi verze OS jsou bezchybne: | ||
- | |||
- | * Debian Squeeze (oldstable), | ||
- | * SUSE Linux Enterprise Server | ||
- | * FreeBSD 8.4 - OpenSSL 0.9.8y 5 Feb 2013 | ||
- | * FreeBSD 9.2 - OpenSSL 0.9.8y 5 Feb 2013 | ||
- | * FreeBSD 10.0p1 - OpenSSL 1.0.1g (At 8 Apr 18:27:46 2014 UTC) | ||
- | * FreeBSD Ports - OpenSSL 1.0.1g (At 7 Apr 21:46:40 2014 UTC) | ||
- | |||
- | Podrobnosti o celé problematice je možné najít zde - [[http:// | ||
- | |||
- | Další zajímavé informace: | ||
- | * [[http:// | ||
- | * [[http:// | ||
- | * [[http:// | ||
- | |||
- | |||
- | |||
- | |||
- | |||