我在iOS中生成证书签名请求,它没有为CSR生成提供适当的现成API。现在,我所使用的CSR生成库产生了与使用相同私钥的openssl不同的CSR签名。
签名是如何生成的?如果openssl生成的签名与我使用的库不匹配,那么您认为某个地方存在错误吗?
发布于 2016-10-19 09:50:13
PKCS#10上的签名在RFC 2986中定义,特别是第4.2节(在第7页)。
签名过程由两个步骤组成:
certificationRequestInfo组件的值是DER编码的,产生一个八进制字符串。签名覆盖请求中的所有重要信息,并包括PKCS#10签名请求中的所有DER编码属性。
如果PKCS#10证书请求中有任何缺失的或附加的属性,或者如果其中的任何属性相差一位,那么签名将完全不同。这可以包括使用不同的字符串编码(可打印的ASCII字符串对UTF-8),但也包括不同的日期等。
如果要查找差异,可以对证书请求这里进行解码。在使用此工具之前,您可能必须以PEM格式剥离请求,或者将请求以DER格式转换为基本64。您还可以为此使用openssl asn1parse功能。
最后,还可以使用一种不同的签名算法,例如PKCS#1 v1.5填充和PSS填充。它们都会产生相同数量的字节。顺便说一句,PSS是不确定的(使用随机字节);如果使用它,则每次签名都会不同,而不管输入。不过,通常仍然使用PKCS#1 v1.5填充。
正如Dave提到的,验证签名正确性的最佳方法不是比较签名,而是验证签名和验证属性,可能是使用其他软件。这样,不重要的更改就不会在验证中发挥作用。
https://crypto.stackexchange.com/questions/40802
复制相似问题