XML数字签名-签名类型

封内签名

这种签名是将签名作为XML对象的子信息,也就是说 <Signature>是邮件中XML文件的子标签。封内数字签名的结构如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ceb:CEB311Message xmlns:ceb="http://www.chinaport.gov.cn/ceb" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" guid="CEB311_HNZB_DWDZ_20210720174425_8277" version="1.0">
    <ceb:Order>
        <ceb:OrderHead></ceb:OrderHead>
        <ceb:OrderList></ceb:OrderList>
    </ceb:Order>
    <ceb:BaseTransfer>
        <ceb:copCode></ceb:copCode>
        <ceb:copName></ceb:copName>
        <ceb:dxpMode></ceb:dxpMode>
        <ceb:dxpId></ceb:dxpId>
    </ceb:BaseTransfer>
    <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:SignedInfo>
            <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
            <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
            <ds:Reference URI="">
                <ds:Transforms>
                    <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
                </ds:Transforms>
                <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
                <ds:DigestValue>{{DigestValue}}</ds:DigestValue>
            </ds:Reference>
        </ds:SignedInfo>
        <ds:SignatureValue>{{SignatureValue}}</ds:SignatureValue>
        <ds:KeyInfo>
            <ds:KeyName>{{KeyName}}</ds:KeyName>
            <ds:X509Data>
                <ds:X509Certificate>{{X509Certificate}}</ds:X509Certificate>
            </ds:X509Data>
        </ds:KeyInfo>
    </ds:Signature>
</ceb:CEB311Message>

封外签名

这种签名将XML文档包含到Signature对象,也就是说<Signature>标签是签名XML文件的根元素。封外签名结构如下:

<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
    <DOMDocument>
        ..............
    </DOMDocument>
    <ds:SignedInfo>
        <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
        <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
        <ds:Reference URI="">
            <ds:Transforms>
                <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
            </ds:Transforms>
            <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
            <ds:DigestValue>{{DigestValue}}</ds:DigestValue>
        </ds:Reference>
    </ds:SignedInfo>
    <ds:SignatureValue>{{SignatureValue}}</ds:SignatureValue>
    <ds:KeyInfo>
        <ds:KeyName>{{KeyName}}</ds:KeyName>
        <ds:X509Data>
            <ds:X509Certificate>{{X509Certificate}}</ds:X509Certificate>
        </ds:X509Data>
    </ds:KeyInfo>
</ds:Signature>

分离签名

这种情况下,签名是独立生成的不作为XML的一部分。也就是说你会拥有两个XML文件:一个待签名的XML文件,另一个是XML签名。

最后修改:2022 年 02 月 20 日 04 : 33 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论