자바 웹 서비스 클라이언트를 구현하려고합니다. 비누 메시지가 서명되었습니다 (내부 분리 서명).Java xmldsig DigestValue (jsr105Provider apche, oracl)
올바른 서명으로 유효성을 검사하는 유효한 메시지의 예가 있습니다.
코드를 시도 할 때 메시지가 올바르게 서명되지 않았습니다. 문제를 추적하려고 할 때, 나는 그 문제 (또는 나의 실수)가에있는 참조 중 하나에 대한 세대와 관련이 있다는 것을 깨달았다.
<ds:Reference URI="#Id-4889213">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList=""/>
</ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>VYRVoWOIiZx/7QMavLyDmAZ3Mb0=</ds:DigestValue>
참고 문헌이 URI는 메시지 본문입니다 : 제대로 작동 예, 나는의 DigestValue가 생성되는 방법을 '확인'할 수에서
<soapenv:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Id-4889213">
<web:consultarEstados xmlns:web="https://webservice.face.gob.es"/>
나는이 매뉴얼을 'canononicalize'하고 시도하고 apli sha1, 내가 얻을 결과는 exactl입니다 y는 DigestValue입니다.
손 정규화 soapenv : 바디 :
<soapenv:Body xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Id-4889213"><web:consultarEstados xmlns:web="https://webservice.face.gob.es"></web:consultarEstados></soapenv:Body>
명령 SH1 값을 생성 : (. 캔 몸 bodyib.txt previos 문자열에 저장)
cat bodyib.txt|openssl dgst -binary -sha1 | openssl enc -base64
출력 :
VYRVoWOIiZx/7QMavLyDmAZ3Mb0= (Yes, the value in DigestValue !!)
메시지에 서명 할 때 참조 번호는 다음과 같습니다.
<ds:Reference URI="#Id-4889213">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<InclusiveNamespaces xmlns="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList=""/>
</ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>sA5MIQPm4b2YhMRTPHg9CY8J1FI=</ds:DigestValue>
</ds:Reference>
필자는 예와 똑같은 비누 메시지를 얻기 위해 모든 네임 스페이스와 ID를 모방합니다. 본문 : 그래서 나는 foolowing의 soapenv 얻을 나는 손으로이 정규화 경우
<soapenv:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Id-4889213">
을, 나는 이전에 정확히 동일한 문자열을 얻을 수 있지만, 참조에 표시된의 DigestValue는 동일하지 않습니다.
나는 두 개의 서로 다른 jsr105 제공 업체와이 시도했다 :
오라클 : "org.jcp.xml.dsig.internal.dom.XMLDSigRI" 쉐르의 산 투아 리오를 (1.5.6) : "org.apache.jcp .xml.dsig.internal.dom.XMLDSigRI "
결과는 동일한 다이제스트 (내가 가진 예제에 따라 예상 한 것과 다릅니다)입니다. 나는이 소화가 어디에서 오는지는 모른다. 이것을 손으로 계산하려고하면 결과가 예제에있는 것입니다.
두 가지 다른 라이브러리를 사용하기 때문에 동일한 값을 얻지 못하기 때문에이 모든 것에 대한 개념이 생기지 않을 것이라고 생각합니다. 문제는이 라이브러리의 코드입니다.