Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# PackageDigitalSignatureManager.VerifySignatures()是否会导致网络外调用?_C#_Digital Signature_System.io.packaging_Open Packaging Convention - Fatal编程技术网

C# PackageDigitalSignatureManager.VerifySignatures()是否会导致网络外调用?

C# PackageDigitalSignatureManager.VerifySignatures()是否会导致网络外调用?,c#,digital-signature,system.io.packaging,open-packaging-convention,C#,Digital Signature,System.io.packaging,Open Packaging Convention,我有一项业务要求,在继续处理文档之前,检查开放式包装约定包(它是Word文档)上的数字签名。包在交付给客户机之前由我签名,因此我的代码需要在运行时验证文件是否来自我,并且没有被修改。我有正确执行此操作的工作代码: public static bool VerifySignature(Package package) { bool verified = true; PackageDigitalSignatureManager dsm = new PackageDigitalSig

我有一项业务要求,在继续处理文档之前,检查开放式包装约定包(它是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检查或其他可能导致网络外呼叫的情况
  • 如果是这样的话,有没有一种方法可以阻止它,或者可能有另一种方法可以使用不同的机制可靠地验证签名
  • 是的,正确验证证书链需要调用OCSP。一些标准(如XAdES)允许将OCSP响应和CRL嵌入到文档中,形成一个自包含的包,但OPC标准中并未明确定义(尽管提到)XAdES的使用,因此不清楚各种软件将如何处理文档中的XAdES数据(即,是否使用或忽略它,或将其视为错误数据)

  • 必须进行OCSP检查,以确保验证的完整性。如果您使用其他验证机制(例如,我们的SecureBackbox产品支持office文档签名和加密),您(技术上)可以跳过此步骤,但是如果忽略跳过,则安全漏洞的可能性很小

  • 是的,正确验证证书链需要调用OCSP。一些标准(如XAdES)允许将OCSP响应和CRL嵌入到文档中,形成一个自包含的包,但OPC标准中并未明确定义(尽管提到)XAdES的使用,因此不清楚各种软件将如何处理文档中的XAdES数据(即,是否使用或忽略它,或将其视为错误数据)

  • 必须进行OCSP检查,以确保验证的完整性。如果您使用其他验证机制(例如,我们的SecureBackbox产品支持office文档签名和加密),您(技术上)可以跳过此步骤,但是如果忽略跳过,则安全漏洞的可能性很小

  • Re:我想知道两件事--

    我的代码是否会导致CRL检查或其他可能导致网络外呼叫的情况

    不:女士,在他们无限的智慧中,似乎已经将验证过程分为两部分

    从MS文档来看,VerifySignature方法似乎只检查签名和散列的格式,确保文档在签名后没有更改。MS docs在备注部分说明“此方法仅验证数字签名;不验证相关的X.509证书。VerifyCertificate方法可用于验证X.509证书。”

    接下来,您(应该)使用VerifyCertificate方法在签名时检查签名证书的吊销状态。它包括可能的“离线撤销”

    摘要:此时,您的代码没有完全验证签名,因为您没有检查签名证书的吊销状态。因此,您的代码只进行本地签名检查。从形式上讲,这些检查并不是完全的核实

    如果是的话,有什么办法可以预防吗

  • 不要验证签名证书(您现在正在执行的操作)

  • 尝试验证签名证书,但如果唯一的问题是由于系统未连接到internet而无法检查吊销状态,请向用户发送一条好消息。以下是Adobe reader在这种完全相同的情况下给出的信息:

  • 培训您的用户,使其仅在系统脱机时才预期“脱机吊销”状态。或者更好,您的代码可以检查其internet状态,如果它处于脱机状态,则可以改进验证消息

    Re:我想知道两件事--

    我的代码是否会导致CRL检查或其他可能导致网络外呼叫的情况

    不:女士,在他们无限的智慧中,似乎已经将验证过程分为两部分

    从MS文档来看,VerifySignature方法似乎只检查签名和散列的格式,确保文档在签名后没有更改。MS docs在备注部分说明“此方法仅验证数字签名;不验证相关的X.509证书。VerifyCertificate方法可用于验证X.509证书。”

    接下来,您(应该)使用VerifyCertificate方法在签名时检查签名证书的吊销状态。它包括可能的“离线撤销”

    摘要:此时,您的代码没有完全验证签名,因为您没有检查签名证书的吊销状态。因此,您的代码只进行本地签名检查。从形式上讲,这些检查并不是完全的核实

    如果是的话,有什么办法可以预防吗

  • 不要验证签名证书(您现在正在执行的操作)

  • 尝试验证签名证书,但如果唯一的问题是由于系统未连接到internet而无法检查吊销状态,请向用户发送一条好消息。以下是AdobeReader在这篇文章中给出的信息