【问题标题】:What to sign for DTLSv1.0 Certificate Verify Message with RSA使用 RSA 签署 DTLSv1.0 证书验证消息的内容
【发布时间】:2019-10-03 13:59:03
【问题描述】:

我正在使用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 开始,直到但不包括此消息, 包括握手消息的类型和长度字段

但是像 message_seqfragment_offsetfragment_length 这样的 DTLS 特定部分呢,我要包括它们吗?

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

【问题讨论】:

    标签: certificate rsa dtls


    【解决方案1】:

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

    RFC 6347, 4.2.6. CertificateVerify and Finished Messages

    RFC 4347, 4.2.6. Finished Messages

    【讨论】:

    • 这实际上似乎对我不起作用(或者我错过了其他东西)。我正在使用握手消息的所有部分(类型、长度、序列、片段偏移量和片段长度),我将每个片段视为它自己的消息(RFC 显示 Finished MAC 需要重新组装片段但是不适用于证书验证)。我确保排除没有 cookie 的客户端 hello 和 hello 验证请求。我确实相信我签名正确,但我继续收到“坏 RSA 签名”。我们确定 1.2 只是在澄清吗?我似乎在其他地方找不到任何信息
    • >(RFC 显示 Finished MAC 需要重新组装片段,但不需要进行证书验证)。也许您尝试询问 IETF TLS 邮件列表。 IETF TLS。我只使用/支持 DTLS 1.2 RFC6347。片段总是在那里重新组装,也用于证书验证。
    • “我们确定 1.2 只是在澄清吗?”,不,我不确定。这只是我的假设,主要是因为新的 RFC 6347 包含解释,为什么片段在用于 sha 之前被重新组装。我不确定,为什么要坚持使用片段。我会尝试将重新组装的握手消息也用于证书验证。在询问 IETF tls 邮件列表之前,这可能是一个“捷径”。
    • 我以为我尝试过使用重新组合的消息,但我一定是有问题。我又试了一次,它实际上正在工作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多