2011-12-11 52 views
2

我有以下简单的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 

终止从我收集,这个来自提醒主机证书是无效的客户端(比如,火狐)。这很好,但为什么会导致脚本终止?我必须以某种方式明确忽略警报吗?

回答

2

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

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 
+0

谢谢你把它清理干净。 – gspr