WWW server se SSL: Porovnání verzí

Z Milan Kerslager
Přejít na: navigace, hledání
m (Self-signed certifikáty: Certifikát podepsaný sám sebou)
m (Kontrola certifikátu a privátního klíče: fix)
 
(Nejsou zobrazeny 3 mezilehlé verze od stejného uživatele.)
Řádka 80: Řádka 80:
 
   openssl verify -CAfile /etc/pki/tls/certs/ca-bundle.pem /etc/pki/tls/certs/signed-certificate.crt
 
   openssl verify -CAfile /etc/pki/tls/certs/ca-bundle.pem /etc/pki/tls/certs/signed-certificate.crt
  
Kontrola správnosti a konzistence privátního klíče (též funkčnosti heslové fráze chránící klíč):
+
Kontrola konzistence privátního klíče (též případné funkčnosti heslové fráze chránící klíč):
  
 
  openssl rsa -check -noout -in /etc/pki/tls/private/localhost.key
 
  openssl rsa -check -noout -in /etc/pki/tls/private/localhost.key
 +
 +
Privátní a veřejný klíč k sobě patří, pokud mají stejný modulus (dlouhé hexadecimální číslo), který lze pro přehlednost zkrátit pomocí vypočtení otisku. Oba otisky musí být v níže uvedených příkazech stejné, aby spolu oba klíče mohly fungovat:
 +
 +
openssl rsa -noout -modulus -in /etc/pki/tls/private/localhost.key | sha256sum
 +
openssl x509 -noout -modulus -in /etc/pki/tls/certs/localhost.crt | sha256sum
  
 
Výpis otisku certifikátu, který bude zobrazen v prohlížeči:
 
Výpis otisku certifikátu, který bude zobrazen v prohlížeči:
Řádka 92: Řádka 97:
 
Odstranění heslové fráze z privátního klíče:
 
Odstranění heslové fráze z privátního klíče:
  
  openssl rsa -in private-with-passphrase.key -out private-without-pass.key
+
  openssl rsa -in private-with-passphrase.key -out private-without-passphrase.key
  
 
== Kontrola spojení ==
 
== Kontrola spojení ==
 
HTTP spojení lze otestovat pomocí nástroje <code>openssl</code>, který zajistí zakódování a dekódování provozu mezi klientem a serverem. V následujícím příkladu se připojujeme k lokálně spuštěnému webovému serveru na port HTTPS (443). Po navázání spojení je možné používat klasické HTTP příkazy, jako se to dělá při kontrole HTTP spojení nástrojem <code>telnet</code>.
 
HTTP spojení lze otestovat pomocí nástroje <code>openssl</code>, který zajistí zakódování a dekódování provozu mezi klientem a serverem. V následujícím příkladu se připojujeme k lokálně spuštěnému webovému serveru na port HTTPS (443). Po navázání spojení je možné používat klasické HTTP příkazy, jako se to dělá při kontrole HTTP spojení nástrojem <code>telnet</code>.
 +
 +
openssl s_client -connect 127.0.0.1:443
 +
 +
Pro starší verzi <code>openssl</code>:
  
 
  openssl s_client -ign_eof -crlf -connect 127.0.0.1:443
 
  openssl s_client -ign_eof -crlf -connect 127.0.0.1:443
 +
 +
=== Kontrola certifikátu ===
 +
Po navázání spojení (viz výše) uložte do souboru <code>cert.txt</code> certifikát (včetně značek -----BEGIN CERTIFICATE----- a -----END CERTIFICATE-----) a proveďte níže uvedený příkaz. Ve výpisu zkontrolujte, zda je certifikát vydán pro danou doménu, jeho platnost a další náležitosti.
 +
 +
openssl x509 -text -noout -in cert.txt
  
 
[[Kategorie:Síťové služby v Linuxu]]
 
[[Kategorie:Síťové služby v Linuxu]]

Aktuální verze z 1. 12. 2021, 12:59

Zabezpečený přenos mezi klientem (WWW prohlížeč) a WWW serverem Apache se zajišťuje pomocí mezivrstvy SSL. Šifrováním zajistíte, že komunikaci mezi klientem a serverem nelze jednoduše odposlechout. Protože však člověk svými smysly nemůže samotnou komunikaci ověřit a hlavně nelze zjistit, odkud doopravdy síťová komunikace pochází, je potřeba na začátku protistranu nějakým způsobem ověřit.

