Как я могу проверить сертификат X509 в python, включая проверку CRL? - PullRequest
5 голосов
/ 05 октября 2011

Я пытаюсь проверить сертификат X509, используя python.В частности, мне нужно проверять CRL, когда я это делаю.

Теперь вы можете использовать m2crypto для этого, но я не могу найти опцию, соответствующую -crl_check или -crl_check_all в openssl.

В качестве альтернативы, я мог бы использовать канал и напрямую вызывать openssl:

p1 = Popen(["openssl", "verify", "-CApath", capath, "-crl_check_all"], 
           stdin = PIPE, stdout = PIPE, stderr = PIPE)

message, error = p1.communicate(certificate)
exit_code = p1.returncode

Однако, кажется, что openssl verify всегда возвращает код выхода 0, поэтому мне пришлось бы как-то сравнивать строки, чтобы определить, является ли проверкауспешно, что я предпочел бы не делать.

Я что-то упускаю здесь простое?

Спасибо.

Ответы [ 3 ]

1 голос
/ 12 октября 2011

Хорошо, я сделал следующее:

p1 = Popen(["openssl", "verify", "-CApath", capath, "-crl_check_all"], 
           stdin = PIPE, stdout = PIPE, stderr = PIPE)

message, error = p1.communicate(certificate)

verified = ("OK" in message and not "error" in message)

Это не то, что я бы выбрал. Он прошел мои тесты, но я не уверен, что он всегда будет работать. Я недостаточно хорошо знаю C, чтобы прочитать исходный код openssl и проверить его.

Если кто-то может найти ситуацию, когда это не получится, прокомментируйте.

1 голос
/ 27 января 2012

Я отправил в M2Crypto патч, который позволяет проверять сертификат X509 по цепочке CA, а также по нескольким CRL.

https://bugzilla.osafoundation.org/show_bug.cgi?id=12954#c2

См. Этот пост для получения дополнительной информации: Как использовать m2crypto для проверки цепочки сертификатов X509 в настройках без SSL

0 голосов
/ 05 октября 2011

Глядя на исходный код openssl verify.c, он действительно всегда возвращает 0, и изменить это невозможно. Однако вам не нужно вызывать openssl в командной строке: для библиотеки есть привязок python .

...