Python中实现证书吊销检查的最有效方法?

Hus*_*bar 5 python ssl python-3.x python-requests

我试图通过CRL或OCSP在我的python 3.6代码中(使用请求库)实施证书吊销检查:

import ssl
import requests

from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager
from requests.packages.urllib3.util import ssl_

CIPHERS = (
    'RSA+AES'
)


class TlsAdapter(HTTPAdapter):

    def __init__(self, ssl_options=0, **kwargs):
        self.ssl_options = ssl_options
        super(TlsAdapter, self).__init__(**kwargs)

    def init_poolmanager(self, *pool_args, **pool_kwargs):
        ctx = ssl_.create_urllib3_context(ciphers=CIPHERS, cert_reqs=ssl.CERT_REQUIRED, options=self.ssl_options)
        # ctx.verify_flags = ssl.VERIFY_CRL_CHECK_CHAIN
        self.poolmanager = PoolManager(*pool_args,
                                       ssl_context=ctx,
                                       **pool_kwargs)
session = requests.session()
adapter = TlsAdapter(ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1)
session.mount("https://", adapter)
r = session.request('GET', 'https://awesome.com', verify='/etc/ssl/certs/ca-certificates.crt')
print(r)
Run Code Online (Sandbox Code Playgroud)

根据我对CRL和OCSP所做的研究(请参阅此处和此处),Python中没有内置的机制可以用CRL实现证书吊销检查。可以利用ssl.VERIFY_CRL_CHECK_CHAIN,但也希望我们在客户端上手动提供crl文件,效率不是很高。作为参考,Windows上的WinHTTP库自动提取证书中的所有crl路径,并自动检查它们是否证书已被吊销。

但是,我找不到太多信息,是否在Python 3.6中是否支持OSCP检查,以及是否可以通过内置方法或第三方包轻松实现?理想情况下,Python中是否存在可以自动从服务器证书中提取crl服务器/ ocsp响应程序,然后联系相应服务以验证证书是否已被撤销的解决方案?

多谢你们!