
[英]How to check OCSP client certificate revocation using Python Requests library?
[英]How to add OCSP support into Python requests library?
有什么方法可以通过请求库实现OCSP检查吗?
我现在看到的唯一可行的方法是使用pyOpenSSL ,但这意味着必须与服务器建立单独的独立连接以获取证书,然后连接到颁发者以进行验证。
然后,那里有这样的实现吗? 您是否已经解决了该问题并希望进行报告?
M2Crypto至少也希望成为SSL连接的候选者,但是我不确定该库可能存在的弊端,但是肯定比requests
更底层。
边注:
当涉及到更复杂的HTTP / HTTPS连接时,显然Python确实很烂。
urllib
甚至不检查SSL / TLS证书,而requests
带有其自己的CA证书集合(而不是使用系统的CA),并且似乎不支持通过PAC进行代理配置。
哎呀,我什至尝试使用Qt的HTTP堆栈(使用OS设置),但是遇到了多个并发连接的停滞问题。
从pyOpenSSL和M2Crypto的简要介绍中,我怀疑它们是否为OCSP验证提供了必要的功能,并且我看不到任何认真尝试为python实现此类功能的尝试,另请参见http://www.gossamer-threads.com/lists/python / bugs / 1092384 。
实施OCSP绝对不是一件容易的事。 OpenSSL API未记录,您必须从源代码中提取必要的部分。 然后,您必须尝试将它们放在一起并从中创建一个接口,最终用户实际上可以使用该接口。
当涉及到更复杂的HTTP / HTTPS连接时,显然Python确实很烂。
不只是python。 如果您查看工具和编程语言,则许多工具和编程语言都无法正确执行验证证书的基本任务,那就是根据CA进行检查,并且不要忘记根据给定的主机名检查证书中的名称。 而且它们中的大多数要么不做OCSP,要么仅提供像API这样的OpenSSL,但实际上并不能简单地使用它。
实际上,OpenSSL确实支持OCSP。 我实际上可以使用SSL.Connection打开套接字,但是然后,我的问题是在该套接字上建立了实际的HTTP连接。
我不知道这是否有帮助实际上OpenSSL确实支持OCSP。 我实际上可以使用SSL.Connection打开套接字,但是然后,我的问题是在该套接字上建立了实际的HTTP连接。
使用以下代码,您可以打开ocsp连接并执行整个ocsp握手。 下一步是从中创建一个http连接
ssl_context = Context(tls_method)
ssl_context.use_certificate_file(clientcert)
ssl_context.use_privatekey_file(clientkey)
ssl_context.load_verify_locations(cafile=None, capath=trusted_ca)
ssl_context.set_verify(VERIFY_PEER | VERIFY_FAIL_IF_NO_PEER_CERT |VERIFY_CLIENT_ONCE, callback=self.verify_callback)
ssl_context.set_ocsp_client_callback(
callback=self.ocsp_callback, data=None)
tcp_conn = socket.create_connection((host, port))
ssl_conn = Connection(ssl_context, tcp_conn)
ssl_conn.set_tlsext_host_name(host.encode())
ssl_conn.request_ocsp()
ssl_conn.set_connect_state()
ssl_conn.do_handshake()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.