Forskellen mellem en Java Keystore og en Truststore

Java Top

Jeg har lige annonceret det nye Lær foråret kursus med fokus på det grundlæggende i Spring 5 og Spring Boot 2:

>> KONTROLLER KURSEN

1. Oversigt

I denne hurtige artikel giver vi en oversigt over forskellene mellem en Java keystore og en Java truststore.

2. Begreber

I de fleste tilfælde, vi bruger en keystore og en truststore, når vores applikation skal kommunikere via SSL / TLS.

Normalt er disse adgangskodebeskyttede filer, der sidder på det samme filsystem som vores kørende applikation. Standardformatet, der bruges til disse filer, er JKS indtil Java 8.

Siden Java 9 dog standard keystore-formatet er PKCS12. Den største forskel mellem JKS og PKCS12 er, at JKS er et format specifikt for Java, mens PKCS12 er en standardiseret og sprogneutral måde at lagre krypterede private nøgler og certifikater på.

3. Java KeyStore

En Java-nøglelager gemmer private nøgleposter, certifikater med offentlige nøgler eller bare hemmelige nøgler som vi kan bruge til forskellige kryptografiske formål. Den gemmer hver efter et alias for nem opslag.

Generelt har keystores nøgler, som vores applikation ejer, som vi kan bruge til at bevise integritet af en besked og ægtheden af ​​afsenderen, f.eks. Ved at underskrive nyttelast.

Som regel, vi bruger en keystore, når vi er en server og vil bruge HTTPS. Under et SSL-håndtryk ser serveren den private nøgle op fra nøglelageret og præsenterer sin tilsvarende offentlige nøgle og certifikat for klienten.

Tilsvarende, hvis klienten også har brug for at godkende sig selv - en situation kaldet gensidig godkendelse - så har klienten også en nøglelager og præsenterer også sin offentlige nøgle og certifikat.

Der er ingen standard nøglelager, så hvis vi vil bruge en krypteret kanal, bliver vi nødt til at indstille javax.net.ssl.keyStore og javax.net.ssl.keyStorePassword. Hvis vores keystore-format er anderledes end standard, kan vi bruge det javax.net.ssl.keyStoreType for at tilpasse det.

Selvfølgelig kan vi også bruge disse nøgler til at imødekomme andre behov. Private nøgler kan underskrive eller dekryptere data, og offentlige nøgler kan verificere eller kryptere data. Hemmelige nøgler kan også udføre disse funktioner. En nøglelager er et sted, hvor vi kan holde fast i disse nøgler.

Vi kan også interagere med keystore programmatisk.

4. Java TrustStore

En truststore er det modsatte - mens en keystore typisk holder på certifikater, der identificerer os, holder en truststore certifikater, der identificerer andre.

I Java bruger vi det til at stole på den tredjepart, vi er ved at kommunikere med.

Tag vores tidligere eksempel. Hvis en klient taler til en Java-baseret server via HTTPS, ser serveren den tilknyttede nøgle op fra dens nøglelager og præsenterer den offentlige nøgle og certifikat for klienten.

Vi, klienten, ser derefter det tilknyttede certifikat op i vores tillidsbutik. Hvis certifikatet eller certifikatmyndighederne, der præsenteres af den eksterne server ikke er i vores tillidsbutik, får vi et SSLHandshakeException og forbindelsen oprettes ikke med succes.

Java har samlet en kaldet tillidsbutik cacerts og det er bosat i $ JAVA_HOME / jre / lib / sikkerhed vejviser.

Den indeholder standard tillid til certifikatmyndigheder:

$ keytool -list -keystore cacerts Indtast kodeord til kodeord: Keystore-type: JKS Keystore-udbyder: SUN Din keystore indeholder 92 poster 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 truststore indeholder 92 betroede certifikatposter, og en af ​​posterne er verisignclass2gca indgang. Dette betyder, at JVM automatisk stoler på certifikater underskrevet af verisignclass2g2ca.

Her, vi kan tilsidesætte standard truststore-placeringen via javax.net.ssl.trustStore ejendom. På samme måde kan vi indstille javax.net.ssl.trustStorePassword og javax.net.ssl.trustStoreType for at specificere truststores adgangskode og type.

5. Konklusion

I denne vejledning diskuterede vi de vigtigste forskelle mellem Java keystore og Java truststore og dets formål.

Vi viste også, hvordan standardindstillingerne kan tilsidesættes med systemegenskaber.

Dernæst kunne vi se på følgende SSL-guide eller JSSE Reference Guide for at lære flere detaljer om krypteret kommunikation i Java.

Java bund

Jeg har lige annonceret det nye Lær foråret kursus med fokus på det grundlæggende i Spring 5 og Spring Boot 2:

>> KONTROLLER KURSEN

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