SignedXml.CheckSignature()始终为false

时间:2016-12-08 12:57:39

标签: c# xml ssl certificate signedxml

我收到了附有证书的第三方签名的XML。我还在本地拥有此证书的副本以验证序列号是否相同,因此我确定XML是由我在本地使用的相同证书签名的。

但是SignedXml.CheckSignature()始终返回false,因此验证始终失败。这是为什么?根据我所理解的,签名XML始终包含其签名的证书副本,无参数方法尝试根据此证书验证签名。难道这不总是有用吗?

仅供参考:在每种情况下,使用本地证书副本验证签名也会失败。

2016年12月9日编辑

进一步检查后,我看到签名的XML已经使用两个转换进行了签名,但在验证时我只能指定一个单一的规范化方法。示例XML附在下面。

问题可能是由https://blogs.msdn.microsoft.com/alejacma/2010/08/18/creating-signatures-with-signedxml-following-ebxml-standard/中提到的以cid为前缀的引用引起的吗?这是一篇相当古老的文章,从那时起事情就会发生变化。

cmake_minimum_required(VERSION 2.8)
FIND_PACKAGE(SWIG REQUIRED)
INCLUDE(${SWIG_USE_FILE})

FIND_PACKAGE(PythonLibs)
INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH})

INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})

SET(CMAKE_SWIG_FLAGS "-Wall" "-c++")

SET_SOURCE_FILES_PROPERTIES(feature.i PROPERTIES CPLUSPLUS ON)
SET_SOURCE_FILES_PROPERTIES(feature.i PROPERTIES SWIG_FLAGS "-includeall")
SWIG_ADD_MODULE(feature_wrapper python feature.i)
SWIG_LINK_LIBRARIES(feature_wrapper ${PYTHON_LIBRARIES})

代码:

<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
    <ds:SignedInfo>
        <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/RECxml-c14n-20010315"></ds:CanonicalizationMethod>
        <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"></ds:SignatureMethod>
            <ds:Reference URI="">
                <ds:Transforms>
                    <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#envelopedsignature"></ds:Transform>
                    <ds:Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"></ds:Transform>
                </ds:Transforms>
                <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></ds:DigestMethod>
                    <ds:DigestValue>RJ2QdODr5ADUs9RAR9aT8NFdqds=</ds:DigestValue>
            </ds:Reference>
            <ds:Reference URI="cid:ebxhmpayload111@example.com">
                <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></ds:DigestMethod>
                    <ds:DigestValue>j1BG/SCN4Z74inL530u2SYGWKtE=</ds:DigestValue>
            </ds:Reference>
        </ds:SignedInfo>
    <ds:SignatureValue>ZRLxNWAWqxvW1d9vdtZhQ3cII02NhUk7H8ugAML0cIrP0noebUMikAOuX6fNIVTvi4kLAeb3FfQqBJD6heRWrM0lMZsA0rIHVOtH3fc6JqwUWRuiS9zzuKIx5ah8O0yU1ZkeS5b6fTJtX36+idO5KvTZc2az7fpWhPLcrfcyT4A=
    </ds:SignatureValue>
    <ds:KeyInfo>
        <ds:X509Data>
            <ds:X509Certificate>*redacted*</ds:X509Certificate>
        </ds:X509Data>
    </ds:KeyInfo>
</ds:Signature>

0 个答案:

没有答案