我試圖使用Syncfusion PDF 10.4進行數字簽名的PDF文檔,像這樣:如何訪問存儲在服務帳戶中的X.509證書?
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(加入證書卡扣安裝合適的證書後,我的本地用戶帳戶的偉大工程在我的用戶帳戶和它存儲在個人),但不是服務(選擇服務帳戶這次,並選擇我的服務)。運行相同的代碼會導致找不到合適的證書,即certificate
爲空。此外,PdfCertificate.GetCertificates()
會拋出一個AccessViolationException
,我認爲這是Syncfusion結束時的一個錯誤。
我可以,但是,重現相同的問題,而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中顯示的所有其他受個人),但如果我調試服務(通過運行它,然後調用System.Diagnostics.Debugger.Launch()
),我只會得到一個「CN = LOCAL SERVICE」證書,根本不會顯示在MMC中。
我假設我需要A)告訴它打開正確的證書存儲,或者B)更改服務安裝或運行方式的某些方面,例如爲其提供不同的身份,啓用UserInteraction等。目前,它使用LocalService運行並禁用UserInteraction。