Extrahieren von Zertifikatsketteninformationen aus signiertem X509-Zertifikat (CSR-Antwort) in Android / BouncyCastle
-
12-12-2019 - |
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!
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.