我正在尝试使用 Syncfusion PDF 10.4 对 PDF 文档进行数字签名,如下所示:
PdfLoadedDocument document = new PdfLoadedDocument(inputStream);
PdfCertificate certificate = PdfCertificate.FindBySubject(certificateStoreType, certificateSubjectName);
PdfSignature signature = new PdfSignature(document, document.Pages[0], certificate, "Signatur");
signature.Bounds = new RectangleF(new PointF(5, 5), new SizeF(100, 100));
在使用 MMC 安装合适的证书后,这对我的本地用户帐户非常有用(为我的用户帐户添加证书管理单元并将其存储在Personal中),但不适用于服务(这次选择服务帐户,并选择我的服务) . 运行相同的代码会导致找不到合适的证书,即为空。此外,抛出一个,我认为这是 Syncfusion 端的一个错误。certificate
PdfCertificate.GetCertificates()
AccessViolationException
但是,我可以在没有 Syncfusion 代码的情况下重现同样的问题:
var store = new System.Security.Cryptography.X509Certificates.X509Store("My");
store.Open(System.Security.Cryptography.X509Certificates.OpenFlags.ReadOnly);
foreach (var item in store.Certificates)
{
…
}
以我自己的用户身份运行,证书会显示出来(就像 MMC 中Personal下显示的所有其他证书一样),但是如果我调试服务(通过运行它,然后调用System.Diagnostics.Debugger.Launch()
),我只会得到一个“CN=LOCAL SERVICE”证书,根本没有出现在MMC中。
我假设我需要 A) 告诉它打开正确的证书存储,或 B) 更改服务的安装或运行方式,例如为其赋予不同的身份、启用 UserInteraction 等。目前,它使用 LocalService 并禁用 UserInteraction 运行。