我使用以下代码创建 SignedData CMS(代码大量简化)。
// use partial mode to add signer with custom message digest algorithm
CMS_ContentInfo *content = CMS_sign(NULL, NULL, NULL, NULL, CMS_PARTIAL);
if (content == NULL)
{
return -1;
}
// signer certificate, key and message digest algorithm
X509 *userX509 = <...>;
CMS_SignerInfo *signer_info = CMS_add1_signer(content, userX509, <...>, EVP_sha256(), CMS_NOSMIMECAP);
if (signer_info == NULL)
{
return -1;
}
// add intermediate certificate
if (CMS_add0_cert(content, <...>) == 0)
{
return -1;
}
// add CA certificate
if (CMS_add0_cert(content, <...>) == 0)
{
return -1;
}
// store result binary data in memory
BIO *input = BIO_new_mem_buf(<...>);
if (CMS_final(content, input, NULL, CMS_NOSMIMECAP | CMS_BINARY) == 0)
{
return -1;
}
我添加了两个额外的证书,以便在服务器上进行验证。它生成带有错误证书链的 SignedData 。我使用了不同的组合,但链总是一样的:CA证书 - &gt;中间证书 - &gt;签名者证书。
据我所知,正确的顺序是:签名者证书 - &gt;中间证书 - &gt; CA证书。
任何想法如何解决这个问题?
答案 0 :(得分:0)
CMS签名数据certificates
中的证书包含一组证书。当然,由用户/验证者从证书存储中的受信任证书开始,从中创建受信任链。