【问题标题】:Verify XMLDSIG chain in .NET?在 .NET 中验证 XMLDSIG 链?
【发布时间】:2012-02-06 14:42:16
【问题描述】:

我正在使用 XMLDSIG 到 sign a configuration file。我希望我的 CA 能够颁发可用于签署 XML 的密钥。然后,我想验证 XML 是否使用我的 CA 颁发的密钥进行签名。

如何从SignedXml 对象中获取签名证书?如何按照证书链返回特定 CA?

请注意,我的 CA 的公钥将存储在我的可执行文件中,而不是证书存储中。

【问题讨论】:

    标签: .net x509 xml-dsig


    【解决方案1】:

    要将任意证书附加到 XML-DSIG 文件,请添加 <X509Data> element。要在 .NET 中执行此操作,请使用:

    signedXml.KeyInfo.AddClause(
        new KeyInfoX509Data(certificate, X509IncludeOption.WholeChain));
    

    要从 XML 文件中提取证书,请使用:

    var certificates = signedXml.KeyInfo.OfType<KeyInfoX509Data>().Single();
    

    然后您可以使用以下方法验证链:

    var chain = new X509Chain();
    chain.ChainPolicy.ExtraStore.AddRange(
        certificates.Cast<X509Certificate2>().ToArray());
    var chainIsOk = chain.Build(signingCertificate);
    

    要确定实际用于签名的证书(以及 signingCertificate 的值),您需要找到 matches the keyCheckSignatureReturningKey 返回的包含证书。

    【讨论】:

    • 刚刚为我节省了大约一天的研究时间。 :)
    • @Spence 更像是 3-4 天 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 2011-01-31
    • 2013-02-20
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多