Získajte zoznam dôveryhodných certifikátov v Jave

Java Top

Práve som oznámil nové Naučte sa jar kurz zameraný na základy jari 5 a Spring Boot 2:

>> SKONTROLUJTE KURZ

1. Prehľad

V tomto rýchlom výučbe sa naučíme, ako čítať zoznam dôveryhodných certifikátov v Jave prostredníctvom rýchlych a praktických príkladov.

2. Načítanie KeyStore

Java ukladá dôveryhodné certifikáty do špeciálneho súboru s názvom cacerts ktorý žije v našom inštalačnom priečinku Java.

Začnime tým, že si prečítame tento súbor a načítame ho do KeyStore:

private KeyStore loadKeyStore () {String relativeCacertsPath = "/lib/security/cacerts".replace("/", File.separator); Reťazec názov súboru = System.getProperty ("java.home") + relativeCacertsPath; FileInputStream je = nový FileInputStream (názov súboru); Úložisko kľúčov KeyStore = KeyStore.getInstance (KeyStore.getDefaultType ()); Reťazcové heslo = "changeit"; keystore.load (is, password.toCharArray ()); návratový sklad kľúčov; }

Predvolené heslo KeyStore je "Zmeň to", ale mohlo by to byť iné, ak by to bolo predtým zmenené v našom systéme.

Po načítaní sa KeyStore bude obsahovať naše dôveryhodné certifikáty a potom uvidíme, ako si ich prečítať.

3. Čítanie certifikátov od zadaného KeyStore

Budeme používať PKIXParametre triedy, ktorá trvá a KeyStore ako parameter konštruktora:

@Test public void whenLoadingCacertsKeyStore_thenCertificatesArePresent () {KeyStore keyStore = loadKeyStore (); Parametre PKIXParameters = nové PKIXParameters (keyStore); Nastaviť trustAnchors = params.getTrustAnchors (); Zoznam certifikátov = trustAnchors.stream () .map (TrustAnchor :: getTrustedCert) .collect (Collectors.toList ()); assertFalse (certificates.isEmpty ()); }

The PKIXParametre triedy sa zvyčajne používa na validáciu certifikátu, ale v našom príklade sme ju jednoducho použili na získanie certifikátov z našej KeyStore.

Pri vytváraní inštancie PKIXParametrs, vytvára zoznam TrustAnchor ktoré budú obsahovať dôveryhodné certifikáty prítomné v našom KeyStore.

A TrustAnchor inštancia jednoducho predstavuje dôveryhodný certifikát.

4. Čítanie certifikátov z predvoleného nastavenia KeyStore

Zoznam dôveryhodných certifikátov nachádzajúcich sa v našom systéme tiež môžeme získať do pomocou TrustManagerFactory triedy a jeho inicializáciu bez a KeyStore, ktorý použije predvolené nastavenie KeyStore.

Ak neposkytneme a KeyStore explicitne sa predvolene použije rovnaká z predchádzajúcej kapitoly:

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

Vo vyššie uvedenom príklade sme použili X509TrustManager, ktorá je špecializovaná TrustManager slúži na autentifikáciu vzdialenej časti SSL spojenia.

Toto správanie môže závisieť od konkrétnej implementácie JDK, pretože špecifikácia nedefinuje, čo by sa malo stať v prípade init ()KeyStore parameter je nulový.

5. Aliasy certifikátov

Alias ​​certifikátu je jednoducho a String ktorý jednoznačne identifikuje certifikát.

Medzi predvolenými certifikátmi importovanými z Javy je aj známy certifikát vydaný GoDaddy, verejným registrátorom internetových domén, ktorý použijeme pri našich testoch:

Reťazec GODADDY_CA_ALIAS = "godaddyrootg2ca [jdk]";

Pozrime sa, ako môžeme prečítať všetky aliasy certifikátov, ktoré sa nachádzajú v našom KeyStore:

@Test public void whenLoadingKeyStore_thenGoDaddyCALabelIsPresent () {KeyStore keyStore = loadKeyStore (); Výčet aliasEnumeration = keyStore.aliases (); Zoznam aliasov = Collections.list (aliasEnumeration); assertTrue (aliases.contains (GODADDY_CA_ALIAS)); }

V nasledujúcom príklade uvidíme, ako môžeme získať certifikát podľa jeho aliasu:

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

6. Záver

V tomto rýchlom článku sme sa pozreli na rôzne spôsoby výpisu dôveryhodných certifikátov v Jave prostredníctvom rýchlych a praktických príkladov.

Útržky kódu ako vždy nájdete na GitHub.

Java dole

Práve som oznámil nové Naučte sa jar kurz zameraný na základy jari 5 a Spring Boot 2:

>> SKONTROLUJTE KURZ

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