Extrahieren von Zertifikatsketteninformationen aus signiertem X509-Zertifikat (CSR-Antwort) in Android / BouncyCastle

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

Frage

Kann ich Zertifikatsketteninformationen mit Android- oder BouncyCastle-Bibliotheken aus einem von einer Zertifizierungsstelle signierten X509-Client-Zertifikat extrahieren?

Ich habe einen Android-Client, der ein CA-signiertes X509-Zertifikat von einem vertrauenswürdigen Server erhält.Ich möchte das signierte Client-Zertifikat und meinen privaten Schlüssel auf einem PKCS12 (.p12) Datei.Ich mache das gerade, indem ich eine erstelle KeyStore objekt und Hinzufügen des Zertifikats und des privaten Schlüssels.Wenn ich den Client hinzufüge PrivateKey mit dem KeyStore.setKeyEntry() methode, a Certificate[] chain ist das letzte Argument, das derzeit nur das Client-Zertifikat enthält. Verhindert dies, dass mein Zertifikat überprüfbar ist, da ich das CA-Zertifikat nicht im Besitz habe Certificate[] chain? Und wenn ja, ist es möglich, eine Zertifikatskette mit Informationen zu füllen, die aus dem signierten extrahiert wurden X509Certificate?

Die meisten Beispiele scheinen die Zertifizierungsstellenkette aus einer PEM-Datei, einem BKS-Vertrauensspeicher zu laden oder haben bereits Zugriff auf eine Liste von Zertifikaten.

Hier ist was ich habe:

    X509Certificate cert;      // signed client cert
    PrivateKey pkey;           // client private key
    String password; 

    KeyStore store;
    store = KeyStore.getInstance("PKCS12", "BC");
    store.load(null, null);

    // adding the signed cert
    store.setCertificateEntry("Client certificate", cert);

    // creating the cert chain
    X509Certificate[] chain = new X509Certificate[1];
    chain[0] = cert;
    // add rest of the certs in the chain here

    // adding the private key   
    store.setKeyEntry("Client private key", pkey, password.toCharArray(), chain);

    FileOutputStream fos;
    fos = openFileOutput("clientCredentials.p12", Context.MODE_PRIVATE);
    store.store(fos, password.toCharArray());
    fos.flush();
    fos.close();

Danke im Voraus!

War es hilfreich?

Lösung

Die Zertifizierungsstellenzertifikate sind nicht in Ihrem signierten Zertifikat enthalten.Sie müssen sie von irgendwoher holen (vorinstallieren, von vertrauenswürdigem Server herunterladen usw.).).Wenn Sie nicht die vollständige Kette installieren, kann der Prüfer, wenn er bereits Zugriff auf die erforderlichen Zertifizierungsstellenzertifikate hat, Ihr Endentitätszertifikat jederzeit überprüfen.Wie beabsichtigen Sie, Ihren Schlüssel und Ihr Zertifikat zu verwenden?

Übrigens, Ihr Anruf an setCertificateEntry() erstellt einen vertrauenswürdigen Zertifikatseintrag, der mit einem Endentitätszertifikat wahrscheinlich nicht Ihren Wünschen entspricht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top