Forskjellen mellom en Java Keystore og en Truststore

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 raske artikkelen vil vi gi en oversikt over forskjellene mellom en Java keystore og en Java truststore.

2. Konsepter

I de fleste tilfeller, vi bruker en keystore og en truststore når applikasjonen vår trenger å kommunisere over SSL / TLS.

Vanligvis er dette passordbeskyttede filer som sitter i samme filsystem som vårt kjørende program. Standardformatet som brukes for disse filene er JKS til Java 8.

Siden Java 9, skjønt, standard nøkkelbutikkformat er PKCS12. Den største forskjellen mellom JKS og PKCS12 er at JKS er et format spesifikt for Java, mens PKCS12 er en standardisert og språknøytral måte å lagre krypterte private nøkler og sertifikater på.

3. Java KeyStore

En Java-nøkkelbutikk lagrer private nøkkeloppføringer, sertifikater med offentlige nøkler eller bare hemmelige nøkler som vi kan bruke til forskjellige kryptografiske formål. Den lagrer hver av et alias for enkel oppslag.

Generelt sett har nøkkelbutikker nøkler som applikasjonen vår eier, som vi kan bruke til å bevise integriteten til en melding og ektheten til avsenderen, for eksempel ved å signere nyttelaster.

Som oftest, vi bruker en nøkkelbutikk når vi er en server og vil bruke HTTPS. Under et SSL-håndtrykk, ser serveren opp den private nøkkelen fra nøkkelbutikken og presenterer sin tilhørende offentlige nøkkel og sertifikat for klienten.

Tilsvarende, hvis klienten også trenger å autentisere seg selv - en situasjon som kalles gjensidig autentisering - så har klienten også en nøkkelbutikk og presenterer også sin offentlige nøkkel og sertifikat.

Det er ingen standard nøkkelbutikk, så hvis vi vil bruke en kryptert kanal, må vi angi javax.net.ssl.keyStore og javax.net.ssl.keyStorePassword. Hvis keystore-formatet vårt er annerledes enn standard, kan vi bruke det javax.net.ssl.keyStoreType for å tilpasse det.

Selvfølgelig kan vi bruke disse nøklene til å betjene andre behov også. Private nøkler kan signere eller dekryptere data, og offentlige nøkler kan bekrefte eller kryptere data. Hemmelige nøkler kan også utføre disse funksjonene. En nøkkelbutikk er et sted vi kan holde på disse nøklene.

Vi kan også samhandle med nøkkelbutikken programmatisk.

4. Java TrustStore

En truststore er det motsatte - mens en keystore vanligvis holder på sertifikater som identifiserer oss, holder en truststore på sertifikater som identifiserer andre.

I Java bruker vi den til å stole på tredjeparten vi skal kommunisere med.

Ta vårt tidligere eksempel. Hvis en klient snakker med en Java-basert server over HTTPS, vil serveren slå opp den tilknyttede nøkkelen fra nøkkelbutikken og presentere den offentlige nøkkelen og sertifikatet for klienten.

Vi, klienten, slår deretter opp det tilknyttede sertifikatet i vår tillitsbutikk. Hvis sertifikatet eller sertifikatmyndighetene som presenteres av den eksterne serveren ikke er i vår tillitsbutikk, får vi et SSLHandshakeException og tilkoblingen blir ikke konfigurert.

Java har samlet en tillitsbutikk kalt cacerts og den ligger i $ JAVA_HOME / jre / lib / sikkerhet katalog.

Den inneholder standard, klarerte sertifikatmyndigheter:

$ keytool -list -keystore cacerts Angi passord for keystore: Keystore-type: JKS Keystore-leverandør: SUN Keystore inneholder 92 oppføringer verisignclass2g2ca [jdk], 2018-06-13, trustedCertEntry, Certificate fingerprint (SHA1): B3: EA: C4: 47 : 76: C9: C8: 1C: EA: F2: 9D: 95: B6: CC: A0: 08: 1B: 67: EC: 9D

Vi ser her at tillitsbutikken inneholder 92 klarerte sertifikatoppføringer, og en av oppføringene er verisignclass2gca inngang. Dette betyr at JVM automatisk vil stole på sertifikater signert av verisignclass2g2ca.

Her, vi kan overstyre standard truststore-plassering via javax.net.ssl.trustStore eiendom. På samme måte kan vi stille javax.net.ssl.trustStorePassword og javax.net.ssl.trustStoreType for å spesifisere tillitsbutikkens passord og type.

5. Konklusjon

I denne opplæringen diskuterte vi hovedforskjellene mellom Java keystore og Java truststore og dens formål.

Vi viste også hvordan standardene kan overstyres med systemegenskaper.

Deretter kan vi ta en titt på følgende SSL-guide eller JSSE Reference Guide for å lære mer informasjon om kryptert kommunikasjon i Java.

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