2017-12-08 14 views
0

Java 6에서 지금까지 사용할 수있는 Java XML 디지털 서명 API를 사용하는 XML 파일에 서명하고 있습니다.
웹 출처 : http://www.oracle.com/technetwork/articles/javase/dig-signature-api-140772.html
Java 서명 XML 파일 - 서명 안에 표준 XML 서명 네임 스페이스가 없습니다.

시그니처는 다음과 같습니다 :

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">[...]</Signature> 

지금 내가 알고 싶은, 어떤 방법으로, XML 파일에 서명이 xmlns="http://www.w3.org/2000/09/xmldsig#"을 결정하는 API를 방지하기 위해,이 내 태그 안에, 난 그냥 다음 가질 수 있도록 :

<Signature>...</Signature> 

나는 어떤 단서에 매우 감사 해요.

답장을 보내 주셔서 감사합니다. 내 문제에 대해 더 자세히 설명해 줄 수 있습니다. 다음과 같은 XML 구조가 있습니다.

<?xml version="1.0" encoding="UTF-8" ?> 
<tests xmlns="schema1"> 
<test> 
</test> 
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> 
</Signature> 
</tests> 

어떻게하면됩니까? 제 3 자 시스템에서 필자가 직접 서명 구조를 정의해야하는 스키마에 대해 확인해야하므로 내 두 개의 xmln이 내 안에 있어야합니다.

답변

0

XML 표준 당 사용자는 <Signature>에 대해 정의 된 네임 스페이스가 있어야합니다. 요소이므로 접두사가있는 부모 요소에 있거나 외부에있을 수 있습니다. 이름 :

<rootElemnt xmlns:sig="http://...."> 
    <sig:Signature>.... 

하지만, 왜 귀찮게합니까? 그것 없이는 <Signature> 태그는 부모 요소의 기본 네임 스페이스에 속하고 적절한 네임 스페이스에 속하지 않습니다.

업데이트 두 개의 네임 스페이스가있는 경우 xmlns 선언을 두 개 가져야합니다. 하나는 기본값 인 두 번째 접두사가 있어야합니다. 또는 둘 모두에 접두어가 있어야합니다. 사용자 정의 요소 xmlns="schema1"에있는 경우

, 난 당신이 그것은 당신이 전체 XML을 구축하는 방법에 따라 달라 <sig:Signature xmlns:sig="http://www.w3.org/2000/09/xmldsig#"> 또는

<sch1:tests xmlns:sch1="schema1"> 
    <sch1:test> 
    </sch1:test> 
    <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> 
    ... 
    <sch1:customElement>...</sch1:customElement> 
    </Signature> 
</sch1:tests> 

만드는 중 하나를 어떻게 볼 필요가 있다고 생각합니다. 죄송합니다. Java XML Digital Signature API에서이를 수행하는 방법을 모르지만 다른 모든 도구는 네임 스페이스 접두사를 처리 할 수 ​​있습니다.

다음과 같이 표시 할 수도 있습니다.

<tests xmlns="schema1"> 
    <test> 
    </test> 
    <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> 
    ... 
    <sch1:customElement xmlns:sch1="schema1">...</sch1:customElement> 
    </Signature> 
</tests> 

아마도 만들면 기본적으로 그렇게 보일 것입니다,하지만 난 생각하지 않을 경우 별도로 XML로 customElement 마샬링 후 그렇게해야합니다 서명에 추가합니다.

+0

감사합니다. @ 바딤 어쩌면 당신은 내 추가 사항을 볼 수 있습니다. –