2015-04-24 1 views
2

Предположим, у меня есть такой XML:XMLDSig: Должен ли я указать ссылки URI в оболочечных подписи

<?xml version="1.0" encoding="UTF-8"?> 
<CATALOG> 
    <CD> 
     <TITLE>Empire Burlesque</TITLE>      
     <ARTIST>Bob Dylan</ARTIST> 
     <COUNTRY id="123">USA</COUNTRY> 
     <COMPANY>Columbia</COMPANY> 
     <PRICE>10.90</PRICE> 
     <YEAR>1985</YEAR> 
    </CD>  
    <CD> 
     <TITLE>Hide your heart</TITLE> 
     <ARTIST>Bonnie Tyler</ARTIST> 
     <COUNTRY>UK</COUNTRY> 
     <COMPANY>CBS Records</COMPANY> 
     <PRICE>9.90</PRICE> 
     <YEAR>1988</YEAR> 
    </CD> 
    <CD> 
     <TITLE>Greatest Hits</TITLE> 
     <ARTIST>Dolly Parton</ARTIST> 
     <COUNTRY>USA</COUNTRY> 
     <COMPANY>RCA</COMPANY> 
     <PRICE>9.90</PRICE> 
     <YEAR>1982</YEAR> 
    </CD> 
</CATALOG> 

После подписания я получаю:

<?xml version="1.0" encoding="UTF-8"?> 
<CATALOG> 
    <CD> 
     <TITLE>Empire Burlesque</TITLE>      
     <ARTIST>Bob Dylan</ARTIST> 
     <COUNTRY id="123">USA</COUNTRY> 
     <COMPANY>Columbia</COMPANY> 
     <PRICE>10.90</PRICE> 
     <YEAR>1985</YEAR> 
     <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
      <ds:SignedInfo> 
       <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/> 
       <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-md5"/> 
       <ds:Reference URI=""> 
        <ds:Transforms> 
         <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/> 
         <ds:Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/> 
        </ds:Transforms> 
        <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#md5"/> 
        <ds:DigestValue>C6i9GSNZ8seoXxfuFc482Q==</ds:DigestValue> 
       </ds:Reference> 
      </ds:SignedInfo> 
      <ds:SignatureValue> 
d/ufAnYK35PKUdi+O6DUytV+36OGAr5meHXq2qoOUp+zO1Q5HbJvIs01qlPT9oKiBEi2QiAF3Sya 
ZVwi4hEI9xHkLiewmOxPo1KgVfJ1Ir2RPpkdegFYFx9QCMR4Z1M7zTkijCKv9ncWR4MYjOAfDrKf 
fbvUX3AbRHlUYJj6M4QcrQUuBPhSqo4TcxtfblNqmKUT+141+sLSsuM2xy24YeyF7NUff9tirCiP 
KgBHpFGtiJAdxugAlzqHaR9CP2kRA2Sg046NBo2yO/nTDfUKqquZm4aaZsLWbvKJYvrgqD4YgH4M 
FFpK5ChgYa4oi7f9BAYxOFcY9f1OCHsvpdCbpw== 
      </ds:SignatureValue> 
      <ds:KeyInfo> 
       <ds:KeyValue> 
        <ds:RSAKeyValue> 
         <ds:Modulus> 
1Bphf/ypmjIyIbWKBS39IaBpUn/e7oylpexMhTtsKYnbKuufzDhReR15oJ9cavVa9BkSSmLjaLxt 
jIzIswaoW0SnTR4VySpbkujoeCSzoIGTlQ2ae96vT4sZURferQ8GpS/iExpblSX5knD8TBDCt+MK 
UNTpJzPy6HdYGBtKfcc5C0STt07WGnhnOYYrIht1y/blne2Ec90dCt3hQmInqbBUbp1Ngl4V7xXH 
rSifvQ6X+Dzg10l/vx92vFwBM3we+7p8jbDey9KLWS44W/AXmcxmuBo4kTN4fS9Ld/ctMR7ATbP2 
frjcHJoecsQs3tnK1VZjrnnQUsZxDqjWhYDx2w== 
         </ds:Modulus> 
         <ds:Exponent>AQAB</ds:Exponent> 
        </ds:RSAKeyValue> 
       </ds:KeyValue> 
       <ds:X509Data> 
        <ds:X509Certificate> 
