6

Ich arbeite mit X509-Zertifikaten in Java. Bei einem Zertifikat ist es möglich, alle anderen Zertifikate in der Signaturhierarchie zu finden, bis Sie das Stammzertifikat erreichen?Erlangung der Zertifikatskette

Ich habe eine Zertifikatdatei (mit einer .cer Erweiterung) und ich möchte das übergeordnete Signaturzertifikat extrahieren. Ich möchte weiterhin das übergeordnete Element dieses Zertifikats finden, bis ich das endgültige Stammzertifikat erhalte, das selbst signiert ist.

Ich habe die X509Certificate Zertifikat APIs und relevanten APIs in java.security.cert überprüft, konnte aber nichts nützliches finden.

+1

möglich Duplikat von [Wie Zwischen-und Root-CERT aus einem vorhandenen Blatt Zertifikat zu generieren?] (Http://stackoverflow.com/questions/11076491/how-to-generate-intermediate-and-root-cert-from- ein existierendes Blatt-Zertifikat) –

+1

Es gibt keinen zuverlässigen Weg, dies zu tun. Siehe meine Antwort auf http://stackoverflow.com/a/11076955/47961 –

+1

Haben Sie versucht [java.security.KeyStore # getCertificateChain()] (http://docs.oracle.com/javase/6/docs/api /java/security/KeyStore.html#getCertificateChain(java.lang.String))? – Zaki

Antwort

2

Das ist nicht schwer - vorausgesetzt, Sie haben alle Zwischenzertifikate und das Stammzertifikat in einem oder mehreren Schlüsselbunden irgendwie/Out-of-Band erhalten.

Werfen Sie einen Blick auf

http://codeautomate.org/blog/2012/02/certificate-validation-using-java/ 

für einen Code snipped, die genau das tut. Der Schlüssel Bit ist in validateKeyChain() und besteht im Wesentlichen aus

cert = cert-to-validate 
    while(not self signed) { 
     extract issuer from cert 
     scan keychain(s) to find cert with a subject equal to the issuer 
     if none found - error 
     check if the signature is correct. 
     cert = issuers_cert 
    } 
    if not at the top/root - error 

Was wie Sie die Zwischen-/Root-Zertifikate erhalten - das ist ein anderes Thema. Beachten Sie, dass dieser Code ein wenig naiv ist - und Cross Signing nicht ganz versteht. Der Java-Pkix ruft jedoch - BouncyCastle hat ein Beispiel.

Sie können die Root-Zertifikate in der Regel in einer Schlüsselkette erstellen; aber die Zwischenzertifikate müssen oft "gesammelt" oder dynamisch entdeckt werden. Dies erfordert im Allgemeinen die Abfrage des SSL-Stacks während TLS oder ähnlichem.