第二十二章 加密 SOAP 主体 - 变体:使用签名的 SAML 断言

news/2024/12/23 1:13:24/

文章目录

  • 第二十二章 加密 SOAP 主体 - 变体:使用签名的 SAML 断言
  • 消息加密示例
  • 指定块加密算法
  • 指定密钥传输算法

第二十二章 加密 SOAP 主体 - 变体:使用签名的 SAML 断言

要使用签名的 SAML 断言中的证书中包含的公钥进行加密,请执行以下操作:

  1. 跳过前面步骤中的步骤 1–4
  2. 使用 Holder-of-key 方法的 <SubjectConfirmation>元素创建签名的 SAML 断言。请参阅创建和添加 SAML 令牌。
  3. 创建 <EncryptedKey> 元素。执行此操作时,使用签名的 SAML 断言作为 CreateX509() 类方法的第一个参数。例如:
 set enckey=##class(%XML.Security.EncryptedKey).CreateX509(signedassertion)
  1. 继续前面步骤中的步骤5。

消息加密示例

在此示例中,Web 客户端(未显示)发送签名的请求消息,而 Web 服务发送加密响应。

Web 服务从请求消息签名中的客户端证书中获取公钥,并使用该公钥在其响应中添加一个加密的 <EncryptedKey> 元素。 <EncryptedKey> 元素使用客户端的公钥加密,它包含用于加密响应消息正文的对称密钥。

Web服务如下:

Class XMLEncr.DivideWS Extends %SOAP.WebService
{Parameter SECURITYIN = "REQUIRE";Parameter SERVICENAME = "XMLEncryptionDemo";Parameter NAMESPACE = "http://www.myapp.org";Method Divide(arg1 As %Numeric = 2, arg2 As %Numeric = 8) As %Numeric [ WebMethod ]
{Do ..EncryptBody() Try {Set ans=arg1 / arg2} Catch {Do ..ApplicationError("division error")}Quit ans
}Method EncryptBody()
{//Retrieve X.509 certificate from the signature of the inbound requestSet clientsig = ..SecurityIn.SignatureSet clientcred = clientsig.X509Credentialsset bst=##class(%SOAP.Security.BinarySecurityToken).CreateX509Token(clientcred)do ..SecurityOut.AddSecurityElement(bst)//generate a symmetric key, encrypt that with the public key of//the certificate contained in the token, and create an //<EncryptedKey> element with a direct reference to the token (default)Set enc=##class(%XML.Security.EncryptedKey).CreateX509(bst)//add the <EncryptedKey> element to the security headerDo ..SecurityOut.AddSecurityElement(enc)
}///  Create our own method to produce application specific SOAP faults.
Method ApplicationError(detail As %String)
{//details omitted
}}

该服务发送如下响应消息:

<?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"><BinarySecurityToken wsu:Id="SecurityToken-4EC1997A-AD6B-48E3-9E91-8D50C8EA3B53" EncodingType="[parts omitted]#Base64Binary" ValueType="[parts omitted]#X509v3">MIICnDCCAYQ[parts omitted]ngHKNhh</BinarySecurityToken><EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#"><EncryptionMethod Algorithm="[parts omitted]xmlenc#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"><Reference URI="#SecurityToken-4EC1997A-AD6B-48E3-9E91-8D50C8EA3B53" ValueType="[parts omitted]#X509v3"></Reference></SecurityTokenReference></KeyInfo><CipherData><CipherValue>WtE[parts omitted]bSyvg==</CipherValue></CipherData><ReferenceList><DataReference URI="#Enc-143BBBAA-B75D-49EB-86AC-B414D818109F"></DataReference></ReferenceList></EncryptedKey></Security>  </SOAP-ENV:Header>  <SOAP-ENV:Body><EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#" Id="Enc-143BBBAA-B75D-49EB-86AC-B414D818109F" Type="http://www.w3.org/2001/04/xmlenc#Content"><EncryptionMethod Algorithm="[parts omitted]#aes128-cbc"></EncryptionMethod><CipherData><CipherValue>MLwR6hvKE0gon[parts omitted]8njiQ==</CipherValue></CipherData></EncryptedData></SOAP-ENV:Body></SOAP-ENV:Envelope>

指定块加密算法

