Alert (Level: Fatal, Description: Decode Error)
< /code>
, который вызывает TCP RST со стороны моей клиента: < /p>
CLient -> Server TCP: [FIN, ACK]
Server -> Client TCP: [ACK]
Server -> Client TLS1.3: Alert (Level: Fatal, Description: Decode Error)
Client -> Server TCP: [RST, ACK]
< /code>
rst-error < /p>
код моего сервера: < /p>
import socket, ssl
host, port = "127.0.0.1", 8086
# SSL context
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain("./Certificates/cert-server.pem", "./Certificates/cert-key.pem")
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
with context.wrap_socket(sock, server_side=True) as ssock:
ssock.bind((host, port))
ssock.listen(5)
while True:
conn, ip = ssock.accept()
from_client = ''
while True:
data = str(conn.recv(4096), encoding='utf8')
if not data:
break
print(data)
conn.send(bytes("I'm Server", encoding='utf8'))
conn.close()
break
< /code>
Мой клиент -код: < /p>
import socket, ssl
host, port = "127.0.0.1", 8086
# SSL context
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_default_certs()
# For Wireshark TLS Decryption
context.keylog_filename = "./keys.txt"
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
with context.wrap_socket(sock, server_hostname=host) as ssock:
ssock.connect((host, port))
ssock.send(bytes("I'm Client", encoding='utf8'))
from_server = str(ssock.recv(4096), encoding='utf8')
print(from_server)
< /code>
После некоторых исследований в Интернете я обнаружил, что сеанс TLS требует предупреждения о закрытии_notify < /code>, чтобы быть закрытым правильно.
Поэтому я добавил < /p>
ssock.unwrap()
< /code>
к моему клиентскому коду: < /p>
import socket, ssl
host, port = "127.0.0.1", 8086
# SSL context
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_default_certs()
# For Wireshark TLS Decryption
context.keylog_filename = "./keys.txt"
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
with context.wrap_socket(sock, server_hostname=host) as ssock:
ssock.connect((host, port))
ssock.send(bytes("I'm Client", encoding='utf8'))
from_server = str(ssock.recv(4096), encoding='utf8')
print(from_server)
# Need add this to send TLS close_notify
ssock.unwrap()
< /code>
Когда я добавляю это, проблема решается, и мой сеанс закрывается правильно: < /p>
Client -> Server TLS: Alert(Level: Warning, Description: Close Notify)
Server -> Client TCP: [ACK]
Server -> Client TCP: [FIN, ACK]
CLient -> Server TCP: [ACK]
Client -> Server TCP: [FIN, ACK]
Server -> Client TCP: [ACK]
< /code>
close_notify < /p>
Почему оператор с wation автоматически отправляет закрытие_notify, когда сокет TLS закрыт? ssock.shutdown ()
Я начинаю с Python, и я пытаюсь сделать простой сокет TLS 1.3, но у меня проблема.[code]Alert (Level: Fatal, Description: Decode Error) < /code> , который вызывает TCP RST со стороны моей клиента: < /p> CLient -> Server TCP: [FIN, ACK] Server -> Client TCP: [ACK] Server -> Client TLS1.3: Alert (Level: Fatal, Description: Decode Error) Client -> Server TCP: [RST, ACK] < /code> rst-error < /p> код моего сервера: < /p> import socket, ssl
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: with context.wrap_socket(sock, server_side=True) as ssock: ssock.bind((host, port)) ssock.listen(5)
while True: conn, ip = ssock.accept() from_client = ''
while True: data = str(conn.recv(4096), encoding='utf8') if not data: break print(data) conn.send(bytes("I'm Server", encoding='utf8'))
# For Wireshark TLS Decryption context.keylog_filename = "./keys.txt"
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: with context.wrap_socket(sock, server_hostname=host) as ssock: ssock.connect((host, port)) ssock.send(bytes("I'm Client", encoding='utf8')) from_server = str(ssock.recv(4096), encoding='utf8') print(from_server) < /code> После некоторых исследований в Интернете я обнаружил, что сеанс TLS требует предупреждения о закрытии_notify < /code>, чтобы быть закрытым правильно. Поэтому я добавил < /p> ssock.unwrap() < /code> к моему клиентскому коду: < /p> import socket, ssl
# For Wireshark TLS Decryption context.keylog_filename = "./keys.txt"
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: with context.wrap_socket(sock, server_hostname=host) as ssock: ssock.connect((host, port)) ssock.send(bytes("I'm Client", encoding='utf8')) from_server = str(ssock.recv(4096), encoding='utf8') print(from_server) # Need add this to send TLS close_notify ssock.unwrap() < /code> Когда я добавляю это, проблема решается, и мой сеанс закрывается правильно: < /p> Client -> Server TLS: Alert(Level: Warning, Description: Close Notify) Server -> Client TCP: [ACK] Server -> Client TCP: [FIN, ACK] CLient -> Server TCP: [ACK] Client -> Server TCP: [FIN, ACK] Server -> Client TCP: [ACK] < /code> close_notify < /p> Почему оператор с wation автоматически отправляет закрытие_notify, когда сокет TLS закрыт? ssock.shutdown () [/code], но это не имело никакого эффекта.
Вызов SSLEngine.unwrap(srcBB, dstBB) может неожиданно изменить исходный ByteBuffer (scrBB).
Поскольку я исследовал использованные исходные байты, я полагаюсь на srcBB продвигать свою позицию. Обычно это работает, но в какой-то момент srcBB.array()...
Я много раз слышал, что JAVA не является чисто объектно-ориентированным языком.
Но сейчас я изучаю JAVA и ясно вижу, что каждая концепция JAVA каким-то образом прямо или косвенно связан с классами или объектами.
Тогда почему это не чистый...
В течение нескольких месяцев мое веб-приложение прекрасно работало в разных версиях IE/Firefox/Chrome. Мое приложение работает на IIS 10.0. Когда я запускаю приложение из окна Windows 7 (IE 11.0.***), все работает нормально. Когда я запустил...