Certificate 使用RSA为DTLSv1.0证书验证消息签名的内容

Certificate 使用RSA为DTLSv1.0证书验证消息签名的内容,certificate,rsa,dtls,Certificate,Rsa,Dtls,我正在使用dtlsv1.0与服务器通信。我很难准确地知道如何生成证书验证消息。我一直在阅读RFCs(dtlsv1.0基于它),但对于这个特定的消息,它们有些不具体 我看到消息的结构如下,我知道签名类型是RSA 签名类型在7.4.3中定义 CertificateVerify.signature.md5_hash MD5(handshake_messages); CertificateVerify.signature.sha_hash SHA(handshake_messa

我正在使用
dtlsv1.0
与服务器通信。我很难准确地知道如何生成
证书验证消息
。我一直在阅读
RFCs
(dtlsv1.0基于它),但对于这个特定的消息,它们有些不具体

我看到消息的结构如下,我知道签名类型是
RSA

签名类型在7.4.3中定义

CertificateVerify.signature.md5_hash
      MD5(handshake_messages);

CertificateVerify.signature.sha_hash
      SHA(handshake_messages);
根据我所读到的内容,它似乎是由先前发送和接收的所有消息的
sha1
散列和
md5
散列(直到并不包括此消息)以及签名的
RSA
串联而成

然而,让我有点困惑的是如何组合消息来散列它们

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

TLS1.1的RFC说

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

但是对于DTL的特定部分,如
消息_seq
片段_偏移量
,以及
片段_长度
,我是否包括它们

更新:
我曾尝试过做节目的RFC(意思是保持消息的碎片化,使用所有握手字段,包括
DTLS
特定字段,不包括初始
客户Hello
Hello验证请求
消息),但我仍然收到“错误签名”。我确实认为我的签名是正确的,因此我认为我连接了不正确的要签名的数据。

对于DTLS 1.2,它是定义的。阅读RFC4347,我的印象是,RFC6347没有区别,它澄清了计算


这实际上似乎对我不起作用(或者我错过了其他东西)。我使用握手消息的所有部分(类型、长度、序列、片段偏移量和片段长度),我将每个片段视为自己的消息(RFC显示完成的MAC需要重新组装片段,但不需要验证证书)。我要确保排除没有cookie的客户机hello和hello验证请求。我确实相信我的签名是正确的,但我继续得到“糟糕的RSA签名”。我们确定1.2只是在澄清吗?我似乎在别处找不到任何信息>(RFC显示完成的MAC需要重新组装片段,但不需要验证证书)。也许你可以向IETF TLS邮件列表询问。我只使用/支持DTLS 1.2 RFC6347。在那里,片段总是被重新组装,也是为了验证证书。“我们确定1.2只是在澄清吗?”,不,我不确定。这只是我的假设,主要是因为新的RFC6347包含一个解释,为什么碎片在用于sha之前被重新组装。我不确定,你为什么要坚持使用碎片。我将尝试使用重新组装的握手消息来验证证书。在询问IETF tls邮件列表之前,这可能是一条“捷径”。我以为我已经尝试使用重新组装的邮件,但我一定是出了什么问题。我又试了一次,它实际上起了作用。非常感谢。
CertificateVerify.signature.md5_hash
      MD5(handshake_messages);

CertificateVerify.signature.sha_hash
      SHA(handshake_messages);