Få en liste over pålidelige certifikater i Java

Java Top

Jeg har lige annonceret det nye Lær foråret kursus med fokus på det grundlæggende i Spring 5 og Spring Boot 2:

>> KONTROLLER KURSEN

1. Oversigt

I denne hurtige vejledning lærer vi, hvordan man læser en liste over pålidelige certifikater i Java gennem hurtige og praktiske eksempler.

2. Indlæser KeyStore

Java gemmer de pålidelige certifikater i en særlig fil med navnet cacerts der bor inde i vores Java installationsmappe.

Lad os starte med at læse denne fil og indlæse den 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 ()); Strengadgangskode = "changeit"; keystore.load (er, password.toCharArray ()); returner keystore; }

Standardadgangskoden til dette KeyStore er "Ændre det", men det kunne være anderledes, hvis det tidligere blev ændret i vores system.

Når den er indlæst, KeyStore vil have vores pålidelige certifikater, og derefter vil vi se, hvordan vi læser dem.

3. Læsning af certifikater fra en specificeret KeyStore

Vi skal bruge PKIX-parametre klasse, som tager en KeyStore som en konstruktørparameter:

@Test offentlig ugyldig nårLoadingCacertsKeyStore_thenCertificatesArePresent () {KeyStore keyStore = loadKeyStore (); PKIXParameters params = nye PKIXParameters (keyStore); Indstil trustAnchors = params.getTrustAnchors (); Liste certifikater = trustAnchors.stream () .map (TrustAnchor :: getTrustedCert) .collect (Collectors.toList ()); assertFalse (certifikater.isEmpty ()); }

Det PKIX-parametre klasse bruges normalt til validering af et certifikat, men i vores eksempel brugte vi det simpelthen til at kræve certifikaterne fra vores KeyStore.

Når du opretter en forekomst af PKIXParametrs, bygger den en liste over TrustAnchor der indeholder de betroede certifikater, der findes i vores KeyStore.

EN TrustAnchor eksempel repræsenterer simpelthen et betroet certifikat.

4. Læsning af certifikater fra standard KeyStore

Vi kan også få en liste over de pålidelige certifikater, der findes i vores system af bruger TrustManagerFactory klasse og initialisere den uden en KeyStore, som bruger standard KeyStore.

Hvis vi ikke giver en KeyStore eksplicit bruges den samme fra det foregående kapitel 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 certifikater = trustManagers.stream () .filter (X509TrustManager.class :: isInstance) .map (X509TrustManager.class :: cast) .map (trustManager -> Arrays.asList (trustManager.getAcceptedIssuers ())) .flatMap (Collection: : stream) .collect (Collectors.toList ()); assertFalse (certifikater.isEmpty ()); }

I ovenstående eksempel har vi brugt X509TrustManager, som er en specialiseret TrustManager bruges til at godkende den eksterne del af en SSL-forbindelse.

Bemærk, at denne adfærd kan afhænge af den specifikke JDK-implementering, da specifikationen ikke definerer, hvad der skal ske i tilfælde af i det()KeyStore parameter er nul.

5. Certifikataliaser

Et certifikatalias er simpelthen et Snor der entydigt identificerer et certifikat.

Blandt standardcertifikater importeret af Java er der også et velkendt certifikat udstedt af GoDaddy, en offentlig internetdomæneregistrator, som vi vil bruge i vores tests:

Streng GODADDY_CA_ALIAS = "godaddyrootg2ca [jdk]";

Lad os se, hvordan vi kan læse alle certifikataliaser, der findes i vores 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 det næste eksempel ser vi, hvordan vi kan hente et certifikat ved hjælp af dets alias:

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

6. Konklusion

I denne hurtige artikel har vi kigget på forskellige måder at notere pålidelige certifikater på Java gennem hurtige og praktiske eksempler.

Som altid kan kodeuddrag findes på GitHub.

Java bund

Jeg har lige annonceret det nye Lær foråret kursus med fokus på det grundlæggende i Spring 5 og Spring Boot 2:

>> KONTROLLER KURSEN

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