【问题标题】:How can I get the signature of an X509Certificate2 object using C#?如何使用 C# 获取 X509Certificate2 对象的签名?
【发布时间】:2015-11-13 10:34:01
【问题描述】:

我需要使用 C# 从证书中获取签名和用于创建该签名的算法。

我可以这样做吗?如果是,怎么做?

【问题讨论】:

  • 证书有指纹,但没有签名,如果你仔细阅读MSDN文档,msdn.microsoft.com/en-us/library/…
  • @lex-li 证书有签名。 .Net 不允许您访问它。证书没有指纹。指纹是微软的发明,它是通过使用 SHA1 对证书内容进行哈希计算得到的。

标签: c# .net x509certificate x509 x509certificate2


【解决方案1】:

我现在正在开发具有类似功能的应用程序。我真的很失望为什么微软没有将属性签名添加到 X509Certificate2 类

我知道如何通过 bouncycastle 做到这一点

从那里拿走http://www.bouncycastle.org/csharp/

然后添加代码

using System;
using System.Security.Cryptography.X509Certificates;
using bcrypto = Org.BouncyCastle.X509;

.

var cert = new X509Certificate2("c:\\temp\\0c50000343119659.cer");
var certParser = new bcrypto.X509CertificateParser();
var privateCertBouncy = certParser.ReadCertificate(cert.GetRawCertData());
var xx = privateCertBouncy.GetSignature();
Array.Reverse(xx);
//Signature
Console.WriteLine(BitConverter.ToString(xx));
//algorithm
Console.WriteLine(privateCertBouncy.SigAlgName);
Console.ReadLine();

【讨论】:

  • 我更新了代码。这很奇怪,但我得到的字节数组顺序错误,我必须反转它。
  • 是的,我在论坛中发现并修复了它:)
【解决方案2】:

您将不得不求助于充气城堡,

https://github.com/bcgit/bc-csharp/blob/master/crypto/src/x509/X509Certificate.cs#L240

它的 X509Certificate 类使您可以访问此属性。

【讨论】:

  • 谢谢。充气城堡很棒!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-23
  • 1970-01-01
  • 2014-11-12
相关资源
最近更新 更多