Python echo klient server z TLS - nie działa

0

Wygenerowałem potrzebne pliki, które są w katalogu z serwerem, o tak:

openssl genrsa -des3 -out keyfile.pem 2048
openssl req -new -key keyfile.pem -out certfile.pem

Napisałem klienta i serwer echo, z użyciem TLS. Jednak kiedy włączam serwer, potem klienta, serwer pyta o hasło (podaję prawidłowe, sprawdzałem z 100000 razy), dostaję błąd:

Traceback (most recent call last): File "echo_server.py", line 19, in <module>
connection, client_address= tls_server.accept() File "/usr/lib/python2.7/ssl.py", line 354, in accept
suppress_ragged_eofs=self.suppress_ragged_eofs), File "/usr/lib/python2.7/ssl.py", line 141, in init
ciphers) ssl.SSLError: [Errno 336445449] _ssl.c errorSSL routinesPEM lib

Piszę w pythonie 2.7, ale to samo dzieję się w 3.2 (mój os to Xubuntu 12.10).

To mój serwer:

#server side
# echo client
from socket import *
from ssl import *

#create socket
server_socket=socket(AF_INET, SOCK_STREAM)

#Bind to an unused port on the local machine
server_socket.bind(('localhost',6668))

#listen for connection
server_socket.listen (1)
tls_server = wrap_socket(server_socket, ssl_version=PROTOCOL_TLSv1, cert_reqs=CERT_NONE, server_side=True, keyfile='./keyfile.pem', certfile='./certfile.pem')

print('server started')

#accept connection
connection, client_address= tls_server.accept()
print ('connection from', client_address)

#server is not finnished
finnished =False

#while not finnished
while not finnished:


    #send and receive data from the client socket
    data_in=connection.recv(1024)
    message=data_in.decode()
    print('client send',message)

    if message=='quit':
        finnished= True
    else:

        data_out=message.encode()
        connection.send(data_out)

#close the connection
connection.shutdown(SHUT_RDWR)
connection.close()

#close the server socket
server_socket.shutdown(SHUT_RDWR)
server_socket.close()

A to klient:

#client side
# echo client
from socket import *
from ssl import *

#user is not finnished
finnished =False

#create socket
client_socket=socket(AF_INET, SOCK_STREAM)
tls_client = wrap_socket(client_socket, ssl_version=PROTOCOL_TLSv1, cert_reqs=CERT_NONE)


#connect to the echo server
tls_client.connect(('localhost',6668))

#while not finnished
while not finnished:

    #message
    message=input ('enter message:   ')

    data_out= message.encode ()

    #send data out
    tls_client.send(data_out)    

    #receive data
    data_in=tls_client.recv(1024)


    #decode message
    response= data_in.decode()
    print('Received from client:', response)

    reapet=input('yes or no?  ')


    if reapet == 'n':
        finnished= True
        client_socket.send(b'quit')



#close the socket
client_socket.shutdown(SHUT_RDWR)
client_socket.close()

Proszę o pomoc ;)

0

Jeśli ktoś miałby czas pomóc, to tu są niezbędne pliki: http://www14.zippyshare.com/v/81693819/file.html (server.py, client.py, keyfile.pem, certfile.pem), a hasło to po prostu haslo

0

Zmieniłem sposób genrowania klucza, teraz jest bez pashphrase, generowany tak:

openssl genrsa -out keyfile.pem 2048

ale nadal mam kłopot, treść błędu jednak się zmieniła:

Po stronie serwera dostaję błąd:

Traceback (most recent call last):
File "server.py", line 20, in <module>
connection, client_address= tls_server.accept()
File "/usr/lib/python2.7/ssl.py", line 354, in accept
suppress_ragged_eofs=self.suppress_ragged_eofs),
File "/usr/lib/python2.7/ssl.py", line 141, in init
ciphers)
ssl.SSLError: [Errno 336445442] _ssl.c errorSSL routinessystem lib

Po stronie klienta:

Traceback (most recent call last):
File "client.py", line 16, in <module>
tls_client.connect(('localhost',6668))
File "/usr/lib/python2.7/ssl.py", line 331, in connect
self._real_connect(addr, False)
File "/usr/lib/python2.7/ssl.py", line 324, in _real_connect
raise e
socket.error: [Errno 104] Connection reset by peer

Jakieś pomysły? :(

0

Naprawdę nikt nie wie? Mi się już skończyły pomysły ...

1 użytkowników online, w tym zalogowanych: 0, gości: 1