2011-12-11 89 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