Nabavite popis pouzdanih certifikata na Javi

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 brzom vodiču naučit ćemo kako čitati popis pouzdanih certifikata u Javi kroz brze i praktične primjere.

2. Učitavanje datoteke KeyStore

Java pohranjuje pouzdane certifikate u posebnu datoteku s imenom cacerts koji živi u našoj instalacijskoj mapi Java.

Počnimo s čitanjem ove datoteke i učitavanjem u KeyStore:

private KeyStore loadKeyStore () {String relativeCacertsPath = "/lib/security/cacerts".replace("/", File.separator); Niz datoteke: = System.getProperty ("java.home") + relativeCacertsPath; FileInputStream je = novi FileInputStream (naziv datoteke); KeyStore keystore = KeyStore.getInstance (KeyStore.getDefaultType ()); Lozinka niza = "changeit"; keystore.load (is, password.toCharArray ()); vratiti pohranu ključeva; }

Zadana lozinka za ovo KeyStore je "promijeni to", ali moglo bi biti drugačije ako je prethodno bio promijenjen u našem sustavu.

Jednom učitan, KeyStore imat će naše pouzdane certifikate, a zatim ćemo vidjeti kako ih čitati.

3. Čitanje potvrda s određenog KeyStore

Koristit ćemo PKIXParametri razreda, koji traje a KeyStore kao parametar konstruktora:

@Test public void whenLoadingCacertsKeyStore_thenCertificatesArePresent () {KeyStore keyStore = loadKeyStore (); PKIXParameters params = novi PKIXParameters (keyStore); Postavi trustAnchors = params.getTrustAnchors (); Popis certifikata = trustAnchors.stream () .map (TrustAnchor :: getTrustedCert) .collect (Collectors.toList ()); assertFalse (certifikati.isEmpty ()); }

The PKIXParametri klasa obično se koristi za provjeru valjanosti certifikata, ali u našem smo je primjeru jednostavno iskoristili za izdvajanje certifikata iz našeg KeyStore.

Prilikom izrade instance PKIXParametri, gradi popis TrustAnchor koji će sadržavati pouzdane certifikate prisutne u našem KeyStore.

A TrustAnchor instanca jednostavno predstavlja pouzdani certifikat.

4. Čitanje potvrda iz zadanog KeyStore

Popis pouzdanih certifikata prisutnih u našem sustavu također možemo dobiti do koristiti TrustManagerFactory klase i inicijalizira ga bez a KeyStore, koji će koristiti zadani KeyStore.

Ako ne pružimo a KeyStore izričito će se prema zadanim postavkama koristiti isti iz prethodnog poglavlja:

@Test public void whenLoadingDefaultKeyStore_thenCertificatesArePresent () {TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance (TrustManagerFactory.getDefaultAlgorithm ()); trustManagerFactory.init ((KeyStore) null); Popis trustManagers = Arrays.asList (trustManagerFactory.getTrustManagers ()); Popis certifikata = trustManagers.stream () .filter (X509TrustManager.class :: isInstance) .map (X509TrustManager.class :: cast) .map (trustManager -> Arrays.asList (trustManager.getAcceptedIssuers ())) .flatMap (Collection: : stream) .collect (Collectors.toList ()); assertFalse (certifikati.isEmpty ()); }

U gornjem smo primjeru koristili X509TrustManager, koja je specijalizirana TrustManager koristi se za provjeru autentičnosti udaljenog dijela SSL veze.

Imajte na umu da ovo ponašanje može ovisiti o specifičnoj implementaciji JDK, jer specifikacija ne definira što bi se trebalo dogoditi u slučaju u tome()KeyStore parametar je null.

5. Pseudonimi certifikata

Alias ​​certifikata jednostavno je Niz koji jedinstveno identificira certifikat.

Među zadanim certifikatima koje je uvezla Java, tu je i dobro poznati certifikat izdan od strane GoDaddy, javnog registra internetske domene, koji ćemo koristiti u našim testovima:

Niz GODADDY_CA_ALIAS = "godaddyrootg2ca [jdk]";

Pogledajmo kako možemo pročitati sve pseudonime certifikata prisutne u našem KeyStore:

@Test public void whenLoadingKeyStore_thenGoDaddyCALabelIsPresent () {KeyStore keyStore = loadKeyStore (); Nabrajanje aliasEnumeration = keyStore.aliases (); Popis aliasa = Collections.list (aliasEnumeration); assertTrue (aliases.contens (GODADDY_CA_ALIAS)); }

U sljedećem ćemo primjeru vidjeti kako možemo dohvatiti certifikat pomoću njegovog pseudonima:

@Test public void whenLoadingKeyStore_thenGoDaddyCertificateIsPresent () {KeyStore keyStore = loadKeyStore (); Potvrda goDaddyCertificate = keyStore.getCertificate (GODADDY_CA_ALIAS); assertNotNull (goDaddyCertificate); }

6. Zaključak

U ovom kratkom članku pregledali smo različite načine uvrštavanja pouzdanih certifikata u Javu kroz brze i praktične primjere.

Kao i uvijek, isječke koda možete pronaći na GitHubu.

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

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