【发布时间】:2015-09-24 09:07:37
【问题描述】:
几天来,我一直在为如何计算 XAdES 签名中的 SignedProperties 元素的摘要而苦苦挣扎。我有一个参考 XML 文件,其中计算了两个摘要值(正在签名的文件和已签名的属性),我知道这很好,因为它通过了验证程序。我为正在签名的文件计算了正确的摘要值,但是无论我作为摘要方法的输入(我使用 OpenSSL),我都无法获得与参考文件中相同的值。当然,我自己的文件在那之后没有通过验证器。我使用以下命令来计算摘要:
openssl dgst -sha256 -binary myfile.xml | openssl base64
我通过提取参考文件的 SignedProperties 元素记录了文件 myfile.xml 并按原样保存。
<xades:SignedProperties Id="xmldsig-f6a6a2a1-87af-4720-8eed-cf4532e99106-signedprops"><xades:SignedSignatureProperties><xades:SigningTime>2015-09-22T09:02:48.624+02:00</xades:SigningTime><xades:SigningCertificate><xades:Cert><xades:CertDigest><ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><ds:DigestValue>cAJECbIzXZiLH+ILWPrM5jfA13GKcEC8t1qe7/BxqBM=</ds:DigestValue></xades:CertDigest><xades:IssuerSerial><ds:X509IssuerName>CN=thawte SHA256 Code Signing CA,O=thawte\, Inc.,C=US</ds:X509IssuerName><ds:X509SerialNumber>13010307134774063901853305426952669967</ds:X509SerialNumber></xades:IssuerSerial></xades:Cert></xades:SigningCertificate></xades:SignedSignatureProperties><xades:SignedDataObjectProperties><xades:DataObjectFormat ObjectReference="#xmldsig-f6a6a2a1-87af-4720-8eed-cf4532e99106-ref0"><xades:Description>signature détachée du fichier indexfile.txt</xades:Description><xades:MimeType>text/plain</xades:MimeType></xades:DataObjectFormat></xades:SignedDataObjectProperties></xades:SignedProperties></xades:SignedProperties>
显然,我应该得到价值:
6JK3GHDL25+EIRefNMQJ3SOGSI8uzQ45PiziMomZkYs=
但我无法得到它。我不知道是否必须应用一些转换或规范化,规范对这部分非常模糊。它以 UTF-8 编码,没有换行符。
有谁可以做到这一点?有什么技巧吗?
【问题讨论】:
-
你为什么还要尝试在没有库的情况下签署/验证 XML,这就是问题所在。
-
@MaartenBodewes :因为我的公司使用专有语言......所以没有像 xades4j 这样的现有库的帮助
标签: digital-signature digest xml-signature