Java >> Java tutorial >  >> Tag >> java.net

Hvordan tilføjer man flere truststore-stier til "java.net.ssl.trustStore"?

Du kan ikke have flere stier til javax.net.ssl.trustStore .

Det nemmeste ville være at lave en lokal kopi af JRE's cacerts og importer certifikaterne fra din anden butik til den (effektivt flette dem). (Se keytool -importkeystore .)

Ellers, hvis du på forhånd ved, at alle dine LDAP-forbindelser vil bruge dit andet nøglelager (og du også vil være i stand til at bruge standardtillidslageret til andre, ikke-relaterede forbindelser), kan du konfigurere det tillidslager til den SSLSocketFactory kun. Jeg er ikke bekendt med com.org.ldap.LDAPSocketFactory , men det kan have en mulighed for at gøre det. (Ellers kan du oprette din tilpassede SSLContext initialiseret med din anden truststore og få en SSLSocketFactory , som beskrevet i dette svar).

En anden, mere kompliceret måde, ville være at oprette en brugerdefineret X509TrustManager der ombryder standardtillidsadministratoren, fanger dens undtagelser og prøver igen med en anden tillidsadministrator initialiseret ved hjælp af din anden butik. Det er muligt, men du skal sørge for, at det stadig kaster undtagelsen, hvis ingen af ​​tillidsadministratorerne accepterer dit certifikat (ellers ville der være et sikkerhedshul). Hvis du ikke er bekendt med JSSE API (eller Java i det hele taget), er det sandsynligvis ikke den bedste mulighed.

Derudover skal du være forsigtig, når du bruger System.setProperty("javax.net.ssl.trustStore", ...) i din kode:det er det, der læses for at initialisere standard SSLContext , men standard SSLContext initialiseres kun én gang, første gang det er påkrævet. Indstilling af denne systemegenskab bagefter ville ikke have nogen effekt (medmindre naturligvis andre klasser fra andre biblioteker også er afhængige af denne værdi).

Det er heller ikke klart, hvad du forsøger at opnå med dette, da det altid vil lykkes dig at tilføje en sikkerhedsudbyder, der allerede er der:

  try 
  {   
    SSLContext se = SSLContext.getInstance("TLS");
    Security.addProvider(se.getProvider());
  }   
  catch(NoSuchAlgorithmException e) { }

Nej, bare importer alle certifikaterne fra den ene truststore til den anden, og brug den anden.


Java tag