【问题标题】:Why would signing credentials from a RSA-SHA512 X509Certificate2 appear to be RSA-SHA256?为什么来自 RSA-SHA512 X509Certificate2 的签名凭据似乎是 RSA-SHA256?
【发布时间】:2014-12-30 09:43:13
【问题描述】:

给定从以下命令创建的公钥/私钥对 PFX 文件:

makecert.exe -r -n "CN=TEST" -pe -sv TEST.pvk -a sha512 -len 2048 -b 01/01/2014 -e 12/31/2075 TEST.cer
pvk2pfx.exe -pvk TEST.pvk -spc TEST.cer -pfx TEST.pfx

以下 C# 代码:

X509Certificate2 cert = new X509Certificate2("TEST.pfx");
Console.WriteLine(cert.SignatureAlgorithm.FriendlyName);

var creds = new X509SigningCredentials(cert);
Console.WriteLine(creds.SignatureAlgorithm);
Console.WriteLine("Key size: {0}", creds.SigningKey.KeySize / 8);

结果如下:

sha512RSA
http://www.w3.org/2001/04/xmldsig-more#rsa-sha256
Key size: 256

我感到困惑的是,为什么在创建证书 SHA512 时签名凭据以 SHA256 的形式出现?我是不是误会了什么?

【问题讨论】:

  • 请注意:makecert.exe 工具已被弃用,您应该在支持的环境中避免使用它。

标签: .net certificate rsa sha x509certificate2


【解决方案1】:

您可能误解的是散列算法的使用位置。第一个用于在证书上创建签名。第二个是在使用属于证书的私钥签名期间使用的散列算法。那个似乎默认为 SHA-256。

请注意,Microsoft 实际上将散列算法与签名算法混淆了。也许在每个人还只使用 PKCS#1 v1.5 样式签名时这曾经是有道理的,但现在它只会让他们看起来很愚蠢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-24
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多