2013-05-21 3 views
0

xjc 및 wsimport 도구를 사용하여 클래스를 생성했습니다. 나는 필요한 모든 속성과 요소를 가진 Object를 가지고있다. 내가 보낼 데이터의 부호를 포함해야하는 SignatureType 객체가 있습니다.SOAP 요청에 서명하는 중 오류가 발생했습니다. 무결성 손실

내 루트 개체는 다음과 같습니다

는 내가 뭘 과정은
@XmlRootElement(name = "MensajePesadoFirmadoTipo") 
@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "MensajePesadoFirmadoTipo", propOrder = { 
    "signature" 
}) 
public class MensajePesadoFirmadoTipo 
    extends MensajePesadoTipo 
{ 

@XmlElement(name = "Signature", namespace = "http://www.w3.org/2000/09/xmldsig#", required = true) 
    protected SignatureType signature; 

... 

: SignatureType 제외 MensajePesadoFirmadoTipo의 모든 정보를 입력합니다. 다음으로 XML에 unmarshall하고 Java XMl Signature API를 사용합니다. 그런 다음 마샬을 다시 호출하고 WS를 호출합니다.

서명 된 XML 때문에 무결성 문제가 있습니다. WS를 호출하기 전에 마샬링 할 때 동일하지 않습니다.

XML 서명 (확인 서명) : MARSHAL 후에 XML을 인한

<ns1:MensajePesadoFirmadoTipo xmlns:ns1="urn:correos.es:ape.sne.datos.1.0" xmlns:ns2="http://www.w3.org/2000/09/xmldsig#" modalidad="1" ns1:idRef="idRef" ns1:idUnico="idUnico" tipo="NOTIFICACION"> 
... 
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
... 
</ds:Signature></ns1:MensajePesadoFirmadoTipo> 

(무결성 문제가 드 XML은 변화가) :

<ns1:MensajePesadoFirmadoTipo xmlns:ns1="urn:correos.es:ape.sne.datos.1.0" xmlns:ns2="http://www.w3.org/2000/09/xmldsig#" modalidad="1" ns1:idRef="idRef" tipo="NOTIFICACION" ns1:idUnico="idUnico"> 
... 
<ns2:Signature> 
... 
</ns2:Signature> 
</ns1:MensajePesadoFirmadoTipo> 

어떻게이 과정을 확인 할 수 있습니다 ?? 도와주세요!!!

감사합니다.

+0

그러나 문제는 무엇입니까? 두 경우 모두 네임 스페이스 ds와 ns2가 정의되어 있으므로 독자 (또는 플랫폼)가 standar xml 파서를 사용할 경우 아무런 문제가 없습니다. – fGo

+0

서명 된 XML과 최종 XML은 동일하지 않으므로 서버에서 오류가 발생합니다 디지털 서명. – amartira

답변

0

서명의 세부 정보 (완전한 ds : 서명 노드)를 입력하지 않았습니다. 이것은 도움이 될 것입니다.

XML 정규화 변환을 사용하는지 여부에 따라 마샬링 후의 XML이 이전과 동일하지 않은 경우에도 서명이 유효 할 수 있습니다. XML 표준화 (Google에 익숙하지 않은 경우 Google)는 서명을 계산하기 전에 XML 입력을 "표준화"하는 데 사용되는 평균입니다. 예를 들어, 정규화 후에 두 스 니펫의 MensajePesadoFirmadoTipo가 서명 계산에 동일한 입력을 제공하도록 속성의 순서가 포함됩니다.

희망이 도움이됩니다. Moez