Få en liste over klarerte sertifikater i Java

Java Top

Jeg kunngjorde nettopp det nye Lær våren kurs, med fokus på det grunnleggende i vår 5 og vårstøvel 2:

>> KONTROLLER KURSET

1. Oversikt

I denne raske opplæringen lærer vi hvordan du leser en liste over pålitelige sertifikater i Java gjennom raske og praktiske eksempler.

2. Laster inn KeyStore

Java lagrer de pålitelige sertifikatene i en spesiell fil som heter cacerts som bor i Java-installasjonsmappen vår.

La oss starte med å lese denne filen og laste den inn i KeyStore:

privat KeyStore loadKeyStore () {String relativeCacertsPath = "/lib/security/cacerts".replace("/", File.separator); Strengfilnavn = System.getProperty ("java.home") + relativeCacertsPath; FileInputStream er = ny FileInputStream (filnavn); KeyStore keystore = KeyStore.getInstance (KeyStore.getDefaultType ()); Strengpassord = "changeit"; keystore.load (er, password.toCharArray ()); returnere keystore; }

Standardpassordet for dette KeyStore er "endre det", men det kan være annerledes hvis det tidligere ble endret i systemet vårt.

Når den er lastet, KeyStore vil ha våre pålitelige sertifikater, og neste gang får vi se hvordan vi kan lese dem.

3. Lese sertifikater fra en spesifisert KeyStore

Vi skal bruke PKIX-parametere klasse, som tar en KeyStore som en konstruktørparameter:

@Test public void whenLoadingCacertsKeyStore_thenCertificatesArePresent () {KeyStore keyStore = loadKeyStore (); PKIXParameters params = nye PKIXParameters (keyStore); Sett trustAnchors = params.getTrustAnchors (); Liste sertifikater = trustAnchors.stream () .map (TrustAnchor :: getTrustedCert) .collect (Collectors.toList ()); assertFalse (Certificate.isEmpty ()); }

De PKIX-parametere klasse brukes vanligvis til å validere et sertifikat, men i vårt eksempel brukte vi det bare til å kreve sertifikatene fra vårt KeyStore.

Når du oppretter en forekomst av PKIXParametrs, den bygger en liste over TrustAnchor som vil inneholde de pålitelige sertifikatene som finnes i vår KeyStore.

EN TrustAnchor forekomst representerer ganske enkelt et klarert sertifikat.

4. Lese sertifikater fra standard KeyStore

Vi kan også få en liste over de pålitelige sertifikatene som finnes i systemet vårt av bruker TrustManagerFactory klasse og initialisere den uten en KeyStore, som vil bruke standard KeyStore.

Hvis vi ikke gir en KeyStore eksplisitt vil den samme fra forrige kapittel brukes som standard:

@Test offentlig ugyldig nårLoadingDefaultKeyStore_thenCertificatesArePresent () {TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance (TrustManagerFactory.getDefaultAlgorithm ()); trustManagerFactory.init ((KeyStore) null); Liste trustManagers = Arrays.asList (trustManagerFactory.getTrustManagers ()); Liste sertifikater = trustManagers.stream () .filter (X509TrustManager.class :: isInstance) .map (X509TrustManager.class :: cast) .map (trustManager -> Arrays.asList (trustManager.getAcceptedIssuers ())) .flatMap (Collection: : stream) .collect (Collectors.toList ()); assertFalse (Certificate.isEmpty ()); }

I eksemplet ovenfor har vi brukt X509TrustManager, som er en spesialisert TrustManager brukes til å autentisere den eksterne delen av en SSL-tilkobling.

Merk at denne oppførselen kan avhenge av den spesifikke JDK-implementeringen, da spesifikasjonen ikke definerer hva som skal skje i tilfelle i det()KeyStore parameter er null.

5. Sertifikataliaser

Et sertifikatalias er ganske enkelt et String som unikt identifiserer et sertifikat.

Blant standardsertifikatene som er importert av Java, er det også et kjent sertifikat utstedt av GoDaddy, en offentlig domeneregistrator, som vi vil bruke i testene våre:

Streng GODADDY_CA_ALIAS = "godaddyrootg2ca [jdk]";

La oss se hvordan vi kan lese alle sertifikataliasene som finnes i vår KeyStore:

@Test offentlig ugyldig nårLoadingKeyStore_thenGoDaddyCALabelIsPresent () {KeyStore keyStore = loadKeyStore (); Enumeration aliasEnumeration = keyStore.aliases (); List aliases = Collections.list (aliasEnumeration); assertTrue (aliases.contains (GODADDY_CA_ALIAS)); }

I neste eksempel ser vi hvordan vi kan hente et sertifikat med aliaset:

@Test offentlig ugyldig nårLoadingKeyStore_thenGoDaddyCertificateIsPresent () {KeyStore keyStore = loadKeyStore (); Sertifikat goDaddyCertificate = keyStore.getCertificate (GODADDY_CA_ALIAS); assertNotNull (goDaddyCertificate); }

6. Konklusjon

I denne raske artikkelen har vi sett på forskjellige måter å oppføre pålitelige sertifikater på Java gjennom raske og praktiske eksempler.

Som alltid kan du finne kodebiter på GitHub.

Java bunn

Jeg kunngjorde nettopp det nye Lær våren kurs, med fokus på det grunnleggende i vår 5 og vårstøvel 2:

>> KONTROLLER KURSET

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