Я пишу веб-сервер с Lisp для обработки HTTPS-запроса. Я выполнил TLS 1.2 и уже завершил процесс рукопожатия. Я выбрал набор шифров TLS_RSA_WITH_RC4_128_SHA. Я уже вычислил client_write_MAC_secret, server_write_MAC_secret, client_write_key, server_write_key. Эти ключи кажутся правильными, потому что я могу расшифровать сообщение «Готово» из браузера и проверить данные внутри. Я также проверяю HMAC слоя записи. Затем я отправляю с сервера сообщения «Изменить спецификацию шифра» и «Готово». Пока все работает нормально.
Затем я получил сообщение от браузера, начинающееся с #(23 3 3 1 61 ...)
. 23
означает, что это данные приложения. #(3 3)
означает TLS 1.2. #(1 61)
означает, что длина равна 256+61=317, что правильно, потому что оставшиеся данные действительно имеют длину 317 байт. Вот мой вопрос: я расшифровал эти 317 байтов с помощью RC4, используя «client_write_key», после чего я получил такие данные, как #(148 104 81 182 67 111 28 201 202 50 207 57 126 209 19 ...)
, которые не могут быть преобразованы в текст. Я думал, что должен получить что-то вроде GET / HTTP/1.1
. Что я делаю неправильно?
Спасибо.