MIICwTCCAamgAwIBAgIITKhEP4iHnaQwDQYJKoZIhvcNAQENBQAwDjEMMAoGA1UEAwwDa2V5MB4X 
DTE1MDQwMjIxMDAxN1oXDTI1MDQwMjIxMDAxN1owDjEMMAoGA1UEAwwDa2V5MIIBIjANBgkqhkiG 
9w0BAQEFAAOCAQ8AMIIBCfKCAQEA1Bphf/ypmjIyIbWKBS39IaBpUn/e7oylpexMhTtsKYnbKuuf 
zDhReR15oJ9cavVa9BkSSmLjaLxtjIzIswaoW0SnTR4VySpbkujoeCSzoIGTlQ2ae96vT4sZURfe 
rQ8GpS/iExpblSX5knD8TBDCt+MKUNTpJzPy6HdYGBtKfcc5C0STt07WGnhnOYYrIht1y/blne2E 
c90dCt3hQmInqbBUbp1Ngl4V7xXHrSifvQ6X+Azg10l/vx92vFwBM3we+7p8jbDey9KLWS44W/AX 
mcxmuBo4kTN4fS9Ld/ctMR7ATbP2frjcHJoecsQs3tnK1VZjrnnQUsZxDqjWhYDx2wIDAQABoyMw 
ITAOBgNVHQ8BAf8EBAMCBLAwDwYDVR0TAQH/BAUwAwEBADANBgkqhkiG9w0BAQ0FAAOCAQEAa3VI 
zBGyt7mfHh9g9hAKYxUHkrPjiOQDoE3QP/2aZQlGMeD8OwgjZHA4d2iXLLOJt56lgQenEO2nFLxE 
/SSEc4eOFHYR170W7eRuEqIByZhtu1DDMzCVzxTF/Gu/WtTeQzhu4q1Pl9zUyYeHhLIO+HzLJCn0 
O2y6tD/E6zqqzPFSW1oXuISM4ZvFR+0wQgdgYMJa5JU6XwPvS2+7y2B28JFBUq90S4a4FVj65UT5 
qrcgzi4Z2YF2phAD7Jkq3Oqdedmh9q1mg2VFg7v2/Kn+McTLSb0uX7svXMOr2IhZ1FppziQYx3UN 
XPrBbbomwNITW6R56wCmB2nAcp93f9xrKw== 
        </ds:X509Certificate> 
       </ds:X509Data> 
      </ds:KeyInfo> 
     </ds:Signature> 
    </CD>  
    <CD> 
     <TITLE>Hide your heart</TITLE> 
     <ARTIST>Bonnie Tyler</ARTIST> 
     <COUNTRY>UK</COUNTRY> 
     <COMPANY>CBS Records</COMPANY> 
     <PRICE>9.90</PRICE> 
     <YEAR>1988</YEAR> 
    </CD> 
    <CD> 
     <TITLE>Greatest Hits</TITLE> 
     <ARTIST>Dolly Parton</ARTIST> 
     <COUNTRY>USA</COUNTRY> 
     <COMPANY>RCA</COMPANY> 
     <PRICE>9.90</PRICE> 
     <YEAR>1982</YEAR> 
    </CD> 
</CATALOG> 

ли тот факт, что <Signature> окутан под <CD> означает, что он подписывает именно этот элемент, или из-за <ds:Reference URI=""> это означает, что весь XML подписан? От чтения спецификации http://www.w3.org/TR/xmldsig-core/ У меня осталось впечатление, что окутанным подписям не нужны ссылочные URI. Это верно?

ответ

6

Я думаю, что получил.

Согласно specification Ури = «»

Определяет набор узлов (минус любые узлы комментариев) ресурса XML, содержащие подпись

, который я понимаю как «Обозначает все узлы (набор узлов) документа XML, который содержит элемент <ds:Signature>. Это означает, что URI = "" < => подписанный документ.

Это заявление подкрепленные другим resource - Apache Santuario Часто задаваемые вопросы:

3.1. Что такое конвертированное преобразование? Окутанное преобразование представляет собой специальное преобразование, которое позволяет использовать так называемые огибающие подписи.

Конвертированные подписи являются сигнатурами по всему XML-документу, для , который элемент включен в сам документ. примера может быть:

<![CDATA[ 
<?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> 
    <Root> 
    <SomeContent> 
     ... 
    </SomeContent> 
     <ds:Signature> 
     <ds:SignedInfo> 
      <ds:Reference URI=""> 
      <ds:Transforms> 
       <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/> 
      </ds:Transforms> 
      </ds:Reference> 
     </ds:SignedInfo> 
     .... 
     </ds:Signature> 
    </Root> 
]]> 

Ссылка показывает, что корень и его потомки (за комментариев кроме) подписываются, но Transform элемент говорит выбросить элемент подписи (что является родителем этого задания) из потока , который должен быть подписан. Обратите внимание, что если в корне есть другие элементы подписи , они останутся нетронутыми.

...Что переводится как «The URI =» «подписанная это весь документ, который содержит <ds:Signature> и мы имеем один <ds:Transform>, который говорит, что эта подпись охвачена и поэтому они должны быть удалены до проверки»

Поэтому вывод: URI = "" и тип подписи (отдельный, окутанный, охватывающий) - это две совершенно разные вещи. URI являются указателями на части документа XML, в котором говорится, что подписано, а что нет. URI = "" означает, что весь текущий документ (тот, который содержит <ds:Signature>) подписывается. Тип подписи (отдельный, окутанный, охватывающий), который влияет на то, какие преобразования следует применять перед проверкой. В случае окутанности перед отправкой необходимо удалить все <ds:Signature>.

-1

Если ссылочный URI пуст, это означает, какой элемент будет подписан, а подпись будет окутана как дочерний элемент этого элемента. Обозначенная подпись может иметь ссылочные URI (ы), если подписывается одна часть документа, но подпись, окутанная другим элементом в документе. Например, подписывая один или все элементы <CD>, но ds:signature сам окутал <CATALOG> элемент. В вашем документе только первый элемент CD используется для вычисления значения дайджеста и подписи, но другие CD могут быть изменены без аннулирования подписи.

 Смежные вопросы

  • Нет связанных вопросов^_^