Portál AbcLinuxu, 20. dubna 2024 02:31

SSL - 2 (elektronický podpis)

6. 3. 2006 | Rastislav Stanik
Články - SSL - 2 (elektronický podpis)  

Jak využít SSL k bezpečnému podepisování dokumentů, použití grafických programů, zabezpečení komunikace na webu, zrušené certifikáty.

Elektronický podpis

Elektronický podpis sa vyrába tak, že zo vstupného dokumentu sa spočíta kontrolný súčet. Kontrolný súčet sa počíta špeciálnym matematickým algoritmom. Jeho špeciálnosť spočíva v tom, že pre ľubovoľný vstup poskytne na výstupe reťazec, z ktorého nie je možné odvodiť pôvodný vstup a zároveň aj tá najmenšia zmena vo vstupe má za následok zmenu vo výstupe. V minulosti sa používal jednoduchý algoritmus zvaný CRC, v súčasnosti sa používa napr. algoritmus s označením MD5, ale ten je vytláčaný algoritmom SHA1 resp. SHA2. Získaný výstupný reťazec sa potom zašifruje pomocou súkromného kľúča:

openssl dgst -sign RSprivatekey vstupny_subor > podpis
Enter pass phrase for RSprivatekey:

Program si vypýta heslo prislúchajúce ku RSprivatekey a s jeho pomocou vytvorí elektronický podpis. Podpis je unikátny pre daný súkromný kľúč a vstupný súbor. Nikto iný, než ten, kto disponuje súkromným kľúčom, nemôže vytvoriť rovnaký podpis. Ten, kto chce zistiť, či dokument je pravý (nebol zmenený jeho obsah), spočíta jeho kontrolný súčet. Ten sa potom porovná s kontrolným súčtom, ktorý sme získali dešifrovaním overovaného podpisu:

openssl dgst -verify RSpublickey -signature podpis < vstupny_subor
Verified OK

Ak by súbor medzičasom niekto pozmenil, elektronický podpis už nebude sedieť:

openssl dgst -verify RSpublickey -signature podpis < zmeneny_subor
Verification Failure

Od CUI ku GUI

V predchádzajúcich odsekoch sme používali pre prácu s certifikátmi program openssl z balíka OpenSSL. Teraz sa pozrieme, ako využiť SSL v maileri či browseri. Aby certifikáty používateľov bolo možné používať na šifrovanie či podpisovanie správ, musíme najprv naučiť program rozoznávať certifikačnú autoritu, ktorá certifikáty vydáva.

Náš vlastný certifikát potrebujeme importovať, ak plánujeme podpisovať odosielané správy. Mailové programy spravidla požadujú certifikát v inom formáte, ako sme používali doteraz - PKCS#12. Našťastie openssl poskytuje možnosť previesť certifikáty do požadovaného formátu:

openssl pkcs12 -in RScertificate.pem -inkey RSprivatekey -export \
 -out RScertificate.p12
Enter pass phrase for RSprivatekey:
Enter Export Password:
Verifying - Enter Export Password:

Certifikáty ľudí, ktorých podpisy budeme overovať alebo ktorým budeme posielať šifrované správy, musíme takisto importovať.

Po ukončení importovania môžeme potom pri písaní správy nastaviť či má byť šifrovaná, alebo podpísaná, alebo oboje:

Pri takomto nastavení bude text správy šifrovaný. Pozor však na to, že informácie v hlavičke mailu, teda odosielateľ, príjemca, predmet správy a podobne, šifrované nie sú.

Bezpečný web

Ďalšou oblasťou, kde sa s SSL certifikátmi stretávame, sú webové servery. Typickým príkladom sú webové servery pre internetbanking. Zmyslom je, aby si používateľ bol istý, že je skutočne spojený s webovým serverom banky a nie nejakého podvodníka, ktorý sa snaží vylákať cenné informácie, číslo kreditky a podobne. Okrem autentickosti servera sa SSL postará aj o šifrovanie dát prenášaných medzi webovým serverom a browserom. Ako to funguje, si môžeme vyskúšať pomerne jednoducho. Potrebujeme k tomu webový server Apache, ktorý bol skompilovaný s podporou SSL - pri kompilovaní bol použitý prepínač --with-openssl. SSL funkcionalita je dostupná vo forme modulu s názvom mod_ssl. Aby bola aktivovaná, musí konfigurácia Apache obsahovať direktívu:

LoadModule ssl_module libexec/apache/libssl.so

Moja distribúcia to konkrétne rieši tak, že v konfiguračnom súbore /etc/apache/httpd.conf treba zrušiť komentár na riadku, ktorý includuje súbor s konfiguráciou SSL:

# ==> mod_ssl configuration settings <==
Include /etc/apache/mod_ssl.conf

Správne nahratie mod_ssl sa prejaví aj v logu (o umiestnení logu rozhoduje direktíva ErrorLog a vplyv má aj LogLevel v httpd.conf):

tail /var/log/apache/error_log
...
[Wed Feb  8 21:25:24 2006] [notice] Apache/1.3.33 (Unix) mod_ssl/2.8.22
OpenSSL/0.9.7d configured -- resuming normal operations

