首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PKCS #10签名是如何生成的?

PKCS #10签名是如何生成的?
EN

Cryptography用户
提问于 2016-10-19 07:52:21
回答 1查看 1.8K关注 0票数 2

我在iOS中生成证书签名请求,它没有为CSR生成提供适当的现成API。现在,我所使用的CSR生成库产生了与使用相同私钥的openssl不同的CSR签名。

签名是如何生成的?如果openssl生成的签名与我使用的库不匹配,那么您认为某个地方存在错误吗?

EN

回答 1

Cryptography用户

回答已采纳

发布于 2016-10-19 09:50:13

PKCS#10上的签名在RFC 2986中定义,特别是第4.2节(在第7页)。

签名过程由两个步骤组成:

  1. certificationRequestInfo组件的值是DER编码的,产生一个八进制字符串。

  1. 步骤1的结果根据指定的签名算法与认证请求主体的私钥签名,生成一个位字符串,即签名。

签名覆盖请求中的所有重要信息,并包括PKCS#10签名请求中的所有DER编码属性。

如果PKCS#10证书请求中有任何缺失的或附加的属性,或者如果其中的任何属性相差一位,那么签名将完全不同。这可以包括使用不同的字符串编码(可打印的ASCII字符串对UTF-8),但也包括不同的日期等。

如果要查找差异,可以对证书请求这里进行解码。在使用此工具之前,您可能必须以PEM格式剥离请求,或者将请求以DER格式转换为基本64。您还可以为此使用openssl asn1parse功能。

最后,还可以使用一种不同的签名算法,例如PKCS#1 v1.5填充和PSS填充。它们都会产生相同数量的字节。顺便说一句,PSS是不确定的(使用随机字节);如果使用它,则每次签名都会不同,而不管输入。不过,通常仍然使用PKCS#1 v1.5填充。

正如Dave提到的,验证签名正确性的最佳方法不是比较签名,而是验证签名和验证属性,可能是使用其他软件。这样,不重要的更改就不会在验证中发挥作用。

票数 1
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/40802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档