【问题标题】:How do I view "Signature hash algorithm" in C# certificate callback?如何在 C# 证书回调中查看“签名哈希算法”?
【发布时间】:2014-10-03 12:12:01
【问题描述】:

我的服务器使用以下证书进行 SSL/TLS 通信:

在我的 C# 代码中,我使用自定义证书验证回调以编程方式查看此证书的属性,如下所示:

private static bool CertificateValidationCallBack(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    // Certificate2 is better than Certificate1, right?
    X509Certificate2 cert = (X509Certificate2)certificate;            

    Console.WriteLine("Certificate Subject   : " + cert.Subject);
    Console.WriteLine("Certificate Issuer    : " + cert.Issuer);
    // So on and so forth...
}

但是,我的问题是我似乎看不到“签名哈希算法”属性。 cert.SignatureAlgorithm.FriendlyName 返回RSASSA-PSS,并且

new System.Security.Cryptography.Oid(cert.GetKeyAlgorithm()).FriendlyName)

简单地返回RSA。这些属性似乎都没有给我在 GUI 中看到的“sha256”属性。如何归还该属性?

编辑:我在 Cryptography.SE 上找到了 this 相关问题,该问题解释了 Microsoft 的证书查看器 GUI 有点不稳定且不符合标准,但如果是这种情况,那么我也想变得不稳定。我想知道如何像 GUI 一样报告“sha256”。

08/13 更新:从另一个角度来看,当我使用命令时

certutil.exe -dump cert.cer

结果摘录:

Signature Algorithm:
    Algorithm ObjectId: 1.2.840.113549.1.1.10 RSASSA-PSS
    Algorithm Parameters:
    0000  30 34 a0 0f 30 0d 06 09  60 86 48 01 65 03 04 02
    0010  01 05 00 a1 1c 30 1a 06  09 2a 86 48 86 f7 0d 01
    0020  01 08 30 0d 06 09 60 86  48 01 65 03 04 02 01 05
    0030  00 a2 03 02 01 20
            2.16.840.1.101.3.4.2.1 sha256 (sha256NoSign)
            05 00
            1.2.840.113549.1.1.8 mgf1
                2.16.840.1.101.3.4.2.1 sha256 (sha256NoSign)
                05 00
            0x20 (32)

我当然希望自己知道如何为自己找到那些 OID(sha256 的)...而不用解析实际 certutil 命令的输出。

【问题讨论】:

  • 我相信您可以通过调用CRYPT_OID_INFO 的algID 成员获得算法,该成员通过调用CryptFindOIDInfo 接收,但我看不到从BCL 获得任何访问权限。您可能必须 p/Invoke。
  • 或者您可以使用一些 ASN.1 库自己解析它,或者您可以使用可以读取它的 BouncyCastle(但我不确定)
  • @pepo 我真的希望尽可能避免使用第三方库,例如 BouncyCastle。它甚至宁愿 P/Invoke 也不愿使用 BouncyCastle。
  • P/Invoke 是这样 :)

标签: c# .net ssl-certificate x509certificate2


【解决方案1】:

根据您的 DER 字节,这些是签名算法。

2a 86 48 86 f7 0d 01 01 08

我知道这些是签名算法。 但是,我不知道如何分析这些字节。

我认为最后一个字节表示哈希算法。 我用openssl测试,最后一个字节从0b->0c->0d变了, 当我使用 sha256、sha384、sha5512 生成证书时。 等你弄清楚了,请告诉我。

【讨论】:

    猜你喜欢
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    相关资源
    最近更新 更多