Provozují SPOJE.NET.
Nejlepší internet v Praze.
Provozují SPOJE.NET.
Nejlepší internet v Praze.
Toto je starší verze dokumentu!
Zde popisuji, jak získat, nainstalovat a používat služby, zabezpečené pomocí SSL - cs:SSL.
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, ale v takovém případě budou prohlížeče zobrazovat nejrůznější varování a nedůvěryhodném certifikátu a to nás bude dost zdržovat a obtěžovat, proto budu dále počítat pouze s podepsaným certifikátem důvěryhodnou autoritou.
Pro získání podepsaného certifikátu je nejprve nutné vygenerovat tajný klíč. Tajný klíč se zpravidla umisťuje do adresáře /etc/ssl/private. Doporučuji překontrolovat přístupová práva, k tajnému klíči by měl mít přístup pouze uživatel root a skupina sslcert
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
1. V adresáři /etc/ssl/private vygenerujeme tajný klíč
openssl genrsa -out nazevdomeny.key 2048
2. Nyní ke klíči připravíme žádost o certifikát
openssl req -new -key nazevdomeny.key -out nazevdomeny.csr
3. Soubor
nazevdomeny.csr
odešleme certifikační autoritě (dále probíhá podle podmínek příslušné autority)
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 /etc/ssl/certs. Ze stránek naší certifikační autority si dále musíme stáhnou ChainFile a root certifikát naší autority.
V našem případě využíváme certifikační autoritu StartSSL, ale postupy zde uvedené se dají aplikovat bez problému na ostatní autority.
V našem případě tedy stáhneme do adresáře /etc/ssl/certssoubory sub.class2.server.ca.pem a ca.pem. Následně vytvoříme společný soubor se všemi klíči (toto dělat nemusíte, pokud SSL certifikát použijete pouze v Apachi)
cat /etc/ssl/private/vasedomena.key /etc/ssl/certs/vasedomena.crt /etc/ssl/certs/sub.class2.server.ca.pem /etc/ssl/certs/ca.pem > /etc/ssl/private/vasedomena.pem
Zpravidla se používá pro každou doménu, kterou chceme zabezpečit, zvláštní IP adresa. Od verze Apache 2.2.12 a OpenSSL verze 0.9.8f je možné využívat jedinou IP adresu pro více domén s různými SSL certifikáty tzv. SNI (Server Name Indication - http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI)
V Apachi je potřeba povolit mod_ssl
a2enmod ssl
Příklad konfigurace Apache virtualhostu. Věnujte pozornost nastavení zejména položek
/etc/apache2/ports.conf
Listen 443 NameVirtualHost 123.456.78.90:443
/etc/apache2/sites-available/default-ssl
<VirtualHost 123.456.78.90:443> ServerAdmin admin@vasedomena ServerName vasedomena DocumentRoot /var/www/ssl <Directory /var/www/ssl> Options FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ErrorLog /var/log/apache2/ssl_error.log LogLevel warn CustomLog /var/log/apache2/ssl_access.log combined # SSL Engine Switch: # Enable/Disable SSL for this virtual host. SSLEngine on # A self-signed (snakeoil) certificate can be created by installing # the ssl-cert package. See # /usr/share/doc/apache2.2-common/README.Debian.gz for more info. # If both key and certificate are stored in the same file, only the # SSLCertificateFile directive is needed. SSLCertificateFile /etc/ssl/certs/vasedomena.crt SSLCertificateKeyFile /etc/ssl/private/vasedomena.key # Server Certificate Chain: # Point SSLCertificateChainFile at a file containing the # concatenation of PEM encoded CA certificates which form the # certificate chain for the server certificate. Alternatively # the referenced file can be the same as SSLCertificateFile # when the CA certificates are directly appended to the server # certificate for convinience. SSLCertificateChainFile /etc/ssl/certs/sub.class2.server.ca.pem # Certificate Authority (CA): # Set the CA certificate verification path where to find CA # certificates for client authentication or alternatively one # 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 # Makefile to update the hash symlinks after changes. SSLCACertificatePath /etc/ssl/certs/ SSLCACertificateFile /etc/ssl/certs/ca.pem
Pokud neuvedete SSLCertificateChainFile a SSLCACertificateFile, bude neustále prohlížeč hlásit potíže s certifikátem.
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 cs:SNI
V současné době umí SNI pouze tyto prohlížeče:
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ů.
POZOR: Pokud klient NEPODPORUJE SNI, pak mu Apache v uvedeném nastavení na portu 443 bude servírovat první virtualhost, který načte v konfiguraci, proto doporučuji dát jako první virtualhost nějakou základní webovkou, přístupnou pro všechny. Pokud máte každý virtualhost ve vlastním souboru, pak konfigurační soubor, který chcete servírovat klientům bez SNI, pojmenujte tak, aby byl v adresáři sites-enabled jako první v pořadí !