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

Certificate 是否可以确定消息是否已由同一链中的证书签名?,certificate,keychain,sign,Certificate,Keychain,Sign,我有一个像这样的证书链 Root cert -> Intermediate (sub-root) cert -> leaf cert 如果我使用叶证书签署消息/令牌并将其发送到目的地 现在,在目的地,我只有中间证书。是否可以检查消息是否已由leaf(或与中间证书属于同一链的证书)签名?证书有一个颁发者,即签名者。谈到您的场景,它是中间的。因此,当查看叶证书时,您将看到IssuerName,它是用于签名的证书的使用者名称。此外,您可能会发现一个授权密钥标识器(AKI),它是一个扩展,

我有一个像这样的证书链

Root cert -> Intermediate (sub-root) cert -> leaf cert
如果我使用叶证书签署消息/令牌并将其发送到目的地


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

证书有一个颁发者,即签名者。谈到您的场景,它是中间的。因此,当查看叶证书时,您将看到
IssuerName
,它是用于签名的证书的使用者名称。此外,您可能会发现一个
授权密钥标识器
(AKI),它是一个扩展,但是加密证据,而不仅仅是一个字符串(发卡机构名称)。这些值在某个CA颁发的每个证书上都是相同的

首次颁发的证书:

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


如果我理解正确,您可以使用叶证书对邮件/令牌进行签名,并将其发送到目的地,而不发送您使用的叶证书(因此您只发送签名本身),并且收件人事先也不知道该证书

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

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

我假设PKCS#7签名通常包括证书,但不能包含它,甚至可以包含完整的链。如果没有证书,或者更好地说是它的公钥,就不可能验证签名。。。