【问题标题】:Ignore "certificate unknown" alert忽略“证书未知”警报
【发布时间】:2011-12-11 23:21:15
【问题描述】:

我有以下简单的 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.crtserver.key 指定自签名证书的公钥和私钥。如果我使用 Firefox 连接到运行此脚本的主机,则脚本会以

ssl.SSLError: [Errno 1] _ssl.c:503: sslv3 alert certificate unknown

据我所知,这来自客户端(例如 Firefox)警告主机证书无效。这很好,但为什么它会导致脚本终止?我必须以某种方式明确忽略警报吗?

【问题讨论】:

    标签: python openssl


    【解决方案1】:

    尝试捕获异常并忽略它。它应该是非致命的。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-26
      • 2017-09-27
      • 1970-01-01
      • 1970-01-01
      • 2017-06-01
      相关资源
      最近更新 更多