xml = '<?xml version="1.0" encoding="UTF-8"?>
<User>
<Uer id="user_id">
<Code>1111</Code>
<ID>0000000111</ID>
</Uer>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<Reference Type="http://www.w3.org/2000/09/xmldsig#Object" URI="#user_id">
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>mwsSKYG+Q/krE54kcNpEGtXnQ+w=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>???????????????????</SignatureValue>
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<X509Data>
.........
</X509Data>
</KeyInfo>
</Signature>
</User>'
@xml = Nokogiri::XML.parse(xml)
나는 xml 서명이 필요하다. <DigestValue>
like this루비의 XML 디지털 서명
Base64.encode64(OpenSSL::Digest::SHA1.digest(@xml.search("[id=#{user_id}]").to_html)).chop
결과가 양호합니다.
나는이p = OpenSSL::PKCS12.new(File.read("/Path/signCert.p12"),"123456")
Base64.encode64(OpenSSL::PKey::RSA.new(p.key).sign(OpenSSL::Digest::SHA1.new, tmpxml.search("SignedInfo").to_html))
처럼, 내가 문제를 얻을 <SignatureValue>
값을 계산하면이 값이 잘못되었습니다. XML 서명의 서명 값을 계산