PHP týden Předvánoční slevová akce
Pouze tento týden sleva až 80 % na PHP e-learning!
Využij předvánočních slev a získej od nás 20 % bodů zdarma! Více zde

Lekce 19 - DERBY DB - Bezpečnost - Šifrovaná komunikace SSL/TLS

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

V minulé lekci, Derby DB - Bezpečnost - Zašifrování databáze, jsme se věnovali šifrování databáze. V této a následujících lekcích si předvedeme zabezpečení šifrovaného spojení. DerbyDB podporuje při spojení šifrovanou komunikaci SSL/TLS. Ve výchozím stavu je komunikace nešifrovaná a tudíž i snadno odposlouchatelná (např. přes nějaký sniffer), myšleno pro lidi, co ví, jak odchytávat packety. Nicméně upozorňuji, že pokud během komunikace dochází k přenosu většího množství informací (objekt ResultSet má v sobě tabulku např. 10MB, 100MB, či GB), pak odposlech takové tabulky není zas tak jednoduchou záležitostí, přestože např. řetězce by měly být přímo v plaintextu. To samozřejmě platí, pokud data chodí přes síť, kterou nemáte pod kontrolou nebo přes veřejnou sít (tzv. public network), jakou je například internet (WAN). Pokud by komunikace probíhala na vaší LAN na vlastním HW ve vaší serverovně (např. mezi nějakým aplikačním serverem a DerbyDB = důvěryhodná sít), pak šifrovaná komunikace není zas tak nutná. Nezapomeňte, že šifrování/deši­frování spotřebovává zdroje systému, což na databázových serverech může mít vliv na výkon.

Existují tedy 3 možnosti nastavení:

  • off - Výchozí nastavení, žádné SSL/TLS šifrování
  • basic - SSL/TLS šifrování - Klíčový pár (keypairs) je pouze na straně serveru
  • peerAuthentica­tion - SSL/TLS šifrování - Tzv. uzlové ověřování (šifrování). Klíčové úložiště je na straně serveru i klienta. Klíčová úložiště musí obsahovat klíčový pár daného uzlu a veřejnou část klíčového páru uzlu druhého, jinak k úspěšné authentifikaci (ověření) nedojde. Pokud chceme k databázi přistupovat např. z 5 klientů, pak serverové uložiště bude mít celkem 1 klíčový pár + 5 veřejných klíčů (klientů), ale každé klientské uložiště bude obsahovat pouze 1 klíčový pár klienta + 1 veřejnou část serverového páru. Tedy za předpokladu, že každý klient bude mít osobní klíčový pár.

Příprava nástrojů

Jako první krok si vygenerujeme serverový klíčový pár, tzv. keypairs (veřejný + soukromý klíč, tzv. public + private keys) a také klíčové úložiště. Klíčové úložiště bude typu JKS (tzv. Java KeyStore), které podporuje standard X.509. Více viz. Keytool parametry příkazu. Klíčové úložiště je prakticky pouze datový soubor, do kterého lze uložit certifikáty nebo klíčové páry.

keytool -genkeypair -alias Server -keyalg EC -keysize 571 -validity 730 -keystore ulozisteS.jks
Vytvoření uložiště Java KeyStore

Nyní si rozepíšeme, co jsme vlastně stvořili. Klíčové úložiště (keystore) se jmenuje ulozisteS.jks, jméno (alias) klíčového páru je Server, klíčový algoritmus je EC, což znamená "SHA256withECDSA". Délka veřejného klíče je 571 byte. Validity specifikuje dobu trvání klíče, v našem případě 730 dní = cca 2 roky. Doporučuji mít jiné heslo pro klíčové úložiště (keystore) a jiné pro klíčový pár (keys pair).

Nyní si provedeme výpis klíčového páru (keypairs) v našem klíčovém úložišti. Protože jsme vyrobili jen jeden, tak se nám vypíše pouze tento:

