Validation 验证WCF签名的SOAP消息

Validation 验证WCF签名的SOAP消息,validation,soap,signature,canonicalization,Validation,Soap,Signature,Canonicalization,我在验证SOAP消息时间戳和正文时遇到问题 在开始编写我试图自己验证的任何代码之前,我遵循以下步骤来验证时间戳: 1) 提取时间戳标记,添加任何使用过的命名空间并将其写入文件: <u:Timestamp u:Id="uuid-cd1febd3-a76a-4148-8a3e-367aee62293d-1" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"&g

我在验证SOAP消息时间戳和正文时遇到问题

在开始编写我试图自己验证的任何代码之前,我遵循以下步骤来验证时间戳:

1) 提取时间戳标记,添加任何使用过的命名空间并将其写入文件:

<u:Timestamp u:Id="uuid-cd1febd3-a76a-4148-8a3e-367aee62293d-1" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
 <u:Created>2009-11-11T17:37:49.000Z</u:Created>
 <u:Expires>2009-11-11T17:42:49.000Z</u:Expires>
</u:Timestamp>
3) 使用openssl获取文件的SHA-1摘要

openssl sha1 timestamp.ext-c14n.xml
4) uU解码时间戳引用(jGZkqCNLTnUfbdpoFn19LSYkhts=)的base64 DigestValue,并用十六进制编辑器打开它

5) DigestValue的二进制值不同于规范化xml片段的sha1

我做错了什么

以下是完整的SOAP请求:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
    <s:Header>
        <o:Security xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" s:mustUnderstand="1">
            <u:Timestamp u:Id="uuid-cd1febd3-a76a-4148-8a3e-367aee62293d-1">
                <u:Created>2009-11-11T17:37:49.000Z</u:Created>
                <u:Expires>2009-11-11T17:42:49.000Z</u:Expires>
            </u:Timestamp>
            <o:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" u:Id="uuid-ff111e4e-b184-493f-a3a7-1cb85013440a-2">MIIB/TCCAWagAwIBAgIQx9PrVMJZiohOMYoubtFJ4jANBgkqhkiG9w0BAQQFADAVMRMwEQYDVQQDEwpSb290Q0FUZXN0MB4XDTA5MTEwNTE1NTAzN1oXDTM5MTIzMTIzNTk1OVowGTEXMBUGA1UEAxMOdGVtcENlcnRDbGllbnQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAPXXm8nHsKY7jDaAJ2MVtgj0vd15D4kAFCVrflAGCBDGxku1zVGgTppv8n7i2nJLoXkMpi4HSj9+ci78YMQOKeRq0uIN3AV39hQbjjf5RkV7QY0PYprKYcVKZrWa/LYesI4jYz+ULDnpF7Q2Euk2XFYVLTWPaWU/Zys9K1wNT/n/AgMBAAGjSjBIMEYGA1UdAQQ/MD2AEHNg0Im3hcyQVTxOx1KtRZmhFzAVMRMwEQYDVQQDEwpSb290Q0FUZXN0ghDPzOoIMA8Rkkur9od1bScFMA0GCSqGSIb3DQEBBAUAA4GBAHeTK0GedKo51ZplEfAL+7+NqU5YL9yPhyGqeMUtNBJBJUdbXfvKMZNN+wMHG72boM0HV9jiSKgdjdFDaQ5cLrpLMc48wPs+PPK4KCZynQ/qBCj91w8Vvsprk4EwjGKROGeFhq8FOO8nwukKj1dMCZWELqOPutHjAKgtKpYu4zyt</o:BinarySecurityToken>
            <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
                <SignedInfo>
                    <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></CanonicalizationMethod>
                    <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"></SignatureMethod>
                    <Reference URI="#_1">
                        <Transforms>
                            <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></Transform>
                        </Transforms>
                        <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></DigestMethod>
                        <DigestValue>GFOHIzFb+GV4fj8/sGWx2J5U7ag=</DigestValue>
                    </Reference>
                    <Reference URI="#uuid-cd1febd3-a76a-4148-8a3e-367aee62293d-1">
                        <Transforms>
                            <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></Transform>
                        </Transforms>
                        <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></DigestMethod>
                        <DigestValue>jGZkqCNLTnUfbdpoFn19LSYkhts=</DigestValue>
                    </Reference>
                </SignedInfo>
                <SignatureValue>Q6TsGUPlgzfvoh4obnpwTIM5+rG/MynC4Pr8DDkpsClkUBM4+VrR0i7bHdM51779lbLzqj01W1H3GfNehVKxwAi0c0aAKlcVUm0i3PeA2NzmdTPRHy6tHmX2yyLC5TDjhA+jmqRoU/VlWhShD7Komm/9zsyDhQKF4M92rPUo0To=</SignatureValue>
                <KeyInfo>
                    <o:SecurityTokenReference>
                        <o:Reference URI="#uuid-ff111e4e-b184-493f-a3a7-1cb85013440a-2" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"></o:Reference>
                    </o:SecurityTokenReference>
                </KeyInfo>
            </Signature>
        </o:Security>
    </s:Header>
    <s:Body u:Id="_1">
        <sayHello xmlns="urn:iPhone.Server"></sayHello>
    </s:Body>
