IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

19. diel - DERBY DB - Bezpečnosť - Šifrovaná komunikácia SSL / TLS

V minulej lekcii, Derby DB - Bezpečnosť - Šifrovanie databázy , sme sa venovali šifrovanie databázy. V tejto a nasledujúcich lekciách si predvedieme zabezpečenia šifrovaného spojenia. DerbyDB podporuje pri spojení šifrovanú komunikáciu SSL / TLS. V predvolenom stave je komunikácia nešifrované a teda aj ľahko odposlouchatelná (napr. Cez nejaký sniffer), myslené pre ľudí, čo vie, ako odchytávať packety. Avšak upozorňujem, že ak počas komunikácie dochádza k prenosu väčšieho množstva informácií (objekt ResultSet má v sebe tabuľku napr. 10MB, 100MB, či GB), potom odposluch také tabuľky nie je zas tak jednoduchou záležitosťou, hoci napr. Reťazca, by mali byť priamo v plaintextu . To samozrejme platí, ak dáta chodí cez sieť, ktorú nemáte pod kontrolou alebo cez verejnú sieť (tzv. Public network), akou je napríklad internet (WAN). Ak by komunikácia prebiehala na vašej LAN na vlastnom HW vo vašej serverovni (napr. Medzi nejakým aplikačným serverom a DerbyDB = dôveryhodná sít), potom šifrovaná komunikácia nie je zas tak nutná. Nezabudnite, že šifrovanie / dešifrovanie odčerpávajú zdroje systému, čo na databázových serveroch môže mať vplyv na výkon.

Existujú teda 3 možnosti nastavenia:

  • off - Predvolené nastavenie, žiadne SSL / TLS šifrovanie
  • basic - SSL / TLS šifrovanie - Kľúčový pár (keypairs) je len na strane servera
  • peerAuthentica­tion - SSL / TLS šifrovanie - Tzv. uzlové overovania (šifrovanie). Kľúčové úložisko je na strane servera i klienta. Kľúčové úložisko musí obsahovať kľúčový pár daného uzla a verejnú časť kľúčového páru uzla druhého, inak k úspešnej authentifikaci (overenie) nedôjde. Ak chceme k databáze pristupovať napr. Z 5 klientov, potom serverové úložisko bude mať celkom 1 kľúčový pár + 5 verejných kľúčov (klientov), ale každé klientské úložisko bude obsahovať len 1 kľúčový pár klienta + 1 verejnú časť serverového páru. Teda za predpokladu, že každý klient bude mať osobné kľúčový pár.

Príprava nástrojov

Ako prvý krok si vygenerujeme serverový kľúčový pár, tzv. Keypairs (verejný + súkromný kľúč, tzv. Public + private keys) a tiež kľúčové úložiska. Kľúčové úložiska bude typu JKS (tzv. Java KeyStore), ktoré podporuje štandard X.509. Viac viď. Keytool parametre príkazu. Kľúčové úložisko je prakticky iba dátový súbor, do ktorého možno uložiť certifikáty alebo kľúčové pary.

keytool -genkeypair -alias Server -keyalg EC -keysize 571 -validity 730 -keystore ulozisteS.jks
Vytvorenie úložisko Java KeyStore - DerbyDb

Teraz si rozpíšeme, čo sme vlastne stvorili. Kľúčové úložisko (keystore) sa volá ulozisteS.jks, meno (alias) kľúčového páru je Server, kľúčový algoritmus je EC, čo znamená "SHA256withECDSA". Dĺžka verejného kľúča je 571 byte. Validity špecifikuje dobu trvania kľúča, v našom prípade 730 dní = cca 2 roky. Odporúčam mať iné heslo pre kľúčové úložisko (keystore) a iné pre kľúčový pár (keys pair).

Teraz si vykonáme výpis kľúčového páru (keypairs) v našom kľúčovom úložisku. Pretože sme vyrobili len jeden, tak sa nám vypíše iba tento:

keytool -list -v -keystore ulozisteS.jks
Vypis kľúčového úložisko - DerbyDb

Ako vidíte z výpisu kľúčového úložiska, úložisko je typu JKS. Dĺžka kľúča je 570 bitová, štandard x.509 je verzia 3 a šifra je "SHA256withEC­DSA". Dole vo výpise vidíte aj upozornenia (Warning) o odporúčaní migrácie na iný formát úložiska. Ak by sme JKS úložiska chceli využiť, potom sa nám server nespustí v tejto verzii Javy (v Java 7, 6 to fungovalo). Preto je nutná konverzia do úložiska typu PKCS12. Úložisko PKCS12 má rovnaké heslo pre kľúčový pár aj úložisko, tzn. nepodporuje odlišná heslá.

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

Po konverzii sme vykonali výpis a ako vidíte, úložisko je typu PKCS12.

Spustenie servera

Ako prvý krok vykonáme nakopírovaniu klíčovového úložisko PKCS12 - ulozisteNS.jks (alebo aj druhého JKS - ulozisteS.jks) do adresára našej DerbyDB (napr. \JavaJDK08\bin\db\bin\). Samozrejme môžete ju nechant napr. Na D:\ alebo niekde inde, ale pretože budeme spúšťať DerbyDB cez príkazový riadok, bude potrebné cestu k úložisku nastaviť v príkaze spustení.

Ako druhý krok je nutné spustiť skript, ktorý nám nahrá do pamäte (CLASSPATH) nutné knižnice (external Jars), ktoré náš server využije. Daný skript sa nachádza v \db\bin\.

setNetworkServerCP

Tretí krok je spustenie nášho servera cez príkazový riadok. (Pozn. Ak používate českú verziu OS, nezabudnite vložiť ešte parameter -Duser.language=en). Samozrejme skript spustite ako administrátor (správcovi).

Potom spustíme náš server. Tu uvediem niekoľko príkladov pre ľahšie pochopenie parametrov spustenie DerbyDB servera.

Nasledujúci príkaz spustí server na defaultným porte v ENG verzii OS bez SSL:

java org.apache.derby.drda.NetworkServerControl start

Tento variant spustí server na porte 3344 v CZ verzii OS bez SSL:

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

Spustenie SSL servera typu basic v CZ verzii OS s úložiskom JKS. Podľa priloženého obrázku sa nám príkaz nespustí a skončí výnimkou:

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

Spustenie SSL servera typu basic v ENG verzii OS s úložiskom PKCS12. Nasleduje variant, ktorú som použil v príklade, pretože mám ENG verziu Win10:

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

Spustenie SSL servera typu basic v CZ verzii OS s úložiskom PKCS12. Pravdepodobne najvhodnejší variant pre 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 - DerbyDb
Server s podporou SSL sa nám úspešne spustil. V nasledujúcej kapitole si predvedieme, ako sa na neho úspešne pripojiť.

V budúcej lekcii, Kvíz - Jednoduché dátové typy a súbory Derby DB v Jave , si predvedieme spustenie servera pre prístup zo siete a spustenie klienta. Ďalej si predvedieme ako spolu komunikujú.

V nasledujúcom kvíze, Kvíz - Jednoduché dátové typy a súbory Derby DB v Jave, si vyskúšame nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

Predchádzajúci článok
Derby DB - Bezpečnosť - Šifrovanie databázy
Všetky články v sekcii
DerbyDb
Preskočiť článok
(neodporúčame)
Kvíz - Jednoduché dátové typy a súbory Derby DB v Jave
Článok pre vás napísal Robert Michalovič
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
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
Aktivity