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

时间:2018-02-12 11:54:13

标签: python python-3.x ssl python-requests

我正在尝试通过我的python 3.6代码(使用请求库)中的CRL或OCSP实现证书吊销检查,这是:

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)

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

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

谢谢你们!

0 个答案:

没有答案