首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用xmlsec1验证Windows 8的内购收据

用xmlsec1验证Windows 8的内购收据
EN

Stack Overflow用户
提问于 2014-04-07 12:37:38
回答 1查看 393关注 0票数 2

如何使用Win8验证xmlsec1的内购收据?下面是我要做的事:

  1. 我的收据样本(保存在receipt.xml文件中):
  2. 使用CertificateId,我使用这个url检索证书,并将其保存到cert文件中。以下是它的内容: --开始证书- MIIDyTCCArGgAwIBAgIQNP+YKvSo8IVArhlhpgc/xjANBgkqhkiG9w0BAQsFADCB jjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1Jl ZG1vbmQxHjAcBgNVBAoMFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEWMBQGA1UECwwN V2luZG93cyBTdG9yZTEgMB4GA1UEAwwXV2luZG93cyBTdG9yZSBMaWNlbnNpbmcw HhcNMTExMTE3MjMwNTAyWhcNMzYxMTEwMjMxMzQ0WjCBjjELMAkGA1UEBhMCVVMx EzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1JlZG1vbmQxHjAcBgNVBAoM FU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEWMBQGA1UECwwNV2luZG93cyBTdG9yZTEg MB4GA1UEAwwXV2luZG93cyBTdG9yZSBMaWNlbnNpbmcwggEiMA0GCSqGSIb3DQEB AQUAA4IBDwAwggEKAoIBAQCcr4/vgqZFtzMqy3jO0XHjBUNx6j7ZTXEnNpLl2VSe zVQA9KK2RlvroXKhYMUUdJpw+txm1mqi/W7D9QOYTq1e83GLhWC9IRh/OSmSYt0e kgVLB+icyRH3dtpYcJ5sspU2huPf4I/Nc06OuXlMsD9MU4Ug9IBD2HSDBEquhGRo xV64YuEH4645oB14LlEay0+JZlkKZ/mVhx/sdzSBfrda1X/Ckc7SOgnTSM3d/DnO 5DKwV2WYn+7i/rBqe4/op6IqQMrPpHyem9Sny+i0xiUMA+1IwkX0hs0gvHM6zDww TMDiTapbCy9LnmMx65oMq56hhsQydLEmquq8lVYUDEzLAgMBAAGjITAfMB0GA1Ud DgQWBBREzrOBz7zw+HWskxonOXAPMa6+NzANBgkqhkiG9w0BAQsFAAOCAQEAeVtN 4c6muxO6yfht9SaxEfleUBIjGfe0ewLBp00Ix7b7ldJ/lUQcA6y+Drrl7vjmkHQK OU3uZiFbCxTvgTcoz9o+1rzR/WPXmqH5bqu6ua/UrobGKavAScqqI/G6o56Xmx/y oErWN0VapN370crKJvNWxh3yw8DCl+W0EcVRiWX5lFsMBNBbVpK4Whp+VhkSJilu iRpe1B35Q8EqOz/4RQkOpVI0dREnuSYkBy/h2ggCtiQ5yfvH5zCdcfhFednYDevS axmt3W5WuHz8zglkg+OQ3qpXaXySRlrmLdxEmWu2MOiZbQkU2ZjBSQmvFAOy0dd6 P1YLS4+Eyh5drQJc0Q== -结束证书
  3. 然后我试一试:xmlsec1 --verify --print-debug --pubkey-cert-pem cert receipt.xml。这是输出: func=xmlSecOpenSSLEvpDigestVerify:file=digests.c:line=229:obj=sha256:subj=unknown:error=12:invalid数据:数据和摘要不匹配失败的SignedInfo引用(ok/ all ):0/1显示引用(ok/ all ):0/0 =验证上下文==状态:无效的==标志: 0x00000000 == flags2: 0x00000000 ==信息读取上下文==标志:= Key INFO读取上下文==标志: 0x00000000 == flags2: 0x00000000 ==启用的密钥数据:all == RetrievalMethod级别(cur/max):0/1 ==转换CTX (status=0)标志==:0x00000000 == ==:0x00000000 ==启用转换:all uri:空=== uri x指针扩展:空== EncryptedKey级别(cur/max):0/1 === KeyReq:==== keyId: NULL ==== keyType: 0x00000000 ==== keyUsage: 0xffffffff ==== keyBitsSize: 0 ==密钥信息写入Ctx:=keyId写入上下文EncryptedKey标志: 0x00000000 == ==:0x00000000 == KeyReq: all level (cur/max):0/1 TRANSFORMS ()#en23标志: 0x00000000 en25#:0x00000000已启用指针转换: all 27 uri: en28#expr#expr#en30#30#en30#en30( 0/ 30)1 === KeyReq:==== keyId: NULL ==== keyType: 0x000001 ==== keyUsage: 0xffffff ==== keyBitsSize: 0 =====引用转换Ctx:==转换CTX (status=2) ==标志: 0x00000000 == flags2: 0x00000000 ==启用转换: all === uri: NULL === uri x指针扩展:空===转换:信封-签名(href=http://www.w3.org/2000/09/xmldsig#enveloped-signature) === Transform: c14n (href=http://www.w3.org/TR/2001/REC-xml-c14n-20010315) === Transform: sha256 () Transform: membuf-transform () Digest方法: Transform:() Manifest列表:列表大小:0错误:验证文件“”失败

