Bevezetés az Java SSL-be

Java Top

Most jelentettem be az újat Tanulj tavaszt tanfolyam, amelynek középpontjában az 5. tavasz és a tavaszi bakancs 2 alapjai állnak:

>> ELLENŐRIZZE A FOLYAMATOT

1. Áttekintés

Ebben az oktatóanyagban bemutatjuk az SSL-t, és feltárjuk, hogyan használhatjuk a Java-ban a JSSE (Java Secure Socket Extension) API használatával.

2. Bevezetés

Egyszerűen fogalmazva: Biztonságos Socket Layer (SSL) lehetővé teszi a biztonságos kapcsolatot két fél között, általában kliensek és szerverek.

Az SSL biztonságos csatornát biztosít két hálózati kapcsolaton keresztül működő eszköz között. Az SSL egyik szokásos példája a biztonságos kommunikáció engedélyezése a böngészők és a webszerverek között.

Ebben a konkrét esetben a webböngészők a különálló webszerverek által biztosított erőforrásokhoz való hozzáféréshez HTTPS (Secure Secured) kapcsolatot használnak.

Az SSL szükséges a három fő információbiztonsági elv támogatásához:

  • Titkosítás: a felek közötti adatátvitel védelme
  • Hitelesítés: győződjön meg arról, hogy a szerver, amelyhez csatlakozunk, valóban a megfelelő szerver
  • Az adatok integritása: garantáljuk, hogy a kért adatokat ténylegesen átadják

A Java számos biztonsági alapú API-t kínál, amelyek segítenek a fejlesztőknek biztonságos kapcsolatok kialakításában az ügyféllel az üzenetek titkosított formátumban történő fogadásához és küldéséhez:

  • Java Secure-Socket kiterjesztés (JSSE)
  • Java titkosítási architektúra (JCA)
  • Java kriptográfiai kiterjesztés (JCE)

A következő szakaszokban bemutatjuk a Secure Socket kiterjesztést, amelyet a Java használ a biztonságos kommunikáció engedélyezéséhez.

3. JSSE API

A Java biztonsági API-k a Gyár tervezési minta széles körben.

Valójában mindent a JSSE gyárának segítségével állítanak elő.

3.1. SSLSocketFactory

A javax.net.ssl.SSLSocketFactory létrehozására használják SSLSocket tárgyakat.

Ez az osztály három API-t tartalmaz.

Az első csoport egyetlen statikusból áll getDefault () az alapértelmezett példány lekérésére használt módszer, amelyet viszont létrehozhat SSLSocket példányok.

A második csoport öt módszerből áll, amelyek felhasználhatók a létrehozásra SSLSocket példányok:

  • Socket createSocket (String gazdagép, int port)
  • Socket createSocket (String gazdagép, int port, InetAddress clientHost, int clientPort)
  • Socket createSocket (InetAddress gazdagép, int port)
  • Socket createSocket (InetAddress gazdagép, int port, InetAddress clientHost, int clientPort)
  • Socket createSocket (Socket foglalat, String gazdagép, int port, logikai autoClose)

Ezt az osztályt közvetlenül használhatjuk az alapértelmezett példány megszerzésével vagy az a használatával javax.net.ssl.SSLContext objektum, amely metódusokat tartalmaz egy SSLSocketFactory példa.

3.2. SSLSocket

Ez az osztály kiterjeszti a Foglalat osztályú és biztonságos aljzatot biztosít. Az ilyen aljzatok normál patak aljzatok.

Ezen felül hozzáadnak egy védelmi réteget az alapul szolgáló hálózati szállítási protokollhoz.

SSLSocket példányok létrehoznak egy SSL kapcsolatot egy megnevezett állomással egy megadott porton.

Ez lehetővé teszi a kapcsolat kliens oldalának egy adott címhez és porthoz való kötését.

3.3. SSLServerSocketFactory

A SSLServerSocketFactory osztály egészen hasonló a SSLSocketFactory azzal a különbséggel, amelyet létrehoz SSLServerSocket esetek helyett SSLSocket példányok.

A hasonlóság szerint a módszereket hívjuk createServerSocket mint analóg SSLSocketFactory osztály.

3.4. SSLServerSocket

A SSLServerSocket osztály analóg a SSLSocket osztály. Az SSLServerSocket osztály metódusai a SSLSocket osztályos módszerek. Az SSL-kapcsolat másik oldalán működnek

4. SSL példa

Mondjunk példát arra, hogyan hozhatunk létre biztonságos kapcsolatot egy kiszolgálóval:

Karaktersorozat = getHost (...); Egész port = getPort (...); SSLSocketFactory sslsocketfactory = SSLSocketFactory.getDefault (); SSLSocket sslsocket = (SSLSocket) ssocketlejátszó .createSocket (gazdagép, port); InputStream in = sslsocket.getInputStream (); OutputStream out = sslsocket.getOutputStream (); out.write (1); while (in.available ()> 0) {System.out.print (in.read ()); } System.out.println ("A biztonságos kapcsolat sikeresen végrehajtva"); 

Ha megkapjuk a hibát „Javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: A PKIX elérési útjának meghiúsulása: sun.security.provider.certpath.SunCertPathBuilderException: nem talál érvényes hitelesítési útvonalat a kért célhoz az SSL-kapcsolat létrehozása közben.”, azt jelzi, hogy nincs meg annak a szervernek a nyilvános tanúsítványa, amelyet megpróbálunk összekapcsolni a Java Truststore-ban.

A truststore az a fájl, amely megbízható tanúsítványokat tartalmaz, amelyeket a Java a biztonságos kapcsolatok érvényesítéséhez használ.

A probléma rendezése érdekében számos lehetőségünk van:

  • adja hozzá a kiszolgáló nyilvános tanúsítványát az alapértelmezetthez kaktuszok vagyonkezelő Java által használt. miközben elindítja az SSL kapcsolatot
  • Állítsa be a javax.net fájlt.ssl.trustStore környezeti változó, hogy a Truststore fájlra mutasson, hogy az alkalmazás felvegye azt a fájlt, amely tartalmazza a szerver nyilvános tanúsítványát, amelyhez kapcsolódunk.

Az új tanúsítvány telepítésének lépései a Java alapértelmezett megbízhatósági üzletébe a következők:

  1. kivonat cert a szerverről: openssl s_client -csatlakozó szerver: 443
  2. importálja a tanúsítványt a TrustStore-ba a kulcseszköz használatával: keytool -import -alias alias.server.com -keystore $ JAVA_HOME / jre / lib / security / cacerts

Miután ezt megtettük, képesnek kell lennünk arra, hogy újra futtassuk a példát, és megszerezzük a A biztonságos kapcsolat sikeresen teljesült üzenet.

5. Következtetés

Ebben a cikkben bemutattuk az SSL és a JSSE API-t, amelyek implementálják az SSL-t a Java számára. Az SSL és a JSSE használatával biztonságosabbá tehetjük Java alkalmazásainkat, valamint az alkalmazások közötti és az alkalmazáson belüli kommunikációt.

Mint mindig, az ebben a cikkben bemutatott kód elérhető a Github oldalon.

Java alsó

Most jelentettem be az újat Tanulj tavaszt tanfolyam, amelynek középpontjában az 5. tavasz és a tavaszi bakancs 2 alapjai állnak:

>> ELLENŐRIZZE A FOLYAMATOT

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