美文网首页
第三十四章 使用派生密钥令牌进行加密和签名 - 使用 Deriv

第三十四章 使用派生密钥令牌进行加密和签名 - 使用 Deriv

作者: Cache技术分享 | 来源:发表于2024-09-26 08:58 被阅读0次

第三十四章 使用派生密钥令牌进行加密和签名 - 使用 <DerivedKeyToken> 进行签名

要使用 <DerivedKeyToken>进行签名,请使用以下步骤:

  1. 如果想要签署任何安全标头元素,请创建这些安全标头元素。
  2. 创建 <DerivedKeyToken> 并将其添加到 WS-Security 标头,如创建和添加 <DerivedKeyToken> 中所述。

请注意,此步骤还会创建并添加 <DerivedKeyToken> 所基于的 <EncryptedKey> 元素。

  1. 根据派生的密钥令牌创建<Signature> 元素。为此,请调用 %XML.Security.SignatureCreate() 类方法。例如:
 set dsig=##class(%XML.Security.Signature).Create(dkt)

此方法返回 %XML.Security.Signature 的实例,该实例表示 <Signature> 标头元素。签名值通过 HMAC-SHA1 摘要算法计算,使用 <DerivedKeyToken> 隐含的对称密钥。

<Signature> 元素适用于消息的一组默认部分;可以指定一组不同的部分。

  1. 将数字签名添加到 WS-Security 标头元素。为此,请调用 Web 客户端或 Web 服务的 SecurityOut 属性的 AddSecurityElement() 方法。对于参数,请指定上一步中创建的签名对象。例如:
 do ..SecurityOut.AddSecurityElement(dsig)

例如,以下客户端代码对 SOAP 主体进行签名:

 // get credentials
 set cred = ##class(%SYS.X509Credentials).GetByAlias("servercred") 

 // get EncryptedKey element that does not encrypt the body
 set enckey=##class(%XML.Security.EncryptedKey).CreateX509(cred,$$$SOAPWSEncryptNone)
 //add to WS-Security Header
 do client.SecurityOut.AddSecurityElement(enckey)

 // get derived key & add to header
 set dksig=##class(%SOAP.WSSC.DerivedKeyToken).Create(enckey,$$$SOAPWSReferenceEncryptedKey)
 //add to WS-Security Header
 do client.SecurityOut.AddSecurityElement(dksig)

 // create a signature and add it to the security header 
 set sig=##class(%XML.Security.Signature).Create(dksig,,$$$SOAPWSReferenceDerivedKey)
 do client.SecurityOut.AddSecurityElement(sig)

客户端发送如下消息:

<?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Envelope [parts omitted]>
  <SOAP-ENV:Header>
    <Security xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd">
      <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#" 
                   Id="Id-6188CA15-22BF-41EB-98B1-C86D4B242C9F">
        <EncryptionMethod Algorithm="[parts omitted]#rsa-oaep-mgf1p">
          <DigestMethod xmlns="http://www.w3.org/2000/09/xmldsig#" 
              Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></DigestMethod>
        </EncryptionMethod>
        <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
          <SecurityTokenReference 
                xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd">
            <KeyIdentifier EncodingType="[parts omitted]#Base64Binary" 
                           ValueType="[parts omitted]#ThumbprintSHA1">5afOHv1w7WSXwDyz6F3WdM1r6cM=
            </KeyIdentifier>
          </SecurityTokenReference>
        </KeyInfo>
        <CipherData>
          <CipherValue>VKyyi[parts omitted]gMVfayVYxA==</CipherValue>
          </CipherData>
      </EncryptedKey>
      <DerivedKeyToken xmlns="[parts omitted]ws-secureconversation/200512" 
                       xmlns:wsc=[parts omitted]ws-secureconversation/200512" 
                       wsu:Id="Enc-BACCE807-DB34-46AB-A9B8-42D05D0D1FFD">
        <SecurityTokenReference 
             xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd">
           <Reference URI="#Id-6188CA15-22BF-41EB-98B1-C86D4B242C9F"></Reference>
        </SecurityTokenReference>
        <Offset>0</Offset>
        <Length>24</Length>
        <Nonce>IgSfZJ1jje710zadbPXf1Q==</Nonce>
      </DerivedKeyToken>
      <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
        <SignedInfo>
          <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
          </CanonicalizationMethod>
          <SignatureMethod Algorithm="[parts omitted]#hmac-sha1"></SignatureMethod>
          <Reference URI="#Body-B08978B3-8BE8-4365-A352-1934D7C33D2D">
             <Transforms>
               <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></Transform>
             </Transforms>
             <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></DigestMethod>
             <DigestValue>56gxpK1mSVW7DN5LUYRvqDbMt0s=</DigestValue>
           </Reference>
        </SignedInfo>
        <SignatureValue>aY4dKX17zDS2SF+BXlVTHcEituc=</SignatureValue>
        <KeyInfo>
          <SecurityTokenReference 
                xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd">
              <Reference URI="#Enc-BACCE807-DB34-46AB-A9B8-42D05D0D1FFD"></Reference>
          </SecurityTokenReference>
        </KeyInfo>
      </Signature>
    </Security>
  </SOAP-ENV:Header>
  <SOAP-ENV:Body wsu:Id="Body-B08978B3-8BE8-4365-A352-1934D7C33D2D">
    [omitted]
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

相关文章

  • 加密算法概览

    1.对称加密 加密方和解密方使用同一套密钥。即:发送方通过使用相应的加密算法和密钥,对将要发送的信息进行加密;对接...

  • 2018-04-16

    HTTPS加密方式: HTTPs采用混合加密机制,使用公钥加密用于传输对称加密,之后使用对称密钥加密进行通信。...

  • 数字签名及证书

    1. 加密: 对称加密:用对称密钥及算法进行加密。对称密钥,加解密使用相同的密钥。 非对称加密:用非对称密钥及算法...

  • 算法和数据结构5.4共享密钥加密

    加密数据的方法可以分为两种,加密和解密都使用相同密钥的“共享密钥加密”和分别使用不同密钥的“公开密钥加密”。 共享...

  • 信息安全基础知识

    加密技术分为对称加密和非对称加密,区别在于加密和解密是否使用相同的密钥。对称加密使用相同的密钥,非对称加密的密钥则...

  • 安卓系统签名修改

    1.安卓签名和密钥 Android OS 映像在两个地方使用加密签名: 映像中的所有 .apk 文件都必须经过签名...

  • 密码学基础(五):证书体系

    摘要算法 略 对称加密 略 非对称加密 略 数字签名 使用摘要算法对原文进行签名后使用rsa的私钥对摘要进行加密。...

  • 深入浅出:区块链技术中的非对称加密算法--签名和加密

    签名是一种非对称加密算法的用法,即使用不同的加密密钥与解密密钥,而由已知加密密钥推导出解密密钥在计算上是不可行的。...

  • 对称加密与非对称加密

    加密 对称加密 对称双方使用同一个密钥,使用加密算法配上合适的密钥来加密,解密时使用加密过程的完全逆过程配合密钥来...

  • 3DES加密

    本文介绍了3DES加密特性,加密特点,3DES是对称加密,用一个密钥对内容进行加密,必须使用相同的密钥进行解密, ...

网友评论

      本文标题:第三十四章 使用派生密钥令牌进行加密和签名 - 使用 Deriv

      本文链接:https://www.haomeiwen.com/subject/wtshrjtx.html