我做错了什么吗?我应该提供哪些参数来正确地验证收据?或者它确实是无效的(那么有人能给我提供有效的收据吗?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-10 19:30:24

我发现,如果从receipt.xml中删除了所有额外的空白,那么验证就会成功。如果该文件在下载和保存时确实包含此内容,则可能需要通过sed或其他什么方式运行该文件来删除它(如果它确实存在,而且不是您自己意外添加的)。

代码语言:javascript
复制
# xmlsec1 --verify --print-debug --pubkey-cert-pem cert receipt.xml
OK
SignedInfo References (ok/all): 1/1
Manifests References (ok/all): 0/0
= VERIFICATION CONTEXT
== Status: succeeded
== flags: 0x00000000
== flags2: 0x00000000
== Key Info Read Ctx:
= KEY INFO READ CONTEXT
== flags: 0x00000000
== flags2: 0x00000000
== enabled key data: all
== RetrievalMethod level (cur/max): 0/1
== TRANSFORMS CTX (status=0)
== flags: 0x00000000
== flags2: 0x00000000
== enabled transforms: all
=== uri: NULL
=== uri xpointer expr: NULL
== EncryptedKey level (cur/max): 0/1
=== KeyReq:
==== keyId: rsa
==== keyType: 0x00000001
==== keyUsage: 0x00000002
==== keyBitsSize: 0
=== list size: 0
== Key Info Write Ctx:
= KEY INFO WRITE CONTEXT
== flags: 0x00000000
== flags2: 0x00000000
== enabled key data: all
== RetrievalMethod level (cur/max): 0/1
== TRANSFORMS CTX (status=0)
== flags: 0x00000000
== flags2: 0x00000000
== enabled transforms: all
=== uri: NULL
=== uri xpointer expr: NULL
== EncryptedKey level (cur/max): 0/1
=== KeyReq:
==== keyId: NULL
==== keyType: 0x00000001
==== keyUsage: 0xffffffff
==== keyBitsSize: 0
=== list size: 0
== Signature Transform Ctx:
== TRANSFORMS CTX (status=2)
== flags: 0x00000000
== flags2: 0x00000000
== enabled transforms: all
=== uri: NULL
=== uri xpointer expr: NULL
=== Transform: exc-c14n (href=http://www.w3.org/2001/10/xml-exc-c14n#)
=== Transform: rsa-sha256 (href=http://www.w3.org/2001/04/xmldsig-more#rsa-sha256)
=== Transform: membuf-transform (href=NULL)
== Signature Method:
=== Transform: rsa-sha256 (href=http://www.w3.org/2001/04/xmldsig-more#rsa-sha256)
== Signature Key:
== KEY
=== method: RSAKeyValue
=== key type: Private
=== key usage: -1
=== rsa key: size = 2048
=== list size: 1
=== X509 Data:
==== Certificate:
==== Subject Name: /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/OU=Windows Store/CN=Windows Store Licensing
==== Issuer Name: /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/OU=Windows Store/CN=Windows Store Licensing
==== Issuer Serial: 34FF982AF4A8F08540AE1961A6073FC6
== SignedInfo References List:
=== list size: 1
= REFERENCE VERIFICATION CONTEXT
== Status: succeeded
== URI: ""
== Reference Transform Ctx:
== TRANSFORMS CTX (status=2)
== flags: 0x00000000
== flags2: 0x00000000
== enabled transforms: all
=== uri: NULL
=== uri xpointer expr: NULL
=== Transform: enveloped-signature (href=http://www.w3.org/2000/09/xmldsig#enveloped-signature)
=== Transform: c14n (href=http://www.w3.org/TR/2001/REC-xml-c14n-20010315)
=== Transform: sha256 (href=http://www.w3.org/2001/04/xmlenc#sha256)
=== Transform: membuf-transform (href=NULL)
== Digest Method:
=== Transform: sha256 (href=http://www.w3.org/2001/04/xmlenc#sha256)
== Manifest References List:
=== list size: 0

请记住,签名对确切的文件有效,字符对字符有效。对文件的任何更改,甚至用于格式化的空格,都将使签名无效。我怀疑当您打开文件时会有一些格式设置,可能是您用该格式保存的。

编辑

我忘了在你为receipt.xml发布的文章中,你也遗漏了结尾标签。不过,我怀疑它就在您的文件副本中,因为如果不是的话,xmlsec1会告诉您的(正如它告诉我的,我不得不手动添加它)。

尝试xmllint --noblanks --output receipt.xml receipt.xml删除不必要的空格和CR/LFs。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22912647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档