Ověřování totožnosti protistrany je nejjednodušší pomocí tzv. certifikátu, což je digitálně podepsaný veřejný klíč. Digitální podpis vytváří Certifikační autorita, která zakládá svoji důvěryhodnost na tom, že před vytvořením digitálního podpisu ověří totožnost majitele podepisovaného veřejného klíče a údaje o jeho totožnosti do výsledného certifikátu zahrne.

Při zabezpečeném připojení k serveru nejprve server nabídne svůj certifikát a je na uživateli, aby ověřil jeho důvěryhodnost. Uživatel například může:

  1. zatelefonovat majiteli a ověřit otisk (SHA256, SHA1 nebo MD5)
  2. spolehnout se na důvěryhodnost Certifikační autority, která je v něm podepsána

Instalace

Podporu zabezpečeného přenosu nainstalujete pomocí balíčku mod_ssl. Zajistěte, aby WWW server načetl znovu svoji konfiguraci (restart nebo reload). Poté je možné zabezpečené připojení k serveru používat (HTTPS).

yum install mod_ssl
service httpd restart

Self-signed certifikáty

Po instalaci balíčku mod_ssl jsou vygenerovány univerzální self-signed certifikáty (tj. certifikát podepsaný sám sebou, viz Certifikát podepsaný sám sebou). S jejich pomocí můžete okamžitě HTTPS používat, ale nebude možné ověřit, zda doopravdy komunikujete se správným serverem. K tomu si musíte vygenerovat certifikáty vlastní nebo si veřejný klíč nechat podepsat u certifikační autority.

Uživatel bude muset ve svém prohlížeči v případě ověřování self-signed certifikátu použít kontrolu SHA1 výtahu (miniatury, fingerprintu). Odkazy na umístění univerzálního certifikátu a klíče jsou uloženy v souboru /etc/httpd/conf.d/ssl.conf.

Vytvoření certifikátu s vlastním podpisem

Certifikát je digitálně podepsaný veřejný klíč. Digitální podpis můžete získat od nějaké certifikační autority nebo si můžete vytvořit podpis sami (sami se stát certifikační autoritou). Uživatel pak ale bude muset při ověření certifikátu použít kontrolu SHA1 výtahu (miniatury, fingerprintu) pomocí jiného kanálu, než získal zabezpečenou stránku (tj. zřejmě jinak, než pomocí Internetu – například telefonem, dopisem, osobním kontaktem a podobně).

Postup výroby vlastního podepsaného certifikátu je naznačen na následujících řádcích (tučně napsaný text představuje to, co uživatel píše). Je nezbytně nutné, aby v případě, že vytváříte certifikát jako náhradu za již existující, bylo zvýšeno sériové číslo (pomocí parametru -set_serial), jinak většina prohlížečů odmítne s WWW serverem komunikaci, protože nabízí novější certifikát stejného jména bez vyššího sériového čísla.

RHEL 5 a novější

V RHEL 5 a novějších verzích (též CentOS 5 nebo Fedora Core 6 a novějších) jsou soubory s certifikáty umístěny na jiném místě, než v předchozích verzích. Délka klíče RSA certifikátu je v příkladu 2048 bitů a expirace je nastavena na 365 dní (tj. jeden rok). Sériové číslo by mělo být voleno jedinečné (například datum, jak je uvedeno v příkladu), protože většina webových prohlížečů neumí zpracovat dva stejné certifikáty se stejným sériovým číslem (zobrazí jen prázdnou stránku a nezobrazí ani rozumné chybové hlášení). V příkladu je tučně vyznačen vstup uživatele a normální písmo označuje výstup zadaných příkazů:

