2013-02-12 117 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.First -connect 127.0.0.1:240

在这里测试的错误:[错误336265218] _ssl.c:351错误:140B0002: SSL套路:SSL_CTX_use_PrivateKey_file:系统库

我已经检查权限和路径

回答

4

在串到你的certFile中和密钥文件,可以使用"\t",这对标签的别名。要么避开反斜杠(如"\\"),请使用os.path.joinraw 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)