#python #openssl #pyopenssl
#python #openssl #pyopenssl
Вопрос:
Мне нужно знать точный формат данных в ssl-потоке. Я знаю только, что в потоке есть какой-то формат, подобный json.
Чтобы получить данные, я выключил сервер и запустил свой собственный ssl-server-socket:
import socket
import ssl
HOST, PORT = '0.0.0.0', 44444
SERVER_KEY = ...
SERVER_CERT = ...
SERVER_CA_CERT = ...
def write_to_file(filename, buf):
fp = open(filename, 'wb')
fp.write(buf)
fp.close()
#create server socket
Ssock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#wrap server socket
SwrappedSocket = ssl.wrap_socket(Ssock, certfile=SERVER_CERT, server_side=True, keyfile=SERVER_KEY, ca_certs=SERVER_CA_CERT)
SwrappedSocket.bind(('0.0.0.0', PORT))
#listen for client connections
SwrappedSocket.listen(5)
#accept conncetions
print "start listening on port: " str(PORT)
i = 0
while 1:
(clientsocket, address) = SwrappedSocket.accept()
print "Connection from client established"
in_buffer = clientsocket.recv(66000)
filename = '/root/received_data' str(i) '.log'
write_to_file(filename, in_buffer)
i =1
но во время рукопожатия:
Traceback (most recent call last):
File "intercept.py", line 68, in <module>
(clientsocket, address) = SwrappedSocket.accept()
File "/usr/lib/python2.7/ssl.py", line 840, in accept
server_side=True)
File "/usr/lib/python2.7/ssl.py", line 350, in wrap_socket
_context=self)
File "/usr/lib/python2.7/ssl.py", line 566, in __init__
self.do_handshake()
File "/usr/lib/python2.7/ssl.py", line 788, in do_handshake
self._sslobj.do_handshake()
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:581)
Комментарии:
1. Вероятно, это означает, что клиент закрыл соединение во время рукопожатия, поэтому это может быть проблемой с клиентом, а не с сервером.
2. Что может быть причиной того, что клиент закрывает соединение? Я передаю правильный сертификат / ключ / ca. И клиент работает с исходным сервером.
3. Возможно, вам следует добавить более подробную информацию о клиенте и старом сервере к вашему вопросу или попытаться подключиться к старому и новому серверу с помощью
openssl s_client
и сравнить результаты, может быть, тогда вы увидите, что отличается.