默认情况下,消息本身使用 $$$SOAPWSaes128cbc 加密。您可以指定不同的算法。为此,请设置 %XML.Security.EncryptedKey实例的算法属性。

可能的值是 $$$SOAPWSaes128cbc(默认值)、$$$SOAPWSaes192cbc$$$SOAPWSaes256cbc

例如:

 set enckey.Algorithm=$$$SOAPWSaes256cbc

如其他地方所述,当在其他场景中创建 <EncryptedKey> 时,此信息也适用。

指定密钥传输算法

密钥传输算法是用于对称密钥的公钥加密算法(请参阅 https://www.w3.org/TR/xmlenc-core/)。默认情况下,这是 $$$SOAPWSrsaoaep。可以改用 $$$SOAPWSrsa15。为此,请调用上一步中创建的 %XML.Security.EncryptedKey实例的 SetEncryptionMethod() 方法。此方法的参数可以是 $$$SOAPWSrsaoaep(默认值)或 $$$SOAPWSrsa15

例如:

 do enckey.SetEncryptionMethod($$$SOAPWSrsa15)

如其他地方所述,当您在其他场景中创建<EncryptedKey> 时,此信息也适用。


http://www.ppmy.cn/news/1524356.html

相关文章

Java后端微服务架构下的服务调用链路安全:服务认证与授权

Java后端微服务架构下的服务调用链路安全&#xff1a;服务认证与授权 大家好&#xff0c;我是微赚淘客返利系统3.0的小编&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在微服务架构中&#xff0c;服务间的调用链路安全是保障系统整体安全性的关…

6.Java基础 -二维数组练习题

练习1&#xff1a;冒泡排列学员成绩 使用冒泡排序对输入的5名学员成绩进行降序排列 package com.hz;import java.util.Arrays; import java.util.Scanner;public class Lianxi {public static void main(String[] args) {// TODO Auto-generated method stubint nums[] new …

医疗行业怎么节约和管理能源

医院建筑能耗平台 医院智能照明平台 医院能源综合管理平台 目前&#xff0c;能源短缺已成为一个全球性问题。在建筑业的发展中&#xff0c;建筑电气照明系统的节能水平与中国的能源利用率有关。照明系统中的低功率因数和高电压波动将导致较大的功率损失。因此&#xff0c;要认…

Grafana 可视化配置

Grafana 是什么 Grafana 是一个开源的可视化和监控工具&#xff0c;广泛用于查看和分析来自各种数据源的时间序列数据。它提供了一个灵活的仪表盘&#xff08;dashboard&#xff09;界面&#xff0c;用户可以通过它将数据源中的指标进行图表化展示和监控&#xff0c;帮助分析趋…

数据同步-Mysql同步到ElasticSearch

Mysql同步到ElasticSearch 数据同步1、定时任务2、双写3、MQ异步写入4、Logstash5、Canal 数据同步 一般情况下&#xff0c;如果做查询搜索功能&#xff0c;使用 ES 来模糊搜索&#xff0c;但是数据是存放在数据库 MySQL 里的&#xff0c;所以说我们需要把 MySQL 中的数据和 E…

【CSS】样式水平垂直居中

行内元素&#xff1a; 如果被设置元素为文本、图片等行内元素时&#xff0c;水平居中是通过给父元素设置 text-align:center <body> <div class"txtCenter">我想要在父容器中水平居中显示。</div> </body>div是文本元素的父元素 因此我们对…

基于SpringBoot+Vue前后端分离的在线宠物商店详细设计实现(协同过滤算法)【原创】

一.系统设计背景与需求分析 设计背景 在近年来&#xff0c;随着社会经济的飞速发展和人们生活水平的显著提升&#xff0c;养宠物已经成为了许多人日常生活中不可或缺的一部分。宠物不仅为人们带来了欢乐和陪伴&#xff0c;还成为了表达个性和生活态度的一种方式。随着养宠物的…

docker-compose部署MySQL高可用工具orchestrator

主要对一个MySQL主从架构部署orchestartor进行高可用验证&#xff0c;orchestrator部署在主从架构的从节点上&#xff0c;当然最好是部署在其他机器上&#xff0c;后端数据库采用的直接是MySQL的从库&#xff0c;所以没有创建orchestrator的后端数据库的流程。 创建yaml文件 m…