在继续处理文档之前,我有一个业务需求来检查 Open Packaging Conventions 包(它是一个 Word 文档)上的数字签名。该包在交付给客户端之前由我签名,因此我的代码需要在运行时验证该文件来自我并且也没有被更改。我有正确执行此操作的工作代码:
public static bool VerifySignature(Package package)
{
bool verified = true;
PackageDigitalSignatureManager dsm = new PackageDigitalSignatureManager(package);
VerifyResult verifyResult = dsm.VerifySignatures(false);
verified &= verifyResult == VerifyResult.Success;
var signature = dsm.Signatures.Where(s => s.Signer.Subject.Equals("MyCompanyName")).FirstOrDefault();
verified &= !ReferenceEquals(signature, null) && signature.Signer.Issuer.Equals("NameOfCA");
return verified;
}
PackageDigitalSignatureManager.VerifySignatures()
我的问题与被调用时实际发生的情况有关。我担心在证书验证期间会进行 CRL 检查或网络外部的其他调用。我有一些客户在完全无法访问互联网的机器上运行我的应用程序。如果代码依赖于互联网访问,那么它对我来说基本上是一个障碍。
我想知道两件事:
- 我的代码会导致 CRL 检查或其他可能导致网络外呼叫的情况吗?
- 如果是这样,有没有办法阻止它,或者可能有一种不同的方法来使用不同的机制可靠地验证签名?