0

私は一般的にネットワーキングに本当に慣れていないので、pythonサーバーとクライアントの間で簡単な交換をセットアップしようとしています。

これはサーバーのコードです

import socket, ssl

def do_something(connstream, data):
print "HALLO"

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', 10024))
bindsocket.listen(5)


while True:
    newsocket, fromaddr = bindsocket.accept()
    print "Setting up connection"
    connstream = ssl.wrap_socket(newsocket,
                             server_side=True,
                             ca_certs=None,
                             certfile="cert.pem",
                             keyfile="privatekey.pem",
                             ssl_version=ssl.PROTOCOL_TLSv1)
    try:
        deal_with_client(connstream)
    finally:
        connstream.shutdown(socket.SHUT_RDWR)
        connstream.close()

client.py のコードは次のとおりです。

 import socket, ssl

 clientsocket = socket.socket()
 ssl_sock = ssl.wrap_socket(clientsocket,
                       certfile="cert.pem",
                       cert_reqs=ssl.CERT_REQUIRED)
 ssl_sock.connect(('127.0.0.1', 10024))

 print ssl_sock.getpeername()
 print ssl_sock.getpeercert()

 data = ssl_sock.recv(1024)
 ssl_sock.close()

 print 'Received', repr(data)

openssl を使用して「cert.pem」と「privatekey.pem」を生成しました。

Traceback (most recent call last):
 File "server.py", line 30, in <module>
    ssl_version=ssl.PROTOCOL_TLSv1)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 344, in wrap_socket
    ciphers=ciphers)
   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 121, in __init__
    self.do_handshake()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 283, in do_handshake
    self._sslobj.do_handshake()
 ssl.SSLError: [Errno 8] _ssl.c:499: EOF occurred in violation of protocol

どういうわけか、もっと知っている人が私を正しい方向に向けることができるのではないかと思っていました. 私は本当にSSLを使用してこれを行いたいのですが、それがより良いアプローチである場合は、TLSに切り替えても構わないと思います.

4

1 に答える 1

0

ソケットが互換性のある ssl バージョンで実行されていない可能性があります。クライアントにも「ssl.PROTOCOL_TLSv1」互換バージョンを配置する必要があります (または、サーバーから削除してデフォルト値も使用します)。グーグルでソケット通信の多くの例を見つけることができます

于 2013-06-21T14:18:39.390 に答える