Я использую DTLS v1.0
для связи с сервером. У меня возникли проблемы с определением, что именно нужно сделать, чтобы создать certificate verify message
. Я читал RFCs
( DTLSv1.0 и TLS1.1 , на которых основан DTLS v1.0), но они несколько неспецифичны, когда речь идетк этому конкретному сообщению.
Я вижу структуру сообщения, как показано ниже, и я знаю, что тип подписи RSA
.
struct {
Signature signature;
} CertificateVerify;
Тип подписи определенв 7.4.3.
CertificateVerify.signature.md5_hash
MD5(handshake_messages);
CertificateVerify.signature.sha_hash
SHA(handshake_messages);
Судя по тому, что я прочитал, кажется, что это конкатенация хеша sha1
и хеша md5
всех предыдущих сообщений, отправленных и полученных(вплоть до этого и исключая), а затем RSA
подписанный.
Часть, которая меня немного смутила, - это как собирать сообщения для их хеширования.
Использует ли он каждый фрагмент или использует повторно собранные сообщения? Кроме того, какие части сообщений он использует?
В RFC для TLS 1.1 написано
начиная с приветствия клиента, но не включая это сообщение, включая поля типа и длины сообщений рукопожатия
а как насчет конкретных частей DTLS, таких как message_seq
, fragment_offset
и fragment_length
, я могу их включить?
ОБНОВЛЕНИЕ: я пытался выполнять роль RFC для DTLS 1.2 показывает (что означает сохранение фрагментированных сообщений, используя все поля рукопожатия, включая DTLS
определенные поля, и не включая исходные Client Hello
или Hello Verify Request
сообщения), но я все еще получаю «Bad Signature». Я действительно считаю, что подписываю должным образом, поэтому я считаю, что я неправильно соединяю данные для подписи.