2013-02-12 2 views
1

ssl을 사용하여 서버를 코딩하려고하는데 이해가 안되는 오류가 있습니다. 오류파이썬 워프 소켓 실패

import socket, ssl, select, sys, exceptions 

def do_something(connstream, data): 
if not data: 
    return False 
connstream.write(data) 
print data 
return True 

def deal_with_client(connstream): 
data = connstream.read() 
# null data means the client is finished with us 
while data: 
    if not do_something(connstream, data): 
     # we'll assume do_something returns False 
     # when we're finished with client 
     break 
    data = connstream.read() 
# finished with client 

bindsocket = socket.socket() 
bindsocket.bind(('127.0.0.1', 240)) 
bindsocket.listen(5) 



while True: 
newsocket, fromaddr = bindsocket.accept() 
try: 
    connstream = ssl.wrap_socket(newsocket, server_side=True, certfile="E:\oromenetwork\test\cert", keyfile="E:\oromenetwork\test\key", ca_certs=None, ssl_version=ssl.PROTOCOL_TLSv1) 
    connstream.write("Bonjour") 
    deal_with_client(connstream) 
except ssl.SSLError as e: 
    print "warp error " 
    print e 
    newsocket.shutdown(socket.SHUT_RDWR) 
    newsocket.close() 
    exit() 
except exceptions.TypeError as e: 
    print "other error" 
    #print "Unexpected error:", sys.exc_info()[0] 
    print e 
    newsocket.shutdown(socket.SHUT_RDWR) 
    newsocket.close() 
    exit() 

그래서 여기에는 OpenSSL s_client가 -connect 127.0.0.1:240

와 함께 테스트된다 : 여기서 코드이다 ERRNO 336,265,218] _ssl.c : 351 오류 : 140B0002 : SSL 루틴 : SSL_CTX_use_PrivateKey_file : 시스템이 이미 허가 및 경로 당신의 certfile 및 키 파일에 문자열에서

답변

4

을 확인

lib 디렉토리, 당신은 탭의 별칭입니다 "\t",를 사용합니다. 하나, ("\\" 등) 백 슬래시를 이스케이프 os.path.join, 또는 raw strings 사용

connstream = ssl.wrap_socket(newsocket, server_side=True, 
          certfile=r"E:\oromenetwork\test\cert", 
          #  v^ 
          keyfile=r"E:\oromenetwork\test\key", 
          ca_certs=None,ssl_version=ssl.PROTOCOL_TLSv1)