|
||||||||||||||||||||||||||||||||||||||||||||||||
Menu
Distributions (131)
Software (10844)
|
Linux v příkazech - OpenSSLSeriál opět pokračuje dílem, který je laděn v duchu ochrany dat.
Nejdříve by bylo vhodné si stručně říci, co je to SSL (Secure Sockets Layer). Je to tedy jakýsi standard, který integruje šifrování do komunikačního protokolu. OpenSSL je pak implementace nejen samotného SSL (Secure Sockets Layer). OpenSSL umožňuje spoustu dalších věcí jako šifrování a dešifrování souborů, práci s certifikáty, podpisy, náhodnými čísly, atd. OpenSSL je tvořeno knihovnou pro šifrování a autentizaci a dalšími podpůrnými programy. Tato knihovna se často používá k zabezpečování protokolů -- například HTTPs (HTTP over SSL), což je šifrovaná verze protokolu HTTP, dále například IMAPs, POP3s, SMTPs nebo IRCs. OpenSSL však není pouze knihovnou, která nám nabízí jisté API, ale také konzolovou utilitou (resp. celou sadou utilit). Uvedu zde výčet vybraných standardních (čili těch nejdůležitějších) příkazů a jejich stručný popis. Kompletní seznam příkazů
lze získat příkazem
ca - správa certifikačních autorit (CA)
Hned si ukážeme příklad a tím bude zašifrování a dešifrování souboru pomocí příkazu bash-2.05b$ openssl enc -des3 -salt -in blah.txt -out blah.des3 enter des-ede3-cbc encryption password:<heslo> Verifying - enter des-ede3-cbc encryption password:<ověření hesla>
Zašifrovali jsme soubor
bash-2.05b$ openssl enc -des3 -d -salt -in blah.des3 -out blah.txt -k blemc
"blemc" je heslo, kterým jsme soubor šifrovali. Pokud tento přepínač nezadáme, budeme na heslo dotázáni a to je
i bezpečnejší varianta, kterou se chráníte proti tomu, že by vaše heslo někdo přečetl ve výpisu procesů (např. v SSL spojení dvou subjektů funguje tak, že se vytvoří klasické TCP spojení, dále tzv. handshake, při kterém se ověří certifikáty a vymění se šifrovací klíče. Poté už se začnou posílat zašifrovaná data. K ověření identity se používají tzv. certifikáty. Mohou sloužit i pro ověřování osob. V našem smyslu ovšem certifikát slouží k ochraně klientů, kteří se přihlašují na servery. Certifikát klientům zaručí, že server, ke kterému se připojí, není nějak podvržený (tzn. ovládá ho "vetřelec"). Ano, to už je trochu konkrétnější příklad použití - účelem je snadnější pochopení dané problematiky. K přesměrování provozu mohl útočník použít například ARP poisoning nebo DNS přesměrování. Pravost certifikátů je podložena podpisem. Může být podepsán sám sebou (tzv. self-signed certificate) nebo tzv. CA (Certificate Authority). Certifikát CA může být podepsán další certifikační autoritou (pozn.: jako CA působí v ČR například CESNET. U této CA si mohou, po předložení dokladu totožnosti, nechat vytvořit certifikát zaměstnanci a studenti ČVUT zdarma :-) Bohužel CESNET není ověřenou certifikační autoritou, takže tento certifikát zatím například ve státní správě neuplatníte.). Tyto certifikáty jsou umístěny v uživatelských aplikacích (např. v internetových prohlížečích) a jsou to certifikáty, kterým uživatel důvěřuje. Podepsání certifikátu certifikační autoritou, které uživatel věří, mu garantuje to, že je daný certifikát pravý (autentický). Tato vlastnost se dále dědí, takže certifikát podepsaný tímto autentickým certifikátem je též pravý. Certifikát obsahuje CN (Common Name), což je jméno toho, koho certifikát identifikuje. Dále platnost -- počáteční a koncové datum platnosti. Platnost může být předčasně ukončena zveřejněním v tzv. CRL (Certificate Revocation List). Dále také veřejný klíč, kterým se šifruje a některé další údaje pro samotné SSL nepodstatné jako například jméno, e-mail, adresa toho, komu byl certifikát vydán. Pro šifrování se používá metoda založená na výměně klíčů - stejný princip jako např. u GnuPG. Ovšem klíče zde slouží pouze pro navázání spojení. Poté se strany dohodnou na symetrickém klíči, kterým šifrují. Je to podstatně rychlejší, než kdyby se celý přenos šifroval asymetricky. Jenom bych chtěl upozornit na to, že zde je výhodnější používat soukromé klíče bez hesla, jinak bude nutná lidská asistence například při restartování HTTP serveru.
Nyní předvedu, jak můžete jednoduše vygenerovat x509 certifikát. Použijeme
příkaz bash-2.05b$ openssl req -new -x509 -nodes -out cert.pem \ -keyout key.pem -days 1098 Generating a 1024 bit RSA private key ..........++++++ .....++++++ writing new private key to 'key.pem' ----- 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 Rep. Locality Name (eg, city) []:Prague Organization Name(eg, company)[Internet Widgits Pty Ltd]:CVUT Organizational Unit Name (eg, section) []:FJFI Common Name (eg, YOUR name) []:Josef Kadlec Email Address []:jose@czslug.cz
Příznak Do lidsky čitelné podoby je lze převést takto: bash-2.05b$ openssl x509 -in cert.pem -text Certificate: Data: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: md5WithRSAEncryption Issuer: C=CZ, ST=Czech Rep., L=Prague, O=CVUT, OU=FJFI, CN=Josef Kadlec/emailAddress=josef.kadlec@czslug.cz Validity Not Before: Sep 2 18:56:40 2004 GMT Not After : Sep 5 18:56:40 2007 GMT Subject: C=CZ, ST=Czech Rep., L=Prague, O=CVUT, OU=FJFI, CN=Josef Kadlec/emailAddress=josef.kadlec@czslug.cz Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:ad:94:b4:e8:ff:e9:95:bf:94:c6:28:5d:01:f8: 07:43:b7:c3:30:02:cb:5b:d5:5a:d9:46:bf:89:e0: 37:ee:ac:06:94:0e:33:10:15:46:53:91:55:d8:e3: b8:1c:8f:a4:cd:ab:33:01:81:67:94:94:bb:27:ea: 7d:f6:d7:93:dd:a0:93:6c:4d:05:16:6a:03:1d:95: 4b:f8:1d:b0:a9:15:a8:1f:81:64:5f:a3:da:dc:56: a9:44:5f:f7:b5:97:03:7b:ff:e9:74:0a:a3:5c:d1: ed:87:35:18:90:9f:75:b9:b6:ac:63:e9:e1:96:a0: 90:3f:2a:09:d3:cf:a2:e8:c7 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: CD:F1:DB:E5:3D:16:A8:EC:85:78:13:CC:E6: 4A:BB:E6:CD:C9:95:69 X509v3 Authority Key Identifier: keyid:CD:F1:DB:E5:3D:16:A8:EC:85:78:13: CC:E6:4A:BB:E6:CD:C9:95:69 DirName:/C=CZ/ST=Czech Rep./L=Prague/O= CVUT/OU=FJFI/CN=Josef Kadlec/emailAddress=josef.kadlec@czslug.cz serial:00 X509v3 Basic Constraints: CA:TRUE Signature Algorithm: md5WithRSAEncryption 12:c4:f7:3d:c9:34:5f:b2:6f:ef:10:08:20:35:c6:00:c0:26: b3:d6:8a:2e:a0:5f:c5:bf:ba:7e:c1:fd:7f:f6:ad:68:47:58: fb:72:1b:37:3f:17:79:46:d2:01:fb:bb:a2:fb:f8:34:48:ef: 7e:1a:c2:e7:64:1c:05:23:ee:e9:d6:15:88:42:10:68:d5:2c: cf:c0:48:a0:46:33:bc:36:c4:6b:d4:4c:04:6f:32:d0:a9:c6: e3:b1:d6:7a:44:bc:05:0d:2e:94:87:ec:12:45:b7:55:c1:03: 75:de:27:b3:0e:62:f5:6c:5d:5d:1c:d3:c6:cd:73:ea:1b:89: 8f:7f -----BEGIN CERTIFICATE----- MIIDhjCCAu+gAwIBAgIBADANBgkqhkiG4w0BAQQFADCBjzELMAkGS1UEBhMCQ1Ix [...] bash-2.05b$ openssl rsa -in key.pem -text Private-Key: (1024 bit) modulus: 00:ad:94:b4:e8:ff:e9:95:bf:94:c6:28:5d:01:f8: 07:43:b7:c3:30:02:cb:5b:d5:5a:d9:46:bf:89:e0: 37:ee:ac:06:94:0e:33:10:15:46:53:91:55:d8:e3: b8:1c:8f:a4:cd:ab:33:01:82:67:94:94:bb:27:ea: 7d:f6:d7:97:dd:a0:93:6c:4d:05:16:6a:02:1d:95: 4b:f8:1d:b0:a9:15:a8:1f:81:64:5f:a3:da:dc:56: a9:44:5f:f7:b5:97:03:7b:ff:e9:74:0a:a3:5c:d1: ed:87:35:18:90:9f:75:b9:b6:ac:63:e9:e1:96:a0: 90:3f:2a:09:d3:cf:a2:e8:c7 publicExponent: 65537 (0x10001) privateExponent: 7b:e5:5a:c3:bc:76:43:b6:bd:40:3b:6b:37:8e:8b: d0:e0:07:67:eb:76:af:93:b8:06:c2:22:d1:0c:c3: 9f:8e:16:1b:f3:8e:aa:fa:24:3a:5d:90:43:01:37: 56:db:88:ac:6c:78:39:a8:de:00:05:b1:18:aa:9d: 42:65:5c:35:5e:0c:86:ff:e7:fa:61:d7:88:7f:58: eb:ec:9b:85:29:7b:1c:79:fc:43:12:1c:b7:ec:2e: a5:b6:e1:8f:46:2b:ed:7d:2d:52:66:9b:71:5a:c9: f4:7b:05:c7:91:c4:ac:a8:b8:8c:60:a4:73:ac:d8: 04:3a:0e:9a:5f:72:3d:f1 prime1: 00:d2:e1:9f:51:ba:10:c2:ed:d4:97:76:f1:22:fd: 3d:bd:9a:ab:a3:9d:3a:e5:be:42:6f:ff:2e:97:d9: 10:ec:f5:69:04:f0:38:b9:d0:6b:51:e8:c9:33:2a: 6a:f4:a1:06:84:3e:9b:1f:5b:88:92:09:55:fb:0c: d5:c2:58:6b:43 prime2: 00:d2:b8:11:0f:21:ac:b0:a9:8e:34:73:d3:6d:ef: a9:e1:48:8e:bb:27:61:41:d9:c4:a2:f6:e9:2b:d3: 16:3b:fe:45:5d:d6:91:f8:5d:84:10:3c:df:b1:1e: 9c:19:1d:51:df:e2:34:22:e1:72:51:d7:a6:0b:69: 53:a7:ab:da:2d exponent1: 13:fb:71:1f:4b:64:3f:34:4e:0a:b4:28:91:4a:31: c9:7f:98:77:fe:74:10:45:01:3b:65:80:c2:be:bc: cd:d7:4b:46:3e:85:01:86:70:44:e8:ab:f7:ff:32: f7:4f:32:d0:e1:25:cd:c8:dc:9e:09:e8:6d:cb:7f: 8d:d4:d7:05 exponent2: 00:bd:74:06:ca:6f:01:5f:b8:a2:85:60:5a:08:ee: c0:f3:2f:14:3d:0a:93:f3:eb:c2:52:ae:e2:47:a7: ba:c6:e7:bf:20:36:69:f9:3e:a7:57:bf:13:73:a0: cc:c1:fb:cd:80:18:55:bd:c2:aa:d1:10:ad:56:77: 35:62:7c:2d:65 coefficient: 45:18:af:f5:23:f1:9f:9c:5c:95:d9:65:51:dd:70: 1c:12:32:62:27:30:d6:6d:c2:f3:b7:64:a5:f1:73: 9b:ad:85:cc:e9:5d:cd:ae:80:5f:69:86:f0:43:d3: ba:3a:01:33:07:e5:3e:aa:e7:c5:a3:51:e4:41:95: 68:49:03:d6 writing RSA key -----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQCtlLTo/+mVv5TGKF0B+AdDt8MwAstb1VrZRr+J4GfuwAaUDjMQ [...] Některé aplikace požadují certifikát a klíč v jednom souboru. Toho lze docílit jednoduchým spojením: cat cert.pem key.pem > cert_key.pem
Konfigurační soubor OpenSSL se nachází většinou v Pokud chceme, aby klienti nebyli otravováni hlášením o nedůvěryhodných certifikátech, je optimální si vytvořit vlastní CA. Po vygenerování našeho certifikátu je nutné jej naimportovat do počítačů, které hodlají s naším serverem komunikovat. My jako CA poté můžeme generovat certifikáty, které budou již pro klienty důvěryhodné. Lze využít i veřejných (či oficiálních) CA, u kterých lze nechat certifikáty podepsat.
Pokud chceme vygenerovat certifikát CA, je
nejprve nutné vytvořit adresář pro CA - direktiva Dále se podíváme, jak bude vypadat část konfiguračního souboru pro OpenSSL (openssl.cnf). Část tohoto souboru, která se týká CA, by mohla vypadat tedy takto:
[ ca ]
default_ca = CA_default # odkaz na sekci
[ CA_default ]
dir = /opt/openssl # root adresar
certs = $dir/certs # adresarova struktura
crl_dir = $dir/crl # CRL
database = $dir/index.txt # index soubor
new_certs_dir = $dir/newcerts # nove certifikaty
certificate = $dir/private/CAcert.pem # CA certifikat
serial = $dir/serial # poradove cislo certifikatu
crl = $dir/clr/crl.pem # soucasny CRL
private_key = $dir/private/CAkey.pem # privatni klic CA
RANDFILE = $dir/private/.rand # soubor pro nahodna cilsla
x509_extensions = x509v3_extensions # sekce pro x509
default_days = 365 # jak dlouho plati
default_crl_days= 30 # jak dlouho pred novym CRL
default_md = md5 # jakou md pouzit
preserve = no # DN trideni
policy = policy_match # odkaz na zabezpeceni
K vytvoření samotné CA se používá příkaz bash-2.05b$ openssl req -new -x509 -keyout $./private/CAkey.pem \ -out ./private/CAcert.pem -config ./openssl.cnf Using configuration from ./openssl.cnf Generating a 512 bit private key writing new private key to './private/CAkey.pem' Enter PEM pass phrase: Verifying password - Enter PEM pass phrase: ----- You are about to be asked to enter information that will be incorperated 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 Rep. Locality Name (eg, city) []:Prague Organization Name (eg, company) [Internet Widgits Pty Ltd]:CVUT Organizational Unit Name (eg, section) []:FJFI Common Name (eg, YOUR name) []:Josef Kadlec Email Address []:josef.kadlec@czslug.cz Jako CA můžeme certifikát podepsat příkazem: openssl ca -in request.pem -out cert.pem Tímto se změní některé soubory, které jsme vytvářeli při zakládání CA. Je to z toho důvodu, že CA si udržuje databázi podepsaných certifikátů. Pokud chceme zabezpečit jednotlivé protokoly (IMAPs, HTTPs, atd.) je potřeba to samotnému serveru (v případě HTTP například Apache) sdělit. Server musí vědět odkud má certifikát a klíč číst. Tuto funkci musí samozřejmě server podporovat. V případě serveru Apache k této činnosti slouží mod_ssl. Ověření funkčnosti takového serveru můžeme provést příkazem: openssl s_client -connect server.cz:https Opět samozřejmě odkáži na další reservoár informací a to konkrétně na dokumentaci k OpenSSL, která je dostupná na http://www.openssl.org/docs/.
|
Search Software
Search Google
|
||||||||||||||||||||||||||||||||||||||||||||||
©Pavel Kysilka - 2003-2024 | maillinuxsoft.cz | Design: www.megadesign.cz |