Gibt es eine (einfache) Weise CRL in Python zu analysieren?
-
29-09-2019 - |
Frage
Ich versuche, etwas Dummes zu tun. Laden eine CRL und Ausgabe der Liste der gesperrten Zertifikate Serien
Mit m2crypto die CRL Laden erfolgt mit:
import M2Crypto
crl = M2crypto.X509.load_crl('my.crl')
Aber ich bin wirklich überascht, dass das zurückgegebene Objekt nur eine sehr nützlich hat, die
crl.as_text()
Mit etwas regexp kann ich die Ausgabe analysiert, um meine widerrufen Serien abgerufen werden. Aber gibt es eine weitere Möglichkeit, das zu tun?
Für Informationen, hier ist eine klassische CRL as_text Ausgabe.
Certificate Revocation List (CRL):
Version 2 (0x1)
Signature Algorithm: sha1WithRSAEncryption
Issuer: /C=FR/ST=IDF/L=Paris/O=XXXXX/OU=XXXXX/CN=XXXXX Certificate Authority
Last Update: Nov 6 21:49:51 2010 GMT
Next Update: Nov 7 21:49:51 2010 GMT
Revoked Certificates:
Serial Number: 02
Revocation Date: Aug 10 15:40:09 2010 GMT
Serial Number: 03
Revocation Date: Sep 9 15:12:24 2010 GMT
Serial Number: 05
Revocation Date: Aug 17 14:18:22 2010 GMT
Serial Number: 06
Revocation Date: Aug 18 08:57:15 2010 GMT
Signature Algorithm: sha1WithRSAEncryption
d1:05:da:1f:c0:1c:68:78:0e:e2:ea:78:de:b8:b2:58:9c:ba:
b4:7c:c5:e8:2a:8d:8c:82:1d:4b:ed:a7:2d:cb:f6:bf:da:fa:
38:a4:7a:3d:2b:19:6c:7a:ba:4c:1c:4c:e4:d8:e6:20:3d:0a:
95:03:75:bf:17:cf:97:ce:3e:4a:93:1c:a6:4c:36:62:97:a2:
d3:be:f2:78:38:89:13:3e:d4:b0:80:a1:24:52:0d:3a:01:67:
0d:4f:e7:0b:07:0c:80:04:b7:25:66:a4:61:36:dd:3a:24:29:
30:67:f6:23:31:34:6f:0b:a8:30:c1:c9:b7:ee:4e:2b:7a:e7:
6b:31:7d:0b:cb:12:8a:7c:5f:7e:73:a0:42:8d:ea:4f:f7:76:
ce:1b:0b:6c:6a:3e:eb:08:a6:d6:67:81:cb:cb:98:6d:40:ec:
8c:e5:a5:f7:f0:ed:0c:7f:38:fd:42:3d:19:c4:69:ec:eb:71:
7a:e1:30:b4:81:98:f5:00:a0:bd:ac:75:46:15:e6:2b:1c:da:
f4:09:19:e5:1b:4e:c9:a4:7c:11:79:24:a4:3b:13:84:84:a7:
5b:0e:07:80:ae:ae:26:8e:d7:b3:cb:b8:6c:79:df:9d:26:b0:
34:bc:c1:f4:8f:4b:3e:f5:9b:d0:e3:e7:ab:37:27:f6:79:09:
47:fb:76:07
Lösung
Job ist erledigt dank pyOpenSSL. Hier ist der Code zur Verwendung:
import OpenSSL
with open('path_to_the_crl', 'r') as _crl_file:
crl = "".join(_crl_file.readlines())
crl_object = OpenSSL.crypto.load_crl(OpenSSL.crypto.FILETYPE_PEM, crl)
revoked_objects = crl_object.get_revoked()
for rvk in revoked_objects:
print "Serial:", rvk.get_serial()
Dieser Code gibt die folgende Ausgabe mit meinem CRL Beispiel:
Serial: 02
Serial: 03
Serial: 05
Serial: 06
Andere Tipps
pyOpenSSL hat eine CRL-Klasse mit einer Methode, die ich das verstehen kann nicht sein, was Sie wollen, wenn Sie aus irgendeinem Grund zu get_revoked()
tun sollten, genau das, was Sie es haben wollen, die ich glaube, wird gesperrten Zertifikate bekommen (es rel="nofollow"> hier
M2Crypto
gebunden sind, aber dies scheint zu funktionieren auch.