2017-04-18 1 views
0

Ich benutze Java mit BouncyCastle, um p7m s/mime-Nachrichten zu entschlüsseln und zu verifizieren. Wenn der private Schlüssel, den ich gewählt habe, um die Nachricht zu entschlüsseln, nicht übereinstimmt, erhalte ich Fehler von Bouncy Castle wie "Ausnahme-Unwrapping-Schlüssel" oder "schlechtes Padding".Wie erhält man die Seriennummer des Zertifikats, mit dem eine Nachricht verschlüsselt wurde?

Aber wie kann ich die Seriennummer des Zertifikats ausgeben, das zum Verschlüsseln der Nachricht verwendet wurde? Es wäre hilfreich für den Kunden zu sehen, dass er beispielsweise ein altes Zertifikat gewählt hat.

Windows bietet eine Konsolen-App "certutil" an, um einen p7m-Stream zu analysieren. Die Seriennummer und der Emittent ist dort genannten:

CMSG_KEY_TRANS_RECIPIENT(1) CERT_ID_ISSUER_SERIAL_NUMBER(1) Seriennummer: b33...

+0

fügen Sie bitte den Code, der den Fehler – Egl

+0

wirft Ich denke, dass der Fehler hier nicht wichtig ist. Meine Frage war, wie man die Seriennummer des Zertifikats erhält, mit dem die Nachricht verschlüsselt wurde. – Dan

Antwort

0

Schließlich fand ich von meinem eigenen :-) aus

Es gibt eine Klasse innerhalb bouncycastle, mit dem Sie die ASN Struktur zu analysieren, ermöglicht der die verschlüsselte Nachricht

ASN1InputStream bIn = new ASN1InputStream(message.getEncoded()); 
ASN1Primitive obj = bIn.readObject(); 
system.out.println(ASN1Dump.dumpAsString(obj)); 

Auch die Seriennummer des Zertifikats ist drin. Also sprang ich in den Quellcode und kopierte die Teile, die ich brauchte, um sie zu erkennen und in einer globalen Variablen zu speichern.

Verwandte Themen