Introduksjon til SSL i Java

Java Top

Jeg kunngjorde nettopp det nye Lær våren kurs, med fokus på det grunnleggende i vår 5 og vårstøvel 2:

>> KONTROLLER KURSET

1. Oversikt

I denne opplæringen vil vi introdusere SSL og utforske hvordan vi kan bruke den i Java ved hjelp av JSSE (Java Secure Socket Extension) API.

2. Introduksjon

Enkelt sagt, den Secured Socket Layer (SSL) muliggjør en sikret forbindelse mellom to parter, vanligvis klienter og servere.

SSL sørger for en sikker kanal mellom to enheter som opererer over en nettverkstilkobling. Et vanlig eksempel for SSL er å aktivere sikker kommunikasjon mellom nettlesere og webservere.

I dette spesifikke tilfellet vil nettlesere bruke HTTPS-forbindelser (står for sikret) for å få tilgang til ressursene som leveres av forskjellige webservere.

SSL er nødvendig for å støtte de tre viktigste informasjonssikkerhetsprinsippene:

  • Kryptering: beskytte dataoverføringer mellom parter
  • Godkjenning: sørg for at serveren vi kobler til er den riktige serveren
  • Dataintegritet: garanterer at de forespurte dataene er det som faktisk leveres

Java tilbyr flere sikkerhetsbaserte API-er som hjelper utviklere med å etablere sikre forbindelser med klienten for å motta og sende meldinger i kryptert format:

  • Java Secured-Socket Extension (JSSE)
  • Java Cryptography Architecture (JCA)
  • Java Cryptographic Extension (JCE)

I de neste avsnittene introduserer vi Secure Socket Extension som Java bruker for å muliggjøre sikker kommunikasjon.

3. JSSE API

Java-sikkerhets-API-ene bruker Fabrikk designmønster omfattende.

Faktisk blir alt instantiert ved hjelp av en fabrikk i JSSE.

3.1. SSLSocketFactory

De javax.net.ssl.SSLSocketFactory brukes til å lage SSLSocket gjenstander.

Denne klassen inneholder tre grupper APIer.

Den første gruppen består av en enkelt statisk getDefault () metoden som brukes til å hente standardforekomsten som igjen kan opprette SSLSocket tilfeller.

Den andre gruppen består av fem metoder som kan brukes til å lage SSLSocket forekomster:

  • Socket createSocket (strengvert, int-port)
  • Socket createSocket (strengvert, int-port, InetAddress clientHost, int clientPort)
  • Socket createSocket (InetAddress-vert, int-port)
  • Socket createSocket (InetAddress-vert, int-port, InetAddress clientHost, int clientPort)
  • Stikkontakt createSocket (Stikkontakt, strengvert, int-port, boolsk autoClose)

Vi kan bruke denne klassen direkte ved å skaffe standardinstansen eller ved å bruke en javax.net.ssl.SSLContext-objekt som inneholder metoder for å få et SSLSocketFactory forekomst.

3.2. SSLSocket

Denne klassen utvider Stikkontakt klasse og gir sikker stikkontakt. Slike stikkontakter er vanlige strømuttak.

I tillegg legger de til et lag med sikkerhetsbeskyttelse over den underliggende nettverkstransportprotokollen.

SSLSocket forekomster konstruerer en SSL-tilkobling til en navngitt vert i en spesifisert port.

Dette gjør det mulig å binde klientsiden av forbindelsen til en gitt adresse og port.

3.3. SSLServerSocketFactory

De SSLServerSocketFactory klasse er ganske lik SSLSocketFactory med den forskjellen at det skaper SSLServerSocket tilfeller i stedet for SSLSocket tilfeller.

Etter likhet kalles metodene createServerSocket som analog med SSLSocketFactory klasse.

3.4. SSLServerSocket

De SSLServerSocket klassen er analog med SSLSocket klasse. Metodene på SSLServerSocket-klassen er en delmengde av SSLSocket klassemetoder. De handler på motsatt side av en SSL-tilkobling

4. SSL-eksempel

La oss gi et eksempel på hvordan vi kan opprette en sikret forbindelse til en server:

Strengvert = getHost (...); Heltalsport = getPort (...); SSLSocketFactory sslsocketfactory = SSLSocketFactory.getDefault (); SSLSocket sslsocket = (SSLSocket) sslsocketfactory .createSocket (vert, port); InputStream in = sslsocket.getInputStream (); OutputStream ut = sslsocket.getOutputStream (); out.write (1); mens (in.available ()> 0) {System.out.print (in.read ()); } System.out.println ("Sikret forbindelse utført vellykket"); 

I tilfelle vi får feilen “Javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: kunne ikke finne gyldig sertifiseringsbane til ønsket mål mens du opprettet SSL-tilkobling", det indikerer at vi ikke har det offentlige sertifikatet til serveren som vi prøver å koble til i Java truststore.

Truststore er filen som inneholder pålitelige sertifikater som Java bruker for å validere sikre tilkoblinger.

For å sortere dette problemet har vi flere alternativer:

  • legg til det offentlige sertifikatet til serveren til standard cacerts truststore brukt av Java. mens du setter i gang SSL-tilkoblingen
  • Sett javax.net.ssl.trustStore miljøvariabel for å peke på truststore-filen slik at applikasjonen kan hente den filen som inneholder det offentlige sertifikatet til serveren vi kobler til.

Trinnene for å installere et nytt sertifikat i Java standard tillitsbutikk er:

  1. pakke ut sertifikat fra serveren: openssl s_client -connect server: 443
  2. importer sertifikat til truststore ved hjelp av keytool: keytool -import -alias alias.server.com -keystore $ JAVA_HOME / jre / lib / security / cacerts

Når vi har gjort dette, bør vi kunne kjøre eksemplet igjen og få tak i Sikret tilkobling utført vellykket beskjed.

5. Konklusjon

I denne artikkelen introduserte vi SSL og JSSE API, som implementerer SSL for Java. Ved å bruke SSL og JSSE kan vi gjøre Java-applikasjonene våre og kommunikasjonen mellom applikasjoner og inne i applikasjonen tryggere.

Som alltid er koden presentert i denne artikkelen tilgjengelig på Github.

Java bunn

Jeg kunngjorde nettopp det nye Lær våren kurs, med fokus på det grunnleggende i vår 5 og vårstøvel 2:

>> KONTROLLER KURSET

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