374.7. 서명된 XML의 표시로 분리된 XML 서명
Since 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 유형 ID를 가리키는 XPATH 표현식 목록을 지정합니다(옵션 xpathsToIdAttributes참조). 이러한 특성에 따라 서명할 요소가 결정됩니다. 요소는 keyAccessor 8080에서 제공하는 것과 동일한 키로 서명됩니다. 계층 수준이 높은 요소(예: 깊은)는 먼저 서명됩니다. 이 예제에서 요소 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" />