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 [2015/09/01 16:24] – [Ověření příslušnosti dvojice private a public key k sobě] moora | 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 | ||
| - | </ | ||
| - | |||
| - | ==== Doporučené nastavení mod_ssl ==== | ||
| - | |||
| - | Upravte nebo přidejte tyto volby v konfiguračním souboru __/ | ||
| - | < | ||
| - | SSLCipherSuite HIGH: | ||
| - | SSLHonorCipherOrder on | ||
| - | SSLProtocol -All +TLSv1 +TLSv1.1 +TLSv1.2 | ||
| - | </ | ||
| - | |||
| - | ==== 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=/ | ||
| - | TLS_PROTOCOL=" | ||
| - | TLS_CIPHER_LIST=" | ||
| - | </ | ||
| - | |||
| - | ===== 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 | ||
| - | smtpd_tls_mandatory_exclude_ciphers = aNULL, MD5 | ||
| - | smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3 | ||
| - | smtp_tls_mandatory_exclude_ciphers = aNULL, MD5 | ||
| - | smtp_tls_mandatory_protocols = !SSLv2, !SSLv3 | ||
| - | lmtp_tls_mandatory_exclude_ciphers = aNULL, MD5 | ||
| - | lmtp_tls_mandatory_protocols = !SSLv2, !SSLv3 | ||
| - | </ | ||
| - | |||
| - | ===== Dovecot ===== | ||
| - | |||
| - | <code file> | ||
| - | ssl_cert_file = / | ||
| - | ssl_key_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. | ||
| - | |||
| - | |||
| - | ===== Ověření příslušnosti dvojice private a public key k sobě ===== | ||
| - | |||
| - | openssl rsa -noout -modulus -in test.key | ||
| - | |||
| - | openssl x509 -noout -modulus -in test.crt | openssl md5 | ||
| - | |||
| - | |||
| - | ===== 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) | ||
| - | |||
| - | **Diagnostika** | ||
| - | |||
| - | Otestovat je možno aktuální verzí [[man> | ||
| - | |||
| - | < | ||
| - | nmap -sV --script=ssl-heartbleed < | ||
| - | </ | ||
| - | |||
| - | Podrobnosti o celé problematice je možné najít zde - [[http:// | ||
| - | |||
| - | Další zajímavé informace: | ||
| - | * [[http:// | ||
| - | * [[http:// | ||
| - | * [[http:// | ||
| - | |||
| - | |||
| - | ==== Odkazy ==== | ||
| - | |||
| - | * [[https:// | ||
| - | |||
| - | |||
| - | |||
navody/hosting/ssl.1441117447.txt.gz · Poslední úprava: 2015/09/01 16:24 autor: moora
