Linux v příkazech - OpenSSL
Seriál opět pokračuje dílem, který je laděn v duchu ochrany dat.
17.9.2004 08:00 |
Josef "jose" Kadlec
| Články autora
| přečteno 42955×
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 openssl s příznaky -list-standard-commands ,
-list-message-digest-commands a -list-cipher-commands . Tyto
příkazy se používají ve tvaru openssl <prikaz> [parametry] .
ca - správa certifikačních autorit (CA)
crl - správa revokačních certifikátů (CRL)
crl2pkcs7 - konverze CRL na PKCS#7
dsa - práce s DSA klíči
dsaparam - generování a manipulace s DSA
enc - manipulace se symetrickými šiframi
dhparam - správa Diffie-Hellman parametrů
gendsa - generování DSA parametrů
genrsa - generování RSA parametrů
ocsp - poskytne různorodé informace o certifikátu
passwd - generování hashovaných hesel
pkcs12 - správa pkcs12 certifikátů
pkcs7 - správa pkcs7 certifikátů
rand - generování pseudonáhodných čísel
req - generování certifikátů
rsa - správa RSA dat
rsautl - utilita pro podepisování, ověřování, šifrování a dešifrování pomocí RSA
s_client - vytvoření SSL/TLS spojení ke vzdálenému serveru
s_server - server bude čekat na SSL/TLS spojení od klientů
s_time - SSL časovač
sess_id - správa SSL sessions
speed - měření rychlosti algoritmu
verify - ověřování X.509 certifikátů
version - informace o verzi OpenSSL
x509 - správa X.509 certifikátů
Hned si ukážeme příklad a tím bude zašifrování a dešifrování souboru pomocí příkazu enc .
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 blah.txt tří klíčovou šifrou triple DES s výstupem
do souboru blah.des3 . Rozšifrování tohoto souboru realizujeme takto:
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 ps ).
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 openssl v tomto tvaru:
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 -req značí, že se jedná o certifikační žádost. Příznak
-new znamená, že vytváříme novou žádost. Příznak
-x509 znamená právě vytváření certifikátu podepsaného sám sebou
(self-signed certificate). Příznakem -nodes říkáme, aby se
soukromý klíč nešifroval. Certifikát bude zapsán do souboru
cert.pem a klíč do souboru key.pem v aktuálním
adresáři. Certifikát bude platný 1098 dní (3 roky). Budete dotázáni, abyste
vyplnili zbývající informace jako e-mail, adresa a také CN, kam by jste měli
vyplnit jméno serveru, pro který je certifikát vystaven. Soubory
cert.pem a key.pem jsou při běžném čtení nečitelné
(pokud neuvedeme příznak -text ).
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
[...]
a
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 /etc/ssl/ a
jmenuje se openssl.cnf nebo openssl.conf .
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 dir (implicitně
demoCA ) v konfiguračním souboru pro OpenSSL. Dále vytvoříme
další nutné podadresáře (implicitně certs , crl ,
newcerts a private ) podle konfiguračního souboru pro
OpenSSL. Do adresáře pro CA je potřeba vytvořit soubor index.txt ,
což je jakýsi "database index file". V tom samém adresáři je nutné vytvořit
soubor serial , do kterého je nutné napsat hodnotu "01".
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 req (přesněji s přepínačem -x509 ).
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/.
Verze pro tisk
|
Příspívat do diskuze mohou pouze registrovaní uživatelé.
|
|

Vyhledávání software

Vyhledávání článků
28.11.2018 23:56 /František Kučera Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1
12.11.2018 21:28 /Redakce Linuxsoft.cz 22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář
6.11.2018 2:04 /František Kučera Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
4.10.2018 21:30 /Ondřej Čečák LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář
18.9.2018 23:30 /František Kučera Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
9.9.2018 14:15 /Redakce Linuxsoft.cz 20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business.
Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář
12.8.2018 16:58 /František Kučera Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář
16.7.2018 1:05 /František Kučera Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář
Více ...
Přidat zprávičku
 Poslední diskuze
31.7.2023 14:13 /
Linda Graham iPhone Services
30.11.2022 9:32 /
Kyle McDermott Hosting download unavailable
13.12.2018 10:57 /
Jan Mareš Re: zavináč
2.12.2018 23:56 /
František Kučera Sraz
5.10.2018 17:12 /
Jakub Kuljovsky Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?
Více ...
|