【发布时间】:2016-08-02 09:50:03
【问题描述】:
如果这不是正确的 SO(信息安全或加密),我马上道歉。无论如何,我正在尝试弄清楚如何在 Python 中验证 SSL 证书客户端。我发现了一个回调函数here,看起来和我在网上看到的其他函数很相似。但是,在我的代码中,我不确定它是如何(或为什么,真的)工作的。当我运行我的代码时它似乎可以工作,但是为什么(在 PyCharm 中)前四个参数是灰色的,而只有第五个参数是白色的?有没有办法可以使用这个回调函数来检查特定的证书错误?
这是我运行时的输出
Certs are fine
Certs are fine
Certs are fine
b'HTTP/1.1 200 OK\r\nDate: Tue, 12 Apr 2016...etc
我假设“证书没问题”的每一行都在验证链中的每个证书?
import socket
from OpenSSL import SSL
HOST = "www.google.com"
PORT = 443
def verify_callback(connection, x509, errnum, errdepth, ok):
if not ok:
print("Bad Certs")
else:
print("Certs are fine")
return ok
context = SSL.Context(SSL.TLSv1_2_METHOD)
context.load_verify_locations("cacerts.pem")
context.set_options(SSL.OP_NO_SSLv2)
context.set_verify(SSL.VERIFY_PEER | SSL.VERIFY_FAIL_IF_NO_PEER_CERT, verify_callback)
# create socket and connect to server
sock = socket.socket()
sock = SSL.Connection(context, sock)
sock.connect((HOST, PORT))
sock.do_handshake()
sock.sendall("GET / HTTP/1.1\r\n\r\n")
【问题讨论】:
-
您是否考虑过查阅文档?
-
是的,但它对用户不太友好,尤其是像我这样的加密新手。
-
访问一些没有正确实现SSL的网站,打印
x509, errnum, errdepth的内容? -
我目前正在尝试自己找出答案,发现这篇文章很有用:blog.san-ss.com.ar/2012/05/…
标签: python-3.x ssl tls1.2 pyopenssl