Razlika između Java Keystore i Truststore

Java Top

Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:

>> PROVJERITE TEČAJ

1. Pregled

U ovom kratkom članku pružit ćemo pregled razlika između Java Keystore i Java truststore.

2. Pojmovi

U većini slučajeva, pohranu ključeva i pohranu koristimo kada naša aplikacija treba komunicirati putem SSL / TLS-a.

To su obično datoteke zaštićene lozinkom koje se nalaze u istom sustavu datoteka kao i naša pokrenuta aplikacija. Zadani format koji se koristi za ove datoteke je JKS do Jave 8.

Ipak, od Jave 9, zadani format pohrane ključeva je PKCS12. Najveća razlika između JKS i PKCS12 je u tome što je JKS format specifičan za Javu, dok je PKCS12 standardizirani i jezično neutralan način pohrane šifriranih privatnih ključeva i certifikata.

3. Java KeyStore

Java pohrana ključeva pohranjuje unose privatnih ključeva, potvrde s javnim ključevima ili samo tajne ključeve koje možemo koristiti u razne kriptografske svrhe. Svakog pohranjuje zamjenskim imenom radi lakšeg pretraživanja.

Općenito govoreći, pohrane ključeva drže ključeve koje posjeduje naša aplikacija i pomoću kojih možemo dokazati cjelovitost poruke i autentičnost pošiljatelja, recimo potpisivanjem tereta.

Obično, koristit ćemo pohranu ključeva kad smo poslužitelj i želimo koristiti HTTPS. Tijekom SSL rukovanja, poslužitelj traži privatni ključ iz pohrane ključeva i klijentu predstavlja njegov odgovarajući javni ključ i certifikat.

Sukladno tome, ako klijent također treba sam sebe ovjeriti - situacija koja se naziva međusobna provjera autentičnosti - tada klijent također ima pohranu ključeva i također predstavlja svoj javni ključ i certifikat.

Ne postoji zadana pohrana ključeva, pa ako želimo koristiti šifrirani kanal, morat ćemo postaviti javax.net.ssl.keyStore i javax.net.ssl.keyStorePassword. Ako se naš format pohrane ključeva razlikuje od zadanog, mogli bismo koristiti javax.net.ssl.keyStoreType da ga prilagodite.

Naravno, ove tipke možemo koristiti i za servisiranje drugih potreba. Privatni ključevi mogu potpisati ili dešifrirati podatke, a javni ključevi mogu provjeriti ili šifrirati podatke. Tajne tipke mogu obavljati i ove funkcije. Trgovina ključeva mjesto je na koje možemo držati ove tipke.

Također možemo programski komunicirati s pohranom ključeva.

4. Java TrustStore

Skladište pouzdanosti je suprotno - dok se spremište ključeva obično drži certifikata koji nas identificiraju, skladište povjerenja drži certifikate koji identificiraju druge.

U Javi ga koristimo za vjerovanje trećoj strani s kojom ćemo komunicirati.

Uzmimo naš raniji primjer. Ako klijent razgovara s Java poslužiteljem putem HTTPS-a, poslužitelj će potražiti pridruženi ključ iz svoje pohrane ključeva i predstaviti javni ključ i certifikat klijentu.

Mi, klijent, zatim potražimo pridruženi certifikat u našoj trgovini povjerenja. Ako certifikat ili tijela za izdavanje certifikata koja je predstavio vanjski poslužitelj nisu u našoj trgovini povjerenja, dobit ćemo SSLHandshakeException i veza se neće uspješno postaviti.

Java je spojila trgovinu povjerenja pod nazivom cacerts a nalazi se u $ JAVA_HOME / jre / lib / security imenik.

Sadrži zadana, pouzdana tijela za izdavanje certifikata:

$ keytool -list -keystore cacerts Unesite lozinku pohrane ključeva: Tip pohrane ključeva: JKS Davatelj pohrane ključeva: SUN Vaša pohrana ključeva sadrži 92 unosa verisignclass2g2ca [jdk], 2018-06-13, trustedCertEntry, otisak prsta certifikata (SHA1): B3: EA: C4: 47 : 76: C9: C8: 1C: EA: F2: 9D: 95: B6: CC: A0: 08: 1B: 67: EC: 9D

Ovdje vidimo da trgovina povjerenja sadrži 92 unosa pouzdanih certifikata, a jedan od unosa je verisignclass2gca ulazak. To znači da će JVM automatski vjerovati certifikatima potpisanim od verisignclass2g2ca.

Ovdje, možemo nadjačati zadanu lokaciju trgovine povjerenja putem javax.net.ssl.trustStore imovine. Slično tome, možemo postaviti javax.net.ssl.trustStorePassword i javax.net.ssl.trustStoreType kako biste odredili lozinku i vrstu povjerenja.

5. Zaključak

U ovom uputstvu raspravljali smo o glavnim razlikama između Java Keystore i Java truststore i njegove svrhe.

Također smo pokazali kako se zadane vrijednosti mogu nadjačati svojstvima sustava.

Dalje, mogli bismo pogledati sljedeći SSL vodič ili JSSE referentni vodič kako bismo saznali više detalja o šifriranoj komunikaciji u Javi.

Dno Java

Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:

>> PROVJERITE TEČAJ