2009-11-12 6 views
0

SOAP 메시지 타임 스탬프 및 본문을 확인하는 데 문제가 있습니다.WCF 서명 된 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> 

2)를 사용 xmllint가 그것을

xmllint --exc-c14n timestamp.xml > timestamp.ext-c14n.xml 

3) 파일의 SHA-1 다이제스트를 얻을 수있는 OpenSSL을 사용하여 정규화하는

기수 uudecode를
openssl sha1 timestamp.ext-c14n.xml 

4) 의 DigestValue 소인 기준 (jGZkqCNLTnUfbdpoFn19LSYkhts =) 및 헥스 편집기

5) 의 DigestValue의 이진 값을 열은의 SHA1 다르다 canonicalized xml 조각.

내가 뭘 잘못하고 있니?

<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> 

답변

0

내가 태그와 일치하는 다이제스트 사이의 모든 줄 바꿈과 공백을 제거 :

여기에 전체 SOAP 요청입니다. 사용할 올바른 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>