我有以下简单的 Python 脚本:
import socket
import ssl
if __name__ == "__main__":
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind("", 443)
s.listen(1)
(conn, addr) = s.accept()
sslconn = ssl.wrap_socket(conn, server_side=True, certfile="server.crt", keyfile="server.key", cert_reqs=ssl.CERT_NONE)
print 'Connection established'
while True:
data = sslconn.recv(1024)
if not data: break
print "Data received"
sslconn.close()
文件server.crt
and server.key
指定自签名证书的公钥和私钥。如果我使用 Firefox 连接到运行此脚本的主机,则脚本将以以下内容终止
ssl.SSLError: [Errno 1] _ssl.c:503: sslv3 alert certificate unknown
据我所知,这来自客户端(例如 Firefox),警告主机证书无效。这很好,但是为什么它会导致脚本终止呢?我必须以某种方式明确忽略该警报吗?
尝试捕获异常并忽略它。它应该是非致命的。
sslconn = ssl.wrap_socket(conn, server_side=True, certfile="server.crt",
keyfile="server.key", cert_reqs=ssl.CERT_NONE,
do_handshake_on_connect=False)
try:
sslconn.do_handshake()
except ssl.SSLError, err:
if err.args[1].find("sslv3 alert") == -1:
raise
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)