cd /etc/pki/tls
rm -f private/localhost.key certs/localhost.crt
openssl genrsa 2048 > private/localhost.key
chmod go-rwx private/localhost.key
openssl req -new -key private/localhost.key -x509 -days 365 -out certs/localhost.crt -set_serial 00
Country Name (2 letter code) [GB]: CZ
State or Province Name (full name) [Berkshire]: Czech Republic
Locality Name (eg, city) [Newbury]: Liberec
Organization Name (eg, company) [My Company Ltd]: SPSSE a VOS Liberec
Organizational Unit Name (eg, section) []: Masarykova 3, 460 01 Liberec I.
Common Name (your name or server's hostname) []: www.pslib.cz
Email Address []: webmaster@pslib.cz

Po vytvoření certifikátu je potřeba restartovat WWW server:

service httpd restart

Od této chvíle by mělo jít používat HTTPS spojení s vaším WWW serverem.

RHEL 4 a RHEL 3

cd /etc/httpd/conf
rm -f ssl.key/server.key ssl.crt/server.crt
openssl genrsa 1024 > ssl.key/server.key
chmod go-rwx ssl.key/server.key
openssl req -new -key ssl.key/server.key -x509 -days 365 -out ssl.crt/server.crt -set_serial 00
Country Name (2 letter code) [GB]: CZ
State or Province Name (full name) [Berkshire]: Czech Republic
Locality Name (eg, city) [Newbury]: Liberec
Organization Name (eg, company) [My Company Ltd]: SPSSE a VOS Liberec
Organizational Unit Name (eg, section) []: Masarykova 3, 460 01 Liberec I.
Common Name (your name or server's hostname) []: www.pslib.cz
Email Address []: webmaster@pslib.cz

Po vytvoření certifikátu je potřeba restartovat WWW server:

/etc/init.d/httpd restart

Od této chvíle by mělo jít používat HTTPS spojení s vaším WWW serverem.

Kontrola certifikátu a privátního klíče

Certifikáty, které webový server Apache používá, je možné snadno vypsat příkazem:

/usr/sbin/httpd -t -DDUMP_CERTS

Údaje ve vypsaných souborech zkontrolujeme:

openssl verify /etc/pki/tls/certs/localhost.crt
openssl x509 -text -noout -in /etc/pki/tls/certs/localhost.crt

Pokud kontrolujeme certifikát vydaný certifikační autoritou, je obvykle potřeba dodat ještě řetězec certifikátů (certificate chain je v souboru ca-bundle.pem):

 openssl verify -CAfile /etc/pki/tls/certs/ca-bundle.pem /etc/pki/tls/certs/signed-certificate.crt

Kontrola konzistence privátního klíče (též případné funkčnosti heslové fráze chránící klíč):

openssl rsa -check -noout -in /etc/pki/tls/private/localhost.key

Privátní a veřejný klíč k sobě patří, pokud mají stejný modulus (dlouhé hexadecimální číslo), který lze pro přehlednost zkrátit pomocí vypočtení otisku. Oba otisky musí být v níže uvedených příkazech stejné, aby spolu oba klíče mohly fungovat:

openssl rsa -noout -modulus -in /etc/pki/tls/private/localhost.key | sha256sum
openssl x509 -noout -modulus -in /etc/pki/tls/certs/localhost.crt | sha256sum

Výpis otisku certifikátu, který bude zobrazen v prohlížeči:

openssl x509 -fingerprint -sha256 -noout -in /etc/pki/tls/certs/localhost.crt
openssl x509 -fingerprint -sha1 -noout -in /etc/pki/tls/certs/localhost.crt
openssl x509 -fingerprint -md5 -noout -in /etc/pki/tls/certs/localhost.crt

Odstranění heslové fráze z privátního klíče:

openssl rsa -in private-with-passphrase.key -out private-without-passphrase.key

Kontrola spojení

HTTP spojení lze otestovat pomocí nástroje openssl, který zajistí zakódování a dekódování provozu mezi klientem a serverem. V následujícím příkladu se připojujeme k lokálně spuštěnému webovému serveru na port HTTPS (443). Po navázání spojení je možné používat klasické HTTP příkazy, jako se to dělá při kontrole HTTP spojení nástrojem telnet.

openssl s_client -connect 127.0.0.1:443

Pro starší verzi openssl:

openssl s_client -ign_eof -crlf -connect 127.0.0.1:443

Kontrola certifikátu

Po navázání spojení (viz výše) uložte do souboru cert.txt certifikát (včetně značek -----BEGIN CERTIFICATE----- a -----END CERTIFICATE-----) a proveďte níže uvedený příkaz. Ve výpisu zkontrolujte, zda je certifikát vydán pro danou doménu, jeho platnost a další náležitosti.

openssl x509 -text -noout -in cert.txt