我试图签署一个现有的PDF与证书,是位于我的本地个人电脑商店。基于这篇文章,我确定了X509Certificate2类型的正确证书。
对于签名,我想使用EvoPdf (在这里我不可能使用iTextSharp;这会使事情变得更容易),而签名演示使用的是一个DigitalCertificate,它不提供信息(特别是在两个类中几乎完全不同的subject属性),我需要标识正确的证书(我可以手动从EvoPdf中识别正确的证书,但这对我没有多大帮助,因为证书可能会改变,我需要一个健壮和持久的解决方案。我现在所做的是第一步:从X509Store(StoreName.My)中识别正确的证书,并保持SerialNumber (类型为String),并将其与DigitalCertificate的SerialNumber (类型为Byte[])进行比较,这是获得匹配的最佳更改:
foreach (DigitalCertificate cert in DigitalCertificatesStore.GetCertificates(CertSystemStore.PersonalCertificates))
{
var serialNumber = String.Empty;
foreach (var b in cert.SerialNumber)
{
serialNumber = $"{b:X2}{serialNumber}";
}
if (serialNumber != x509Cert.SerialNumber)
{
continue;
}
this.pdfCertificate = cert;
break;
}有人能找到更好的解决办法吗?(如何)我可以直接将x509证书与EvoPdf一起使用?
发布于 2022-11-15 15:30:04
在.NET 5/6中,我使用的代码如下:
// Get Personal Certificates with EvoPDF API
var evoCerts = DigitalCertificatesStore.GetCertificates();
byte[] evoSerNum = Convert.FromHexString(x509Cert.SerialNumber).Reverse().ToArray();
// Match x509Cert and evoCert by SerialNumber
this.pdfCertificate = evoCerts.GetCertBySerialNumber(evoSerNum); https://stackoverflow.com/questions/57671896
复制相似问题