首页 > 解决方案 > 使用 RSA 签署 DTLSv1.0 证书验证消息的内容

问题描述

DTLS v1.0用来与服务器通信。我在弄清楚究竟要做什么来生成certificate verify message. 我一直在阅读RFCsDTLSv1.0TLS1.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签名。

让我有点困惑的是如何组装消息来散列它们。

它是使用每个片段还是使用重新组装的消息?此外,它使用消息的哪些部分?

TLS 1.1 的 RFC 说

从客户端 hello 开始直到但不包括此消息,包括握手消息的类型和长度字段

但是 DTLS 特定部分(如message_seqfragment_offsetfragment_length)呢?我是否包含它们?

更新:我已尝试按照DTLS 1.2的 RFC所示进行操作(意味着使消息保持碎片化,使用所有握手字段,包括DTLS特定字段,不包括初始Client HelloHello Verify Request消息),但我仍然收到“错误签名”。我确实相信我签名正确,所以我相信我不正确地连接数据以进行签名。

标签: certificatersadtls

解决方案


对于 DTLS 1.2,它已定义。阅读 RFC 4347,我的印象是,RFC 6347 并没有什么不同,它澄清了计算。

RFC 6347, 4.2.6。CertificateVerify 和完成的消息

RFC 4347、4.2.6。完成的消息


推荐阅读