Optionen, für ein Programm Hinzufügen der Zertifikate zum Java-KeyStore

War ich immer ein SSL-Handshake-Ausnahmefehler: PKIX "Pfad nicht Kette" (hier beschrieben).
Ich habe es behoben durch den Import einer Zertifikatskette mit openssl:

openssl s_client -host www.envmgr.com -port 443 -showcerts > cert_chain.crt

installiert und es in mein JDK-s-keystore:

keytool -import -alias envmgrchain -file cert_chain.crt -keystore cacerts -storepass changeit

Gut das funktioniert. Hurra. Das problem ist, werden wir dabei sein, unsere Anwendung auf einer cloud-server, wie rackspace oder AWS und ich denke, es ist eine gute chance, dass wir keinen Zugriff zum ändern des Schlüsselspeicher der JVM hinzufügen dieser Kette.

Dachte ich, "kein problem, ich werde nur hinzufügen, dass dieses Zertifikat-Kette, um die keystore-Programm" so ich entfernt es von meinem JVM:

keytool -delete -alias envmgrchain -keystore cacerts -storepass changeit

Hinzugefügt und dieser code:

    KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
    //Create an empty keystore that we can load certificate into
    trustStore.load(null);
    InputStream fis = new FileInputStream("cert_chain.crt");
    BufferedInputStream bis = new BufferedInputStream(fis);

    CertificateFactory cf = CertificateFactory.getInstance("X.509");
    while(bis.available()>0) {
        Collection<? extends Certificate> certs = cf.generateCertificates(bis);
        Iterator<? extends Certificate> iter = certs.iterator();
        //Add each cert in the chain one at a time
        for(int i=0; i<certs.size(); i++) {
            Certificate cert = iter.next();
            String alias = "chaincert"+((i>0)?i:"");
            trustStore.setCertificateEntry(alias, cert);
        }
    }
    bis.close();
    fis.close();
//Add custom keystore to TrustManager
    TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
    tmf.init(trustStore);
    SSLContext ctx = SSLContext.getInstance("TLSv1");
    ctx.init(null, tmf.getTrustManagers(), null);

Aber wenn ich es laufen, die PKIX Fehler wieder. Ist der obige code nicht entspricht keytool-import? Ich fühle mich wie ich bin, entweder indem Sie Zertifikate auf den KeyStore falsch, oder bin ich nicht die Installation der Schlüsselspeicher in den TrustManager in der richtigen Weise.

FYI: ich bin auch der Versuch, dieses Problem zu beheben, indem Sie einerseits einen X509TrustManager.

  • Was nur den Versand der truststore, die Sie verwenden möchten, mit Ihrer Anwendung und Referenz es über vm-Argumente?
  • Auch hier ist ein berühmtes Beispiel von Andreas Sterbenz genannt InstallCert das tut, was Sie zu tun versuchen, aber Sie haben zu analysieren, wenn der code, um zu bekommen, was Sie genau möchten: code.google.com/p/java-use-examples/source/browse/trunk/src/com/...
InformationsquelleAutor IcedDante | 2014-06-04
Schreibe einen Kommentar