373.7. 서명 된ECDHE의 Siblings as Siblings as detached XML Signatures
2.14.0 이후
서명이 서명된 요소의 형제인 분리된 서명을 만들 수 있습니다. 다음 예제에는 두 개의 분리된 서명이 포함되어 있습니다. 첫 번째 서명은 C 요소에 대한 서명이고 두 번째 서명은 요소 A 에 대한 것입니다. 서명은 중첩 됩니다. 두 번째 서명은 첫 번째 서명을 포함하는 A 요소에 대한 것입니다.
분리된 XML 서명의 예
<?xml version="1.0" encoding="UTF-8" ?>
<root>
<A ID="IDforA">
<B>
<C ID="IDforC">
<D>dvalue</D>
</C>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
Id="_6bf13099-0568-4d76-8649-faf5dcb313c0">
<ds:SignedInfo>
<ds:CanonicalizationMethod
Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
<ds:SignatureMethod
Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<ds:Reference URI="#IDforC">
...
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>aUDFmiG71</ds:SignatureValue>
</ds:Signature>
</B>
</A>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"Id="_6b02fb8a-30df-42c6-ba25-76eba02c8214">
<ds:SignedInfo>
<ds:CanonicalizationMethod
Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
<ds:SignatureMethod
Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<ds:Reference URI="#IDforA">
...
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>q3tvRoGgc8cMUqUSzP6C21zb7tt04riPnDuk=</ds:SignatureValue>
</ds:Signature>
<root>
이 예제에서는 여러 요소를 서명할 수 있으며 각 요소에 대해 시그니처가 형제로 생성됨을 보여줍니다. 서명할 요소에는 유형 ID의 속성이 있어야 합니다. 특성의 ID 유형은 XML 스키마에 정의해야 합니다(옵션 schemaResourceUri참조). 유형 ID 특성을 가리키는 XPATH 표현식 목록을 지정합니다(옵션 xpathsToIdAttributes참조). 이러한 속성은 서명할 요소를 결정합니다. 이 요소는 keyAccessor Bean에서 제공되는 동일한 키로 서명됩니다. 상위(예: 더 깊은) 계층 수준이 있는 요소가 먼저 서명됩니다. 예제에서 요소 C 는 요소 A 앞에 서명됩니다.
Java DSL 예
from("direct:detached")
.to("xmlsecurity:sign://detached?keyAccessor=#keyAccessorBeant&xpathsToIdAttributes=#xpathsToIdAttributesBean&schemaResourceUri=Test.xsd")
.to("xmlsecurity:verify://detached?keySelector=#keySelectorBean&schemaResourceUri=org/apache/camel/component/xmlsecurity/Test.xsd")
.to("mock:result");
Spring 예
<bean id="xpathsToIdAttributesBean" class="java.util.ArrayList">
<constructor-arg type="java.util.Collection">
<list>
<bean
class="org.apache.camel.component.xmlsecurity.api.XmlSignatureHelper"
factory-method="getXpathFilter">
<constructor-arg type="java.lang.String"
value="/ns:root/a/@ID" />
<constructor-arg>
<map key-type="java.lang.String" value-type="java.lang.String">
<entry key="ns" value="http://test" />
</map>
</constructor-arg>
</bean>
</list>
</constructor-arg>
</bean>
...
<from uri="direct:detached" />
<to
uri="xmlsecurity:sign://detached?keyAccessor=#keyAccessorBean&xpathsToIdAttributes=#xpathsToIdAttributesBean&schemaResourceUri=Test.xsd" />
<to
uri="xmlsecurity:verify://detached?keySelector=#keySelectorBean&schemaResourceUri=Test.xsd" />
<to uri="mock:result" />