次のように、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に保存した後)、私のローカル ユーザー アカウントではうまく機能しますが、サービス (今回はサービス アカウントを選択し、私のサービスを選択) では機能しません。 . 同じコードを実行すると、適切な証明書が見つかりません。つまり、null です。さらに、をスローしますが、これは 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) サービスのインストールまたは実行方法について何かを変更する必要があると想定しています。たとえば、別の ID を指定したり、UserInteraction を有効にしたりするなどです。現在、それはLocalService を使用し、UserInteraction を無効にして実行します。