كيف يمكنني الحصول على قائمة بشهادات الجذر الموثوق بها في جافا؟

StackOverflow https://stackoverflow.com/questions/3508050

  •  29-09-2019
  •  | 
  •  

سؤال

أود أن أكون قادرًا على الوصول إلى جميع شهادات الجذر الموثوقة برمجياً في تطبيق Java.

كنت أنظر إلى واجهة Keystore ، لكنني آمل أن أحصل على قائمة الجذور الموثوقة التي تكون ضمنية مع JRE.

هل هذا يمكن الوصول إليه في أي مكان؟

هل كانت مفيدة؟

المحلول

هناك مثال يوضح كيفية الحصول على مجموعة من شهادات الجذر وتكرارها من خلالها إدراج سلطات الشهادة الأكثر موثوقية (CA) في متجر رئيسي. إليك نسخة معدلة قليلاً تقوم بطباعة كل شهادة (تم اختبارها على Windows Vista).

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.InvalidAlgorithmParameterException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.PKIXParameters;
import java.security.cert.TrustAnchor;
import java.security.cert.X509Certificate;
import java.util.Iterator;


public class Main {

    public static void main(String[] args) {
        try {
            // Load the JDK's cacerts keystore file
            String filename = System.getProperty("java.home") + "/lib/security/cacerts".replace('/', File.separatorChar);
            FileInputStream is = new FileInputStream(filename);
            KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
            String password = "changeit";
            keystore.load(is, password.toCharArray());

            // This class retrieves the most-trusted CAs from the keystore
            PKIXParameters params = new PKIXParameters(keystore);

            // Get the set of trust anchors, which contain the most-trusted CA certificates
            Iterator it = params.getTrustAnchors().iterator();
            while( it.hasNext() ) {
                TrustAnchor ta = (TrustAnchor)it.next();
                // Get certificate
                X509Certificate cert = ta.getTrustedCert();
                System.out.println(cert);
            }
        } catch (CertificateException e) {
        } catch (KeyStoreException e) {
        } catch (NoSuchAlgorithmException e) {
        } catch (InvalidAlgorithmParameterException e) {
        } catch (IOException e) {
        } 
    }
}

نصائح أخرى

يجب أن يكون هذا أكثر مرونة باستخدام متجر الثقة الافتراضي في النظام للحصول على جميع الشهادات:

TrustManagerFactory trustManagerFactory =
   TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
List<Certificate> x509Certificates = new ArrayList<>();
trustManagerFactory.init((KeyStore)null);                 
Arrays.asList(trustManagerFactory.getTrustManagers()).stream().forEach(t -> {
                    x509Certificates.addAll(Arrays.asList(((X509TrustManager)t).getAcceptedIssuers()));
                });

```

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top