Okrem správneho nahratia mod_ssl potrebujeme prinajmenšom certifikát a zodpovedajúci súkromný kľúč. O ich umiestnení rozhodujú direktívy v konfiguračnom súbore:

SSLCertificateFile /etc/apache/ssl.crt/server.crt
SSLCertificateKeyFile /etc/apache/ssl.key/server.key

Podstatné je aj nastavenie portu. Webové spojenia chránené pomocou SSL sa tradične robia na porte https (s číslom 443):

<IfDefine SSL>
Listen 80
Listen 443
</IfDefine>

Teraz nám už ostáva iba prekrížiť prsty a odštartovať to:

httpd -DSSL
Apache/1.3.33 mod_ssl/2.8.22 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide us with the pass phrases.

Server ras:443 (RSA)
Enter pass phrase:
Ok: Pass Phrase Dialog successful.

Či Apache počúva na porte https, nám povie napr. netstat.

netstat -ltp |grep http
tcp  0  0  *:http  *:*  LISTEN  3616/httpd
tcp  0  0  *:https *:*  LISTEN  3616/httpd

Ak je všetko v poriadku, tak sa môžeme pokúsiť pripojiť pomocou browsera. Pretože ja som použil certifikát, ktorý som si vyrobil sám, tak ma browser upozorní, že taký certifikát ani CA nepozná a ponúkne mi zaradiť ho medzi dôveryhodné certifikáty. Tomu sa dá vyhnúť, ak certifikát CA vopred zaradíme do zoznamu dôveryhodných CA:

SSL modul servera apache dokáže oveľa viac. Môžete povoliť prístup k niektorým URL len pre browsery, ktoré sa preukážu správnym certifikátom a podobne. Detailnejší popis je mimo rozsah tohto článku, ale s dôverou sa môžete obrátiť na dokumentáciu.

Odvolávam, čo som odvolal...

Ak ste robili kroky popísané vyššie, isto ste si všimli, že súkromný kľúč je chránený heslom. Čo sa stane, keď sa heslo prezradí? V takom prípade môže niekto predstierať, že sme to my. Samozrejme za predpokladu, že získa aj náš súkromný kľúč. Môže tiež dešifrovať správy určené len nám. Tento problém riešia odvolávacie certifikáty (Revocation Certificate). Certifikačná autorita, okrem vydávania certifikátov aj udržiava a publikuje CRL - zoznam certifikátov, ktoré už nie sú platné.

openssl ca -revoke RScertificate.pem -keyfile CAdsaprivtekey -cert
CAcertificate

V parametroch vidíme, že odvolávame certifikát signed.pem a potrebný je na to súkromný kľúč CA a certifikát CA. O revokačných certifikátoch sa všeobecne málo vie. V prípade, že sa napr. pripájate na internet-banking, tak by ste si mali nielen overiť, že sa pripájate skutočne na ten správny server, ale aj to, že jeho certifikát nebol medzičasom odvolaný. Niektoré prehliadače to dokážu robiť za nás, ak sú správne nastavené:

Záver

Program openssl z balíka OpenSSL, ktorý sme používali v uvedených príkladoch, nie je určený pre koncového používateľa a ani nie je tou najdôležitejšou časťou tohto balíka. Najpodstatnejšou časťou sú knižnice implementujúce jednotlivé šifrovacie a hashovacie algoritmy a program openssl len poskytuje základný prístup k týmto knižniciam. Okrem openssl sú súčasťou balíka aj ďalšie skripty napr. CA.pl a podobne. Knižnice z balíka OpenSSL sú používané v množstve Open Source projektov, kde majú na starosti bezpečnosť ukladania a prenosu dát. Udržiavanie aktuálnosti tohoto balíka je významnou súčasťou bezpečnosti celého systému.

Související články

SSL - 1 (certifikáty)
Bezplatné CA – nebojte se šifrovat s S/MIME
IPSec na Linuxu, krok za krokem - 1
IPSec na Linuxu, krok za krokem - 2
IPSec v kernelu 2.6 - I
IPSec v kernelu 2.6 - II
Zabezpečení sítí Cisco
Šifrované filesystémy - I
Šifrované filesystémy - II
IPTraf - sledování sítě v reálném čase
Linuxové DMZ - I
Podepisování a šifrování s GnuPG
Bezpečný FTP server: glFTPd
Kalendář dostupný odkudkoliv?
Velký průvodce protokoly TCP/IP: Bezpečnost
MessageWall - kladivo nejen na spam
Bezpečnost v Linuxu
Recenze: Kniha kódů a šifer
SSH - Kompletní průvodce
Hacking bez tajemství - Webové aplikace

Odkazy a zdroje

OpenSSL

Další články z této rubriky

V sobotu se uskuteční konference CryptoFest
Pozor na androidové aplikace
Silent Circle představil bezpečný smartphone Blackphone 2
Android je bezpečnější, řada hrozeb však stále přetrvává
Avast varuje před nebezpečnými aplikacemi v Google Play

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.