使用密钥和证书对XML进行签名

时间:2012-08-24 06:06:26

标签: xml certificate sign xmlseclibs

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

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

  2. 有人可以给我一个概述ds:SignatureValue,ds:DigestValue和ds:X509Certificate及其使用方法吗?

  3. 我自动添加的标签:

    <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>
    

    由于

1 个答案:

答案 0 :(得分:0)

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

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

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

字段#2是SignedInfo部分的签名。签名由SignedInfo上的另一个安全散列和RSA的模幂运算之类的非对称函数组成。它是二进制的,所以它也将是64位编码。