</s:Envelope>

2009-11-11T17:37:49.000Z
2009-11-11T17:42:49.000Z
4.中国的一个研究小组的一个研究小组的一个研究小组的一个研究小组的一个研究小组的一个研究小组的一个研究小组的一个研究小组的一个研究小组的一个研究小组的一个研究小组的一个研究小组的一个研究小组的一个研究小组的一个研究小组的一个研究小组的一个研究小组在一个研究小组的一个研究小组的一个研究小组的一个研究小组在一个研究小组的一个研究小组的一个研究小组的2 2 2 9个研究小组的2个研究小组的2 2 2个研究小组的2 2 2 2个研究小组的2。2个研究小组的2。2个研究小组在一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于+ULDnpF7Q2Euk2XFYVLTWPaWU/Zys9K1wNT/n/AGMBAAGJJbimeyga1udaqq/MD2EHNG0IM3HYQVTXOX1KTRZMHFZZAVMWEQYDVQDEWPSb290Q0Q0QUXN0GHDPZOOIMA8RKKKU9OD1SCFMA0GCSQGSIB3DQEBBAAA4GBAHETK0GEDKO51ZPLEFAL7+7+NQYL9YYYPHYGMUTBKKZZNKZN+WMHg72BOK9HV9HYKQQQQQQQQDKKKKKZZZZZZZN+W4KKKKKKKKKK4KKKKZZZZZZN+W4KKKKKKKKKKKZW9KZW9KKKKKKKKKZZN7W9K
GFOHIzFb+GV4fj8/sGWx2J5U7ag=
jGZkqCNLTnUfbdpoFn19LSYkhts=
Q6TsGUPlgzfvoh4obnpwTIM5+rG/MynC4Pr8DDkpsClkUBM4+VRR0I7BHDM51779LBLZQJ01W1H3GFNEHVKXWAI0AAKLCVUM0I3PEA2NZMDTPRHY6THMX2YYLC5TDJHA+jmqRoU/VlWhShD7Komm/9ZSYDHQKF4M92RPU0TO=

我删除了标签和匹配摘要之间的所有换行符和空格。 要使用的正确XML是:

<u:Timestamp u:Id="uuid-cd1febd3-a76a-4148-8a3e-367aee62293d-1" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><u:Created>2009-11-11T17:37:49.000Z</u:Created><u:Expires>2009-11-11T17:42:49.000Z</u:Expires></u:Timestamp>
2009-11-11T17:37:49.000Z2009-11-11T17:42:49.000Z

我删除了标签和匹配摘要之间的所有换行符和空格。 要使用的正确XML是:

<u:Timestamp u:Id="uuid-cd1febd3-a76a-4148-8a3e-367aee62293d-1" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><u:Created>2009-11-11T17:37:49.000Z</u:Created><u:Expires>2009-11-11T17:42:49.000Z</u:Expires></u:Timestamp>
2009-11-11T17:37:49.000Z2009-11-11T17:42:49.000Z

为我解决了一个大问题。太多了!为我解决了一个大问题。太多了!