Signatur aus dem digitalen Zertifikat extrahieren

Ich bekomme viele pdfs in meinem System. Ich muss überprüfen, ob alle diese Dateien sind: –

  • Digital signiert
  • Ihre Integrität beibehalten (durch Vergleich der Hash von Datei Inhalt mit der Nachricht Digest eingebettet in / Inhalt. Unterschrift Wörterbuch .

Ich benutze Python, um das zu tun. Bis jetzt war ich in der Lage, die /Content aus Signatur Wörterbuch mit PyPDF2 zu bekommen. Der Inhalt ist pkcs7 – der codiert. Gibt es eine Art, wie ich die signierte Nachricht verdauen kann?

Ähnliche Vorgänge wurden in C als diese Antwort durchgeführt

2 Solutions collect form web for “Signatur aus dem digitalen Zertifikat extrahieren”

DER ist binäres Format, seine Struktur heißt ASN.1. PEM-Format ist Base64 codiert DER.

Diese Online-PEM-Decoder ist sehr nützlich: http://lapo.it/asn1js/ Nachdem Sie die Nachricht Signatur in ihm identifizieren, können Sie Code schreiben, um es durch jede ASN.1-Bibliothek zu extrahieren.

Der SignedData- Subtyp einer CADES- , CMS- oder PKCS # 7 1.5- Signatur hat eine Sammlung von SignerInfo- Blöcken, die hier definiert sind, enthält grundsätzlich:

  • SignerIdentifier: Schlüssel in die Zertifikatsammlung
  • DigestAlgorithmIdentifier: welcher Algorithmus wurde verwendet, um Nachrichten-Digest zu berechnen
  • SignedAttributes (optional): die versiegelten Daten:
  • SignatureAlgorithmIdentifier: welcher Algorithmus wurde verwendet, um die Signatur zu berechnen (über SignedAttributes)
  • SignaturValue: der Signaturwert
  • UnsignedAttributes (optional)

Die SignedAttributes können je nach Art der Unterschrift enthalten:

  • ContentType: Typ des signierten Inhalts
  • MessageDigest
  • SigningTime
  • Gegenzeichnung

Wenn wir dies mit nur der ersten Signatur vereinfachen und mit meiner Gabel von pyx509 das könnte eine Art von Code wie dieser (nicht getestet):

 from pyx509.models import PKCS7 pkcs7 = PKCS7.from_der(here_goes_your_pks7_signature_data_der_encoded) signer_info = pkcs7.content.signerInfos[0] auth_attrs = signer_info.auth_attributes for attr in auth_attrs.attributes: if attr.type == '1.2.840.113549.1.9.4': # Message Digest OID message_digest = attr.value print "Digest: %s#%s" % (signer_info.oid2name(signer_info.digest_algorithm), messageDigest) 
  • Python: Lesen eines pkcs12 Zertifikats mit pyOpenSSL.crypto
  • Wie bekomme ich die aktuelle Chiffre in pyOpenSSL für DTLS
  • PyvelN richtige Weg, um PEM-Dateien zu erstellen
  • Fehler bei der Installation eines Moduls mit Pip, aber easy_install funktioniert
  • HTTPS-Verbindung Python
  • Python - SSL - falsche Versionsnummer
  • Updates von pyOpenSSL und pandas mit 'pip' scheitern mit "TypeError: resolve () bekam ein unerwartetes Keyword-Argument 'replace_conflicting'
  • Python ist die beste Programmiersprache der Welt.