2

我想签署我的 xml 文件,以便我提供给他们的人可以确定他们没有被篡改,并且我保证这些是我的 XML 文件。我正在使用 xmlseclib(似乎可以工作的 php)。我有一些问题希望你能帮我回答:

  1. 在库中,我发送了一个私有 RSA 密钥和一个证书。我应该如何处理证书?如果我使用为我的 https 服务器购买的证书,它的有效期仅为 1 年?我希望我签署的文件永远有效。我应该生成自己的证书吗?我如何在openssl中做到这一点?

  2. 有人可以给我概述一下 ds:SignatureValue、ds:DigestValue 和 ds:X509Certificate 的内容以及它们的使用方式吗?

我的自动添加标签:

<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-  exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference>
<ds:Transforms>
<ds:TransformAlgorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>  
</ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> 
<ds:DigestValue>WHAT_GOES_HERE</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>WHAT_GOES_HERE</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>WHAT_GOES_HERE</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>

谢谢

4

1 回答 1

1

证书应包含在字段#3 中。它可以帮助建立一个可信的证书链,以便接收者可以确定签名是有效的。

如果签名仍然有效,则取决于进行验证的人。通常,您不会使用 SSL 证书来签署数据。建立另一个信任关系基本上是 PKI,超出了 Stackoverflow 的范围。

字段 #1 仅包含对已签名数据采用 base64 编码的安全散列。可能存在多个哈希。

字段 #2 是SignedInfo零件上的签名。签名由另一个安全散列SignedInfo和一个非对称函数(如 RSA 的模幂运算)组成。它是二进制的,因此也将采用 base 64 编码。

于 2013-05-16T22:39:17.013 回答