是否可以确定消息是否已由同一链中的证书签名?

问题描述

我有一个看起来像这样的证书链

Root cert -> Intermediate (sub-root) cert -> leaf cert

如果我使用叶证书签署消息/令牌并将其发送到目的地。

现在,在目的地我只有中级证书。是否可以检查消息是否已由叶子(或与中间证书属于同一链的证书)签名?

解决方法

证书有一个颁发者 - 签署它的人。谈到您的方案,它是中级。因此,在查看叶证书时,您将看到 IssuerName,它是用于签名的证书的主题名称。此外,您可能会发现一个 Authority Key Iddentifier (AKI),它是一个扩展但加密证据,而不仅仅是一个字符串(发行者名称是什么)。这些值在特定 CA 颁发的每个证书上相同

enter image description here

第一个颁发的证书:

enter image description here

enter image description here

现在是 R3 颁发的另一个证书:

enter image description here

enter image description here

,

如果我理解正确,您使用叶证书签署消息/令牌并将其发送到目的地,而无需发送您使用的叶证书(因此您只发送签名本身)并且收件人事先不知道该证书。

在这种情况下,无法检查签名是否使用本身使用中间证书签名的证书执行。事实上,甚至无法检查签名是否正确,因为您缺少存储在证书中(而不是签名中)的公钥。

无论何时发送签名,您都必须确保收件人已经拥有用于签名的叶证书,或者您可以将证书与签名一起发送。然后,收件人将检查签名是否由您发送的证书正确签名,并检查证书是否已由收件人已知的中间证书签名(正如@Daniel 在他的回答中指出的那样)。