Bezpečnější web s https

Krátký návod, jak nastavit Apache pro provoz HTTPS. Seznámíte se s pojmy certifikát a certifikační autorita a dozvíte se, že ne všem můžete slepě důvěřovat Původně vyšlo na portálu LinuxEXPRES.

Certifikát

Základem SSL (Secure Socket Layer) je asymetrická kryptografie (jinak též kryptografie s veřejným klíčem). Asymetrická kryptografie pracuje s dvojicí klíčů – veřejným a soukromým. Data zašifrovaná veřejným klíčem umožňuje dešifrovat pouze soukromý. Tedy jeden klíč (označovaný jako veřejný) můžeme dát veřejně k dispozici a jakákoliv data pomocí něj zašifrovaná otevře pouze majitel soukromého klíče. Samotná dvojice je nám však prakticky k ničemu. Neobsahuje žádné další informace, neidentifikuje osobu, doménu, firmu atp. Tyto informace můžeme ke klíči připojit. Jak jim ale důvěřovat?

Důvěra

Důvěru nám poskytne třetí strana, která takový klíč společně s dalšími informacemi podepíše. Tak vzniká certifikát. Certifikát je tedy veřejný klíč (tím se šifruje) s informacemi (ty identifikují držitele klíče) a je podepsaný elektronickým podpisem nějakou třetí stranou – certifikační autoritou, CA.

Nedůvěra

Pokud nevěříte nějaké neznámé třetí straně (veřejné CA jako Verisign, Comodo), děláte velmi dobře. Prakticky žádné veřejné CA, ani těm velmi drahým, se nevyhnuly problémy.

Případ Verisign

Verisign v roce 2002 podepsal certifikát pro doménu *.microsoft.com. Útočník potom tímto ve Windows zcela platným certifikátem (Windows důvěřují autoritě Verisign) podepisoval software, který potom lze do Windows bez jakýchkoliv obstrukcí nainstalovat. Od té doby má Verising ve Windows památku. Dané dva certifikáty jsou tam od roku 2002 blokované.

Případ Comodo

Před několika měsíci, konkrétně v březnu tohoto roku, měla problém certifikační autorita Comodo. Jeden z jejich partnerů a vydavatel certifikátů měl slabé heslo do systému, útočníci se tak snadno dostali k podpisovým klíčům a podepsali několik certifikátů, mezi nimi i addons.mozilla.org, login.live.com, mail.google.com, www.google.com, login.yahoo.com, login.skype.com. Důsledky si asi domyslíte sami.

Případ DigiNotar

Poměrně nedávno se objevil další případ. Certifikační autorita DigiNotar, důvěryhodná v programech Mozilla Firefox a Thunderbird a nejspíše i v dalších, vydala útočníkovi certifikát pro *.google.com. Bezpečnostní důsledky jsou opět asi více než zřejmé.

Vytvoření certifikační autority pomocí OpenSSL

Tyto tři naznačené případy (a nejsou bohužel jediné) narušují důvěru v nějakou třetí autoritu. Jak z toho ven? Udělat si vlastní autoritu! Sami sobě důvěřujeme.

Co tedy budeme potřebovat:

  • Software OpenSSL
  • Bezpečný počítač pro CA

Vygenerování certifikační autority

Příkaz vygeneruje klíč CA.key o síle 4096 b, certifikát CA.crt s platností 365 dní a údaji viz níže. Zde je nutné zadat velmi dobré a silné heslo. Toto heslo je potom potřeba při podepisování požadavků na certifikát. Nejdůležitější parametr je common name. U CA by měl obsahovat jméno certifikační autority, u certifikátů potom udává doménu, pro kterou byl vygenerován. V následujícím příkladu je common name nastaveno na řetězec „Heronova certifikacni autorita“. Parametry zadávané uživatelem jsou zvýrazněny tučně:

openssl req -new -x509 -days 365 -newkey rsa:4096 -keyout CA.key -out CA.crt

Generating a 4096 bit RSA private key
................++
.............++
writing new private key to 'CA.key'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CZ
State or Province Name (full name) [Some-State]:Czech Republic
Locality Name (eg, city) []:Olomouc
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Heronovo
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:Heronova certifikacni autorita
Email Address []:tomas@heronovo.cz

Nyní tedy máme dva soubory: CA.key a CA.crt. CA.key je soukromý klíč a ten by se nikdy neměl za žádných okolností dostat v otevřené podobě mimo server CA. Jakákoliv záloha by měla zálohovat šifrovaný disk jako celek.

CA.crt je kořenový klíč certifikační autority. Tento soubor je naopak možné a nutné zveřejnit a importovat do prohlížečů.

Dále je nutné vytvořit soubor openssl.conf s následujícím obsahem:

[ ca ]
default_ca      = CA_default            # The default ca section
[ CA_default ]
dir            = .                    # top dir
database       = $dir/index.txt        # index file.
new_certs_dir  = $dir/newcerts         # new certs dir
certificate    = $dir/CA.crt       # The CA cert
serial         = $dir/serial           # serial no file
private_key    = $dir/CA.key            # CA private key
RANDFILE       = $dir/.rand    # random number file
default_days   = 365                  # how long to certify for
default_crl_days= 30                   # how long before next CRL
default_md     = sha256                    # md to use
policy         = policy_any            # default policy
email_in_dn    = no                    # Don't add the email into cert DN
name_opt       = ca_default            # Subject name display option
cert_opt       = ca_default            # Certificate display option
copy_extensions = none                 # Don't copy extensions from request
[ policy_any ]
countryName            = supplied
stateOrProvinceName    = optional
organizationName       = optional
commonName             = supplied

Vytvoření adresáře newcerts, prázdného souboru index.txt a soubory serial s počátečním obsahem 01.

Rekapitulace vytvoření certifikační autority

  • Vygenerování CA.key a CA.crt
  • Konfigurační soubor openssl.conf
  • Prázdný adresář newcerts
  • Prázdný soubor index.txt
  • Soubor serial s obsahem 01.

Podepisování certifikátů naší certifikační autoritou

Tím se dostáváme k běžné práci certifikační autority.

Vygenerování požadavku na certifikát

Na webovém serveru, který budeme chtít zabezpečit pomocí protokolu HTTPS, si vygenerujeme dvojici klíč a požadavek na certifikát. Opět, klíč nikdy nesmí opustit daný server. Při jeho ztrátě je možné (a vhodné) vygenerovat klíč a certifikát znovu.

Požadavek tedy generuje ten, kdo chce daný certifikát. Nejčastěji správce daného webového serveru.

Následující ukázka vygeneruje požadavek na certifikát s common name www.valassko.cz. Takto vygenerovaný certifikát je platný pouze pro jednu doménu, pokud uživatel zadá valassko.cz, prohlížeč správně oznámí neplatný certifikát. Je tedy vysoce vhodné mít pro zabezpečené weby pouze jedno doménové jméno a jeden certifikát.

Klíč je 2048 b, slabší klíče by se dnes již neměly používat.

openssl req -new -nodes -newkey rsa:2048 -keyout www.valassko.cz.key -out www.valassko.cz.csr

Generating a 2048 bit RSA private key
..................+++
........................................................................................+++
writing new private key to 'www.valassko.cz.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CZ
State or Province Name (full name) [Some-State]:Czech republic
Locality Name (eg, city) []:Valasske Mezirici
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Valaska Internetova, s.r.o.
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:www.valassko.cz
Email Address []:baca@valassko.cz 

Administrátor tímto postupem vygeneroval soubory www.valassko.cz.key, což je opět soukromý klíč, který by nikdy neměl opustit daný server, pro který byl vygenerován. A dále soubor www.valassko.csr, který pošle k podpisu certifikační autoritu.

Rekapitulace vygenerování žádosti na straně žadatele (administrátora serveru):

  • Žadatel vygeneruje žádost a soukromý klíč.
  • Soukromý klíč nikdy nesmí opustit server.
  • V žádosti musí být správně vyplněno common name podle domény.
  • Žadatel pošle žádost na certifikační autoritu.

Podepsání certifikátu

Certifikační autorita dostane od žadatele soubor www.valassko.cz.csr a tento podepíše. Při podepsání budeme potřebovat heslo k certifikační autoritě.

openssl ca -in www.server.cz.csr -out www.server.cz.crt -config ./openssl.conf

Using configuration from ./openssl.conf
Enter pass phrase for ./CA.key:
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Sep  1 09:14:47 2011 GMT
            Not After : Aug 31 09:14:47 2012 GMT
        Subject:
            countryName               = CZ
            stateOrProvinceName       = Czech republic
            organizationName          = Valaska Internetova, s.r.o.
            commonName                = www.valassko.cz
Certificate is to be certified until Aug 31 09:14:47 2012 GMT (365 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Výsledkem je soubor www.valassko.cz.crt s certifikátem, který odešleme zpět k žadateli. Soubor *.csr již nadále nebudeme potřebovat.

Tímto je vygenerování certifikátu hotovo.

Rekapitulace běžné práce certifikační autority:

  • Certifikační autorita obdrží od žadatele žádost.
  • Tuto žádost podepíše.
  • Certifikační autorita odešle zpět k žadateli podepsaný vygenerovaný certifikát.

Nastavení webového serveru Apache

Žadatel, správce serveru má nyní svůj soukromý klíč (soubor www.valassko.cz.key), dále certifikát pro doménu www.valassko.cz (soubor www.valassko.cz.crt), dále také kořenový certifikát certifikační autority (soubor CA.crt).

Všechny tyto tři soubory je nutné uložit někam, kde na ně uvidí Apache a nikdo jiný. V následující ukázce je to adresář /etc/httpd/ssl.

V definici vhost daného webu a domény je potom nutné nastavit cesty ke klíčům a certifikátům:

SSLCertificateFile /etc/httpd/ssl/www.valassko.cz.crt
SSLCertificateKeyFile /etc/httpd/ssl/www.valassko.cz.key
SSLCACertificateFile /etc/httpd/ssl/CA.crt

Několik rad na závěr

Bezpečnost není dána nálepkou, bezpečnost není stav. Bezpečnost je proces. Jak ukazují případy výše, nelze slepě důvěřovat ani certifikačním autoritám vydávajícím certifikáty za tisíce korun. Vždy si tedy ověřte certifikát daného serveru (nikoliv certifikát vydávající certifikační autority). Například ČSOB je na toto připravena a na infolince mi informace k ověření sdělili. Nainstalujte si rozšíření do prohlížeče jako například HTTPS Everywhere a Certificate Patrol. První obsahuje seznam stránek, u kterých se vždy použije připojení pomocí HTTPS. Druhé potom upozorní na každou změnu certifikátu, a to i u certifikátů od důvěryhodných autorit.

Příspěvek byl publikován v rubrice Linux, SSL. Můžete si uložit jeho odkaz mezi své oblíbené záložky.

2 komentáře: Bezpečnější web s https

  1. Pingback: Jak snadno poznat, zda certifikát a soukromý klíč patří k sobě | Heronovo

  2. Pingback: Ne bezpečnost SSL | Heronovo

Komentáře nejsou povoleny.