keytool -list -v -keystore ulozisteS.jks
Vypis klíčového uložiště
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Jak vidíte z výpisu klíčového úložiště, úložiště je typu JKS. Délka klíče je 570 bitová, standard x.509 je verze 3 a šifra je "SHA256withEC­DSA". Dole ve výpisu vidíte i upozornění (Warning) o doporučení migrace na jiný formát úložiště. Pokud bychom JKS úložiště chtěli využít, pak se nám server nespustí v této verzi Javy (v Java 7, 6 to fungovalo). Proto je nutná konverze do úložiště typu PKCS12. Úložiště PKCS12 má stejné heslo pro klíčový pár i uložiště, tzn. nepodporuje odlišná hesla.

-importkeystore -srckeystore ulozisteS.jks -destkeystore ulozisteNS.jks -deststoretype pkcs12 -destkeypass asdasd
Konverze JKS do PKCS12

Po konverzi jsme provedli výpis a jak vidíte, uložiště je typu PKCS12.

Spuštění serveru

Jako první krok provedeme nakopírování klíčovového úložiště PKCS12 - ulozisteNS.jks (nebo i druhého JKS - ulozisteS.jks) do adresáře naší DerbyDB (např. \JavaJDK08\bin\db\bin\). Samozřejmě můžete ji nechant např. na D:\ nebo někde jinde, ale protože budeme spouštět DerbyDB přes příkazový řádek, bude nutné cestu k úložišti nastavit v příkazu spuštění.

Jako druhý krok je nutné spustit skript, který nám nahraje do paměti (CLASSPATH) nutné knihovny (external jars), které náš server využije. Daný skript se nachází v \db\bin\.

setNetworkServerCP

Třetí krok je spuštění našeho serveru přes příkazový řádek. (Pozn. pokud používáte českou verzi OS, nezapomeňte vložit ještě parametr -Duser.language=en). Samozřejmě skript spusťte jako administratoři (správci).

Poté spustíme náš server. Zde uvedu několik příkladů pro snadnější pochopení parametrů spuštění DerbyDB serveru.

Následující příkaz spustí server na defaultním portu v ENG verzi OS bez SSL:

java org.apache.derby.drda.NetworkServerControl start

Tato varianta spustí server na portu 3344 v CZ verzi OS bez SSL:

java -Duser.language=en org.apache.derby.drda.NetworkServerControl start -p 3344

Spuštění SSL serveru typu basic v CZ verzi OS s uložištěm JKS. Dle přiloženého obrázku se nám příkaz nespustí a skončí vyjímkou:

java -Duser.language=en -Djavax.net.ssl.keyStore=ulozisteS.jks  -Djavax.net.ssl.keyStorePassword=aaa444b  org.apache.derby.drda.NetworkServerControl start -p 3344 -ssl basic

Spuštění SSL serveru typu basic v ENG verzi OS s úložištěm PKCS12. Následuje varianta, kterou jsem použil v příkladu, protože mám ENG verzi Win10:

java -Djavax.net.ssl.keyStore=ulozisteNS.jks  -Djavax.net.ssl.keyStorePassword=asdasd  org.apache.derby.drda.NetworkServerControl start -p 3344 -ssl basic

Spuštění SSL serveru typu basic v CZ verzi OS s úložištěm PKCS12. Pravděpodobně nejvhodnější varianta pro vás:

java -Duser.language=en -Djavax.net.ssl.keyStore=ulozisteNS.jks  -Djavax.net.ssl.keyStorePassword=asdasd  org.apache.derby.drda.NetworkServerControl start -p 3344 -ssl basic

SpuštěníDerbyDBServerusSSL Server s podporou SSL se nám úspěšně spustil. V příští kapitole si předvedeme, jak se na něj úspěšně připojit.

V příští lekci, DERBY DB - Bezpečnost - Šifrovaná komunikace SSL/TLS 2, si předvedeme spuštění serveru pro přístup ze sítě a spuštění klienta. Dále si předvedeme jak spolu komunikují.


 

 

Článek pro vás napsal Robert Michalovič
Avatar
Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!
Programuji převážně v Javě SE,EE a trochu nativním C a CUDA. více viz.https://cz.linkedin.com/in/robert-michalovic
Předchozí článek
Derby DB - Bezpečnost - Zašifrování databáze
Všechny články v sekci
DerbyDb
Miniatura
Následující článek
DERBY DB - Bezpečnost - Šifrovaná komunikace SSL/TLS 2
Aktivity (3)

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!