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 20 - DERBY DB - Bezpečnost - Šifrovaná komunikace SSL/TLS 2

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 - Šifrovaná komunikace SSL/TLS, jsme si spustili DerbyDB zatím na localhostu. V tomto tutoriálu si předvedeme, jak se na tento server v rámci LAN připojíme, jak na něj přes IJ příkaz tak i programově přes Javu uložíme data a opět je získáme. Komunikaci v rámci LAN, příp. WAN, jsme si předvedli v 7. lekci. Prakticky provedeme podobnou věc, ale komunikace na úrovni TCP bude prováděna přes TLS/SSL. Jak jsme si v předchozí lekci řekli, využijeme PKCS12 typ klíčového uložiště ulozisteNS.jks, jenž jsme si minule vytvořili. Server DB poběží na IPv4 192.168.123.30, ENG OS a klient na IPv4 192.168.123.6, CZ OS. Pro komunikaci využijeme port 3344. Server doporučuji spustit v režimu Administrátor.

Spuštění SSL serveru typu basic v CZ verzi OS s úložištěm PKCS12 provedeme příkazem:

java -Duser.language=en -Djavax.net.ssl.keyStore=ulozisteNS.jks  -Djavax.net.ssl.keyStorePassword=asdasd  org.apache.derby.drda.NetworkServerControl start -h 192.168.123.30 -p 3344 -ssl basic
Spuštění serveru LAN

Připojení na server přes IJ

Jako první věc si spustíme příkazový řádek na klientovi. Jak vidíte, z přiloženého snímku obrazovky, tak klienta spouštím na Java8_201 (poslední public verze Java8). Jako další je nutné spustit spouštěcí skript setNetworkCli­entCP. Poté si spustíme příkazový interpret IJ, ovšem přes Javu a to příkazem java org.apache.derby.tools.ij. Pro jistotu si vypněte firewall, aby vám to fungovalo. Já mám LAN jako private síť, takže jsem potřeboval vypnout pouze private. U vás to může být jinak. Případně si nastavte ve firewallu výjimku. Až vyzkoušíte příklad, tak firewall nezapomeňte opět nastavit:

VypnutiFirewallu
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Jako první se samozřejmě nejdříve přihlásíme a vytvoříme databázi pojmenovanou databaze11, vložíme data a odhlásíme se. Pro zjednodušení nebudeme řešit žádné šifrování v databázi. Jak vidíte, na klientovi se nastavuje pouze parametr ssl=basic. Pokud nebude součástí příkazu connect, připojení se neprovede. Vyzkoušejte si to, nic se pokazí. Zbytek parametrů připojení znáte:

ij> connect 'jdbc:derby://192.168.123.30:3344/databaze11;create=true;ssl=basic;user=uzivatel1;password=heslo1';
ij> CREATE TABLE DerbyTABLE(sloupec1 CHAR(10), sloupec2 CHAR(20), sloupec3 INTEGER);
ij> INSERT INTO DerbyTABLE VALUES ('text11','text12',7),('text21','text22',6),('text31','text32',14);
ij> INSERT INTO DerbyTABLE VALUES ('text41','text42',12),('text51','text52',354),('text61','text62',778);
ij> SELECT * FROM DerbyTABLE;
ij> disconnect;
ij> exit;

Pak se znovu přihlásíme a data si přečteme:

ij> connect 'jdbc:derby://192.168.123.30:3344/databaze11;ssl=basic;user=uzivatel1;password=heslo1';
ij> SELECT * FROM DerbyTABLE;
ij> disconnect;
ij> exit;

Jak vidíte, vše funguje:

PripojeniPresIJ

Připojení k databázi programově

Samozřejmě co by to byl za článek o Javě, kdybychom si to nepředvedli přes Javu, že? Zas si vytvoříme testovací příklad v Java SE jako projekt v IDE. V menu zvolíme File -> New -> Java Project. Projekt pojmenujeme a nastavíme JRE Java8.

Tvorba Java projektu

Opětovně přidáme externí knihovny do našeho projektu do CLASSPATH. Jedná se o tyto externí knihovny:

  • derbyclient.jar
  • derby.jar
  • derbytools.jar
  • derbyoptionaltools.jar
Externí knihovny

Zde je vidět řešený zdrojový kód. V programu se pouze připojujeme a získáváme data. Jedná se o ta data, která jsme do databáze vložili přes IJ tool. Opět si můžete vyzkoušet odstranit z řetězce připojení ssl=basic. Pokud tam nebude, připojení se nezdaří.

package net;
import java.sql.*;

public class PripojeniSSL {

    private static Connection connect = null;
    private static Statement statement = null;
    private static ResultSet odpoved = null;

    static {
        try {
            Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();
        } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
            System.out.println("Problem s nactenim driveru - nutne pridat do CLASSPATH");
        }
    }

    private static void pripojeniDatabazeLAN() {
        try {
            connect = DriverManager.getConnection("jdbc:derby://192.168.123.30:3344/databaze11;ssl=basic;user=uzivatel1;password=heslo1'");
            System.out.println("Podarilo se pripojit k databazi11");
        } catch (Exception e) {
            System.err.println("Nepodarilo se pripojit k databazi11");
            if (connect == null) {
                System.exit(1);
            }
        }
    }

    private static void vypisemeData() {
        try {
            statement = connect.createStatement();
            odpoved = statement.executeQuery("SELECT * FROM DerbyTABLE");
            System.out.print("Podarilo se ziskat data :");
            while (odpoved.next()) {
                System.out.print("\nJmeno :" + odpoved.getString(1));
                System.out.print("\tPrijmeni :" + odpoved.getString(2));
                System.out.print("\tMail:" + odpoved.getString(3));
            }
        } catch (SQLException e) {
            System.out.println("Nepovedlo se ziskat data :");
            e.printStackTrace();
        }
    }

    private static void odpojimeDatabazi() {
        // zrusime objekty
        try {
            if (statement != null) {
                statement.close();
            }
            if (connect != null) {
                connect.close();
            }
            System.out.println("\nPodarilo se odpojit od databaze");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        System.out.println("Start Programu");
        pripojeniDatabazeLAN();
        vypisemeData();
        odpojimeDatabazi();
        System.out.println("Konec Programu");
    }
}

Výpis v metodě vypisemeData() je zkopírován z nějakého staršího příkladu a proto nedává logicky smysl. Podstatou článku je předvést princip připojení přes SSL typ basic a ten funguje.

Funkční spojení

Jak vidíte, vše opět funguje. Toto řešení je vcelku dobré, problémem je pouze doba trvání odeslání certifikátu na serveru a jeho výměna.


 

Stáhnout

Staženo 1x (4.5 kB)
Aplikace je včetně zdrojových kódů v jazyce Java

 

 

Č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 - Šifrovaná komunikace SSL/TLS
Všechny články v sekci
DerbyDb
Miniatura
Následující článek
Derby DB - Bezpečnost - Šifrovaná komunikace SSL/TLS 3
Aktivity (2)

 

 

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í!