Nabavite popis pouzdanih certifikata na Javi
Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:
>> PROVJERITE TEČAJ1. 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