Úvod do protokolu SSL v prostredí Java

Java Top

Práve som oznámil nové Naučte sa jar kurz zameraný na základy jari 5 a Spring Boot 2:

>> SKONTROLUJTE KURZ

1. Prehľad

V tomto tutoriále predstavíme SSL a preskúmame, ako ho môžeme použiť v Jave pomocou API JSSE (Java Secure Socket Extension).

2. Úvod

Jednoducho povedané Secure Socket Layer (SSL) umožňuje zabezpečené spojenie medzi dvoma stranami, zvyčajne klienti a servery.

SSL zaisťuje bezpečný kanál medzi dvoma zariadeniami pracujúcimi cez sieťové pripojenie. Jedným z bežných príkladov protokolu SSL je povolenie bezpečnej komunikácie medzi webovými prehľadávačmi a webovými servermi.

V tomto konkrétnom prípade budú webové prehliadače používať na prístup k zdrojom poskytovaným odlišnými webovými servermi pripojenia HTTPS (S znamená pre zabezpečené).

SSL je potrebné na podporu troch hlavných princípov bezpečnosti informácií:

  • Šifrovanie: chrániť dátové prenosy medzi stranami
  • Overenie: uistite sa, že server, ku ktorému sa pripájame, je skutočne správny server
  • Integrita údajov: zaručiť, že požadované údaje sú skutočne doručené

Java poskytuje niekoľko bezpečnostných rozhraní API, ktoré pomáhajú vývojárom nadviazať bezpečné spojenie s klientom na príjem a odosielanie správ v šifrovanom formáte:

  • Rozšírenie Java Secure Socket (JSSE)
  • Java kryptografická architektúra (JCA)
  • Kryptografické rozšírenie Java (JCE)

V ďalších častiach si predstavíme rozšírenie Secure Socket Extension, ktoré Java používa na zabezpečenie zabezpečenej komunikácie.

3. JSSE API

Bezpečnostné API Java využívajú Továreň rozsiahly návrhový vzor.

V skutočnosti je všetko inštancované pomocou továrne v JSSE.

3.1. SSLSocketFactory

The javax.net.ssl.SSLSocketFactory sa používa na vytváranie SSLSocket predmety.

Táto trieda obsahuje tri skupiny rozhraní API.

Prvú skupinu tvorí jedna statická getDefault () metóda použitá na získanie predvolenej inštancie, ktorú môže naopak vytvoriť SSLSocket inštancie.

Druhá skupina pozostáva z piatich metód, ktoré je možné použiť na tvorbu SSLSocket prípady:

  • Socket createSocket (reťazec hostiteľa, int port)
  • Socket createSocket (reťazec hostiteľa, int port, InetAddress clientHost, int clientPort)
  • Socket createSocket (hostiteľ InetAddress, int port)
  • Socket createSocket (hostiteľ InetAddress, int port, InetAddress clientHost, int clientPort)
  • Socket createSocket (Socket socket, String host, int port, boolean autoClose)

Túto triedu môžeme použiť priamo získaním predvolenej inštancie alebo použitím a javax.net.ssl.Objekt SSLContext, ktorý obsahuje metódy na získanie súboru SSLSocketFactory inštancia.

3.2. SSLSocket

Táto trieda rozširuje Zásuvka triedy a poskytuje bezpečnú zásuvku. Takéto zásuvky sú bežné prúdové zásuvky.

Okrem toho pridávajú vrstvu bezpečnostnej ochrany cez základný sieťový transportný protokol.

SSLSocket inštancie vytvárajú pripojenie SSL k pomenovanému hostiteľovi na zadanom porte.

To umožňuje viazať klientsku stranu pripojenia na danú adresu a port.

3.3. SSLServerSocketFactory

The SSLServerSocketFactory trieda je dosť podobná SSLSocketFactory s tým rozdielom, ktorý vytvára SSLServerSocket inštancie namiesto SSLSocket inštancie.

Podobnosťou sa metódy nazývajú createServerSocket analogicky k SSLSocketFactory trieda.

3.4. SSLServerSocket

The SSLServerSocket trieda je obdobou SSLSocket trieda. Metódy v triede SSLServerSocket sú podmnožinou súboru SSLSocket triedne metódy. Pôsobia na opačnej strane ako pripojenie SSL

4. Príklad SSL

Uveďme príklad, ako môžeme vytvoriť zabezpečené pripojenie k serveru:

Reťazec hostiteľ = getHost (...); Celé číslo port = getPort (...); SSLSocketFactory sslsocketfactory = SSLSocketFactory.getDefault (); SSLSocket sslsocket = (SSLSocket) sslsocketfactory .createSocket (hostiteľ, port); InputStream in = sslsocket.getInputStream (); Výstup OutStream = sslsocket.getOutputStream (); vypísať (1); while (in.available ()> 0) {System.out.print (in.read ()); } System.out.println ("Zabezpečené pripojenie bolo úspešne vykonané"); 

Pre prípad, že by sme dostali chybu „Javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: budova cesty PKIX zlyhala: sun.security.provider.certpath.SunCertPathBuilderException: pri nadviazaní spojenia SSL sa nepodarilo nájsť platnú certifikačnú cestu k požadovanému cieľu“, znamená to, že nemáme verejný certifikát servera, ktorý sa pokúšame pripojiť v dôveryhodnom úložisku Java.

Truststore je súbor obsahujúci dôveryhodné certifikáty, ktoré Java používa na validáciu zabezpečených pripojení.

Na vyriešenie tohto problému máme niekoľko možností:

  • pridať verejný certifikát servera k predvolenému cacerts truststore používa Java. pri vytváraní spojenia SSL
  • Nastavte javax.net.ssl.trustStore premenná prostredia, ktorá ukazuje na súbor dôveryhodného úložiska, aby aplikácia mohla vyzdvihnúť tento súbor, ktorý obsahuje verejný certifikát servera, ku ktorému sa pripájame.

Kroky na inštaláciu nového certifikátu do predvoleného úložiska dôveryhodnosti Java sú:

  1. výpis cert zo servera: openssl s_client -pripojiť server: 443
  2. importovať certifikát do skladu dôvery pomocou nástroja na kľúč: keytool -import -alias alias.server.com -keystore $ JAVA_HOME / jre / lib / security / cacerts

Keď to urobíme, mali by sme byť schopní znovu spustiť príklad a získať Zabezpečené pripojenie bolo úspešne vykonané správa.

5. Záver

V tomto článku sme predstavili SSL a JSSE API, ktoré implementujú SSL pre Javu. Použitím SSL a JSSE môžeme zvýšiť bezpečnosť našich aplikácií Java a komunikáciu medzi aplikáciami a v ich vnútri.

Ako vždy, kód uvedený v tomto článku je k dispozícii na stránkach Github.

Java dole

Práve som oznámil nové Naučte sa jar kurz zameraný na základy jari 5 a Spring Boot 2:

>> SKONTROLUJTE KURZ

$config[zx-auto] not found$config[zx-overlay] not found