После того, как было указано, что клиент запрашивает расширенный главный секрет, я также отвечаю, что расшифровываю главный секрет, как если бы мы не использовали расширенный главный секрет, как определено. I RFC7627 Я изменил кодировку на своем сервере, чтобы ответить обратно, чтобы не использовать расширенный мастер-секрет и пробежал мою схему, описанную в моих предыдущих статьях часть 6 , часть 7 и последняя часть 8
Выполнив тот же процесс, что и набросок с расширенным главным секретом, не отправляемый сервером, я расшифровал зашифрованное сообщение о рукопожатии. Я верю правильно, поскольку вижу (14) клиента завершенным и надлежащим заполнением
$cat encmsg.bin | openssl aes-256-cbc -d -K $key -iv $iv -nopad |xxd
0000000: 1400 000c a5de 1f35 2324 e871 be46 82a0 .......5#$.q.F..
0000010: a1a0 d659 86b6 1c7f 043d d548 9a62 1e9d ...Y.....=.H.b..
0000020: 23c6 f8d5 0b0b 0b0b 0b0b 0b0b 0b0b 0b0b #...............
Для подтверждения концепции я хочу пропустить проверку подтвержденного завершенного для клиента и перейти непосредственно к ответу с моим сообщением о завершении сервера. Я верю, чтобы рассчитать это, я хочу кормить OpenSSL, как я был где
данные =
handshake_messages
All of the data from all messages in this handshake (not
including any HelloRequest messages) up to, but not including,
this message. This is only data visible at the handshake layer
and does not include record layer headers
Но я немного запутался в этом, потому что RFC также говорит в том же разделе:
The value handshake_messages includes all handshake messages starting
at ClientHello up to, but not including, this Finished message.
Я считаю, что это исключило бы первые 5 байтов 16 03 03 00 ?? Я хотел бы увидеть заголовок, и хотя приветственные сообщения указывают на протокол рукопожатия, они также исключены, поэтому я бы включил в свой журнал wireshark: сертификат, обмен ключами клиента и зашифрованное сообщение рукопожатия (но, поскольку я немного запутался, это может начаться с clienthello, а также включают serverhello в основном все до этого момента, за исключением записей заголовка)
затем вызов OpenSSL
seed = "server finished"+data (data=above)
key = master secret
openssl dgst -sha256 -mac hmac -macopt hexkey:$key <seed -binary >a1
Это тогда зашифровано и отправлено назад, поскольку мое сообщение шифрованного рукопожатия моего сервера правильно?