websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载

在采用轻量级移动设备的推动下,基于REST的通信的采用日益广泛,因此需要保护这些通信。 当消息包含信息有效负载时,尤其如此,通常将其格式化为JavaScript Object Notation(JSON)文本。

本文演示了如何使用运行6.0.1.0版或更高版本固件的WebSphere DataPower设备来加密JSON有效负载,以便使用REST标准进行传输。 这样可以保护与传输方法(例如SSL)无关的消息私密性。 我们将演示以下方法:

  • 整个有效负载使用PKCS#7标准进行加密。
  • 使用共享密钥对选定的元素进行加密。
  • 所选元素使用非对称密钥(证书和密钥)进行加密。

传输的加密(或发送)端和传输的解密(或接收)端均在此进行了说明。

本文还演示了如何使用XQuery和JSONiq处理脚本来执行加密和解密。

您可以在传输的发送和接收端使用相同的多协议网关服务; 静态后端目标只需要调整。

先决条件

本文使用加密密钥和证书。 为了不间断地完成这些说明,您必须首先创建加密密钥和证书对象。

密钥和证书对

请按照以下说明创建必要的密钥和证书对象:

  1. 在导航窗格的搜索栏中键入Ident
  2. 单击“ 加密标识凭证”
  3. 单击“ 添加”创建一个新的“身份凭证”对象。
  4. Name字段中输入Jason ,如图1所示。
  5. 单击加密密钥下的+按钮。 一个新的窗口打开。
  6. 名称字段中输入Jason
  7. 上载加密密钥以完成此对象。 如果没有密钥,请使用设备上可用的加密工具来创建密钥。
  8. 点击应用 窗口关闭。
  9. 单击“身份证明”页面上“证书”下的+。 一个新的窗口打开。
  10. 名称字段中输入Jason
  11. 上载加密证书对象以完成此对象。 如果没有密钥,请使用设备上可用的加密工具来创建证书。
  12. 点击应用 窗口关闭。
  13. 单击“ 应用”以完成“加密标识凭证”对象。
    图1.密码识别凭证
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第1张图片

共享密钥

  1. 在导航窗格的搜索栏中键入Shared
  2. 单击“ 加密共享密钥”
  3. 单击添加以创建新密钥。
  4. Name字段中输入aes-128 ,如图2所示。您必须使用此名称。
  5. 从“ 下载”部分的本文随附的材料中上载keyd.dat文件,或上载您自己的对称密钥。
  6. 点击应用
  7. 点击保存配置
    图2.加密共享密钥
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第2张图片

索取文件

这是本文使用的示例JSON文档:

{
  "Name":"Cartoon Studios",
  "AccountID":"8458jf8757275234",
  "Social-no":"123-45-6789",
  "State":"MA"
}

通过执行本文中的步骤,可以确保“ Social-no”元素的值。

创建目的地

本文中创建的服务使用的目的地仅返回服务发送的内容,就像镜像一样。 要创建这样的目的地,请按照下列步骤操作:

  1. 在导航栏的搜索字段中键入HTTP 从出现的列表中选择HTTP服务
  2. 单击添加以创建新服务。
  3. 名称字段中输入Mirror
  4. 端口号更改为2049
  5. 模式更改为echo
  6. 点击应用
  7. 点击保存配置

测试配置

完成此处描述的每个处理规则后,您可以通过向网关发送请求来测试新规则。

要测试加密规则,请将纯JSON有效负载request.jsn发送到网关。 例如,这是curl命令:

curl –data-binary @request.jsn http://dp_addr:3333/ssn

要测试解密规则,首先需要创建一个加密的有效负载。 您可以通过捕获加密规则的输出来做到这一点。 这是使用curl的示例:

curl –data-binary @request.jsn http://dp_addr:3333/ssn > request-enc.jsn

curl –data-binary @request-enc.jsn http://dp_addr:3333/dssn

调试配置

将应用程序域系统日志级别设置为“调试”,以捕获默认系统日志中的所有可能的调试条目。 为此,请单击控制面板上的“ 故障排除”图标。 在“ 日志记录”下 ,从“ 日志级别”下拉列表中选择“ 调试 ”。 然后单击“ 日志级别”按钮。

配置多协议网关服务

此处演示的所有方法都使用多协议网关服务来完成工作。 本节介绍此服务的配置(图3),除了“处理策略”。

  1. 在导航窗格上的搜索栏中键入Multi
  2. 从可能的条目列表中选择New MultiProtocol Gateway
  3. 输入或选择以下值:
    • 名称: SecureJSON
    • 预设后端网址: http://127.0.0.1:2049 http://127.0.0.1:2049 http://127.0.0.1:2049
    • 响应类型:直通
    • 请求类型:非XML
    图3.多协议网关初始配置
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第3张图片
  4. 在多协议网关的“ 高级”选项卡上(图4),将Proxy HTTP Response设置为On 返回到“ 常规”选项卡。
    图4.“多协议网关高级”选项卡
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第4张图片

前端协议处理程序

  1. 在“ 前端协议”下 ,单击“ +”创建一个新的处理程序。 从出现的列表中选择HTTP前端处理程序 在打开的“ 配置HTTP前端处理程序”窗口中,设置以下值(图5):
    • 名称: HTTP3333
    • 端口号: 3333
    • 允许的方法:单击以将GET方法添加到默认列表。
    图5.前端协议处理程序
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第5张图片

完成临时配置

  1. 在“ 多协议网关策略”下 ,选择“ 默认” 该策略只是网关完成时使用的占位符。
  2. 单击“ 应用”以应用新网关的设置。
  3. 点击保存配置

处理策略配置

此处详细介绍了将加密应用于JSON有效负载的三种方法。 您可能只想执行与要使用的方法有关的那些步骤。

请注意,网关配置使用非XML请求类型来允许PKCS#7解密规则成功运行。 如果您不打算使用此规则,则可以将网关配置请求类型设置JSON 这会使设备自动检查请求文档,以确保文档格式正确。 这对于探针也更有效。

PKCS#7加密

  1. 在“ 多协议网关策略”下 ,单击+创建新策略。
  2. 输入SecureJSON作为策略的名称 ,如图6所示。
  3. 点击新建规则
  4. 将规则的名称更改为SecureJSON_rule_pk7encrypt
  5. 将“ 规则方向”设置为 客户端到服务器”
  6. 双击突出显示的“ 匹配操作”图标。
    图6.初始处理策略
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第6张图片
  7. 单击+创建一个新的匹配。
  8. Name字段中输入ebin ,如图7所示。
  9. 单击匹配规则选项卡。
  10. 点击添加
  11. 在URL匹配字段中输入*/ebin
  12. 点击应用 窗口关闭。 新规则输入到网格中。
    图7. ebin匹配规则
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第7张图片
  13. 点击应用 窗口关闭。
  14. 单击完成 窗口关闭。 蓝色的“处理策略”窗格再次处于活动状态(图8)。
    图8.匹配动作
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第8张图片
  15. 高级操作图标拖动到处理行上。
  16. 双击图标。
  17. 从可能的操作类型列表中选择Crypto Binary ,如图9所示。
    图9.选择加密二进制高级操作
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第9张图片
  18. 单击下一步 一个新的窗口打开。
  19. 从可能的操作列表中选择PKCS#7 Encrypt ,如图10所示。
  20. 从“ 收件人 ”列表中选择所需的证书,然后单击“ 添加”
    图10. PKCS#7加密
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第10张图片
  21. 单击完成 窗口关闭。
    图11. PKCS#7加密策略
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第11张图片
  22. 单击Apply Policy ,如图11所示 如果这完成了所需的策略配置,请单击“ 关闭窗口”以关闭“处理策略”窗口。 然后在“网关”页面上单击“ 应用 ”。

    当您向该规则提交样本请求文档时,您应该收到与以下内容相似的结果:

    ---BEGIN PKCS7-----
    MIIByQYJKoZIhvcNAQcDoIIBujCCAbYCAQAxgeAwgd0CAQAwRjA6MQswCQYDVQQG
    EwJVUzELMAkGA1UECBMCTUExDjAMBgNVBAcTBUtUb3duMQ4wDAYDVQQDEwVKYXNv
    bgIIBImBLUcGRo8wDQYJKoZIhvcNAQEBBQAEgYCHrd/qNEtgGZpXDK8yFLP65lO2
    yRVtIst3E/hOqFy4Jt2YWtfsjLP2nuL27fEv3C+iLQSQo5leJCBaWF83xqUb4rMA
    I+1/8+T19ciEm5u7JhPAJ17G2Ypd1jqquXeVeJq6Mo1jYqTKjMt+2ir8ijhhuX6/
    JzOIa+cAznBOD4+uaDCBzQYJKoZIhvcNAQcBMB0GCWCGSAFlAwQBAgQQ2LCVsgxa
    6alYZyGem0he2oCBoDbUr0nPULErHNfrk2twhBaPZzae3KUF07RYddamwBWBRkJe
    7/Z4QU9WR8n/GoPe0vq6gsxHAaGqWCBoI0HCY+YTV6aF7ARlg5n2bVHKEx8lsH6G
    fxWwoKJu6j/BSmJCcoYaJNc5fATxr8mFKMJV1GcQg666hwzx143GkcAHmaclXu9w
    awpqndNhpKAukj6vxWUU8aAr8AehRRYaFXWoYf4=
    -----END PKCS7-----

    整个有效负载已加密。 将此结果保存在本地文件中,以提交解密此有效负载的规则,这将在下一部分中进行描述。

PKCS#7解密

  1. 点击新建规则
  2. 将规则的名称更改为SecureJSON_rule_pk7decrypt
  3. 将“ 规则方向”设置为 客户端到服务器”
  4. 双击突出显示的“ 匹配操作”图标。
  5. 单击+创建一个新的匹配。
  6. 在Name字段中输入dbin ,如图12所示。
  7. 单击匹配规则选项卡。
  8. 点击添加
  9. URL匹配字段中输入 */dbin
  10. 点击应用 窗口关闭。 新规则输入到网格中。
    图12. dbin匹配规则
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第12张图片
  11. 点击应用 窗口关闭。
  12. 单击完成 窗口关闭。 蓝色的“处理策略”窗格再次处于活动状态。
  13. 高级操作图标拖动到处理行上。
  14. 双击图标。
  15. 从可能的操作类型列表中选择“ 加密二进制 ”。
  16. 单击下一步 一个新的窗口打开。
  17. 从可能的操作列表中选择PKCS#7 Decrypt ,如图13所示。
  18. 从“ 输入编码格式 ”列表中选择PEM
  19. 从“ 输出编码格式 ”列表中选择“ ”。
  20. 收件人列表中选择所需的加密标识凭据,然后单击添加
    图13. PKCS#7解密
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第13张图片
  21. 单击完成 窗口关闭。
  22. 单击“ 应用策略” 如果这完成了所需的策略配置,请单击“ 关闭窗口”以关闭“处理策略”窗口。 然后在“网关”页面上单击“ 应用 ”。

    如果提交上面构造的用于加密JSON有效负载的规则的结果,则应该再次收到原始的纯文本JSON文档。

    {
              "Name":"Cartoon Studios",
              "AccountID":"8458jf8757275234",
              "Social-no":"123-45-6789",
              "State":"MA"
    }

使用共享密钥进行元素加密

您必须创建一个共享密钥加密对象才能使用此方法。 如果尚未创建共享密钥,请按照“ 共享密钥”部分中的说明进行操作。

请按照以下步骤使用共享密钥来加密JSON有效内容的元素:

  1. 单击新规则。
  2. 将规则名称更改为SecureJSON_rule_ssencrypt.
  3. 将“ 规则方向”设置为 客户端到服务器”
  4. 双击突出显示的“ 匹配操作”图标。
  5. 点击+创建新的匹配
  6. 名称字段中输入ssn
  7. 单击匹配规则选项卡。
  8. 点击添加
  9. URL匹配字段中输入 */ssn
  10. 点击应用 窗口关闭。 新规则输入到网格中,如图14所示。
    图14. ssn匹配规则
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第14张图片
  11. 点击应用 窗口关闭。
  12. 单击完成 窗口关闭。 蓝色的“处理策略”窗格再次处于活动状态。
  13. 将“ 变换”图标拖到处理行上。
  14. 双击图标。
  15. 在“ 使用文档处理说明”下 ,选择“使用处理控制文件转换”(如果指定)
  16. 输入语言应为JSON转换语言应为Xquery
  17. 单击Processing Control文件下的Upload按钮,然后上载set-dp-var.xq文件,如图15所示。
    图15.配置Xquery转换
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第15张图片
  18. 单击完成 窗口关闭。 Processing Policy窗口重新获得焦点,如图16所示。
    图16.共享机密加密策略-第一步
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第16张图片

    这是set-dp-var.xq文件的内容:

    declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
    declare namespace dp = "http://www.datapower.com/extensions";
    declare option jsoniq-version "0.4.42";
    declare option output:method "json";
    
    let $ssn := .("Social-no")
    
    let $dono := dp:set-variable("var://context/mine/myvar1", $ssn)
    
    let $myvar := dp:variable("var://context/mine/myvar1")
    
    return
    
    jn:object(
     for $key in jn:keys(.)
     let $val := if ($key = "Social-no") then $myvar else .($key)
     return { $key : $val }
    )

    该脚本从提交的消息中提取Social-no JSON元素的值,将其放在DataPower变量中,然后使用相同的变量再次输出消息。 此转换的输出并不重要; 最重要的是DataPower变量的设置。 在处理策略的下一步中使用此变量。

  19. 将另一个变换动作拖到“处理规则上。
  20. 双击图标。
  21. 在“ 使用文档处理说明”下 ,选择“使用XSLT样式表转换” ,如图17所示。
  22. 上载string-crypto-var.xsl文件。
  23. 输出上下文设置为NULL
    图17.配置Transform XSLT
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第17张图片
  24. 单击完成 窗口关闭。

    此样式表检索上一步中设置的DataPower变量的值,使用共享密钥对其进行加密,然后将结果放入DataPower变量中,如下所示:

    
    
    
        
            
        
    
        
    
        
    
        
            
        
    
    

    再一次,此转换的输出并不重要。 变量值的设置很重要。

  25. 最后将“ 变换”动作拖到“处理规则”上。
  26. 双击图标。
  27. 在“ 使用文档处理说明”下 ,选择“使用处理控制文件转换”(如果已指定 ,如图18所示)。
  28. 输入语言应为JSON转换语言应为Xquery
  29. 单击“ 处理控制文件”下的“上载”按钮,然后上载use-dp-var.xq文件。
  30. 输入设置为INPUT
  31. 输出设置为OUTPUT
  32. 单击完成 窗口关闭。
    图18.使用XQuery进行转换
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第18张图片

    这是use-dp-var.xq文件的内容:

    declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
    declare namespace dp = "http://www.datapower.com/extensions";
    declare option jsoniq-version "0.4.42";
    declare option output:method "json";
    
    let $ssn := .("Social-no")
    let $myvar := dp:variable("var://context/mine/myvar2")
    
    return
    
    jn:object(
     for $key in jn:keys(.)
     let $val := if ($key = "Social-no") then $myvar else .($key)
     return { $key : $val }
    )

    该脚本输出原始消息,用加密的字段值代替原始值。

  33. 单击“ 应用策略” 如果这完成了所需的策略配置,请单击“ 关闭窗口”以关闭“处理策略”窗口。 然后在“网关”页面上单击“ 应用 ”。

    如果您通过此规则提交样本文档进行加密,则响应类似于以下内容:

    {
      "State":"MA",
      "AccountID":"8458jf8757275234",
      "Social-no":"RynTyS5R0hTDDT7e/3OfK0ItyC4rCxZQr8a3D2yITck=",
      "Name":"Cartoon Studios"
    }

使用共享密钥进行元素解密

请按照以下步骤使用共享密钥来解密JSON有效负载的元素:

  1. 点击新建规则
  2. 将规则的名称更改为SecureJSON_rule_ssdecrypt
  3. 将“ 规则方向”设置为 客户端到服务器”
  4. 双击突出显示的“匹配操作”图标。
  5. 单击+创建一个新的匹配。
  6. 在Name字段中输入dssn ,如图19所示。
  7. 单击匹配规则选项卡。
  8. 点击添加
  9. 在URL Match字段中输入*/dssn
  10. 点击应用 窗口关闭。 新规则输入到网格中。
    图19.配置匹配规则
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第19张图片
  11. 点击应用 窗口关闭。
  12. 单击完成 窗口关闭。 蓝色的“处理策略”窗格再次处于活动状态。
  13. 将“ 变换”图标拖到处理行上。
  14. 双击图标。
  15. 在“ 使用文档处理说明”下 ,选择“使用处理控制文件转换”(如果已指定 ,如图20所示)。
  16. 输入语言应为JSON转换语言应为Xquery
  17. 在“ 处理控制文件”下 ,选择set-dp-var.xq文件。
    图20.使用XQuery进行转换
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第20张图片
  18. 单击完成 窗口关闭。 图21显示了此时的处理策略规则。
    图21.处理策略
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第21张图片

    这是set-dp-var.xq文件的内容:

    declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
    declare namespace dp = "http://www.datapower.com/extensions";
    declare option jsoniq-version "0.4.42";
    declare option output:method "json";
    
    let $ssn := .("Social-no")
    
    let $dono := dp:set-variable("var://context/mine/myvar1", $ssn)
    
    let $myvar := dp:variable("var://context/mine/myvar1")
    
    return
    
    jn:object(
     for $key in jn:keys(.)
     let $val := if ($key = "Social-no") then $myvar else .($key)
     return { $key : $val }
    )

    该脚本从提交的消息中提取Social-no JSON元素的值,将其放在DataPower变量中,然后使用相同的变量再次输出消息。 此转换的输出并不重要; 最重要的是DataPower变量的设置。 在处理策略的下一步中使用此变量。

  19. 将另一个变换动作拖到“处理规则上。
  20. 双击图标。
  21. 在“ 使用文档处理说明”下 ,选择“使用XSLT样式表转换” ,如图22所示。
  22. 上载string-crypto-var-dec.xsl文件。
  23. 输出上下文字段中输入 NULL
    图22.配置XSLT转换
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第22张图片
  24. 单击完成 窗口关闭。

    此样式表检索上一步中设置的DataPower变量的值,使用共享的secred密钥对其解密,然后将结果放入DataPower变量中,如下所示:

    
    
    
        
            
        
    
        
    
        
    
    
        
            
        
    
    

    再一次,此转换的输出并不重要。 变量值的设置很重要。

  25. 最后将“ 变换”动作拖到“处理规则”上。
  26. 双击图标。
  27. 在“ 使用文档处理说明”下 ,选择“使用处理控制文件转换”(如果指定的话) ,如图23所示。
  28. 输入语言应为JSON转换语言应为Xquery
  29. 在“ 处理控制文件”下 ,选择use-dp-var.xq文件。
  30. 输入设置为INPUT
  31. 输出设置为OUTPUT
    图23.配置XQuery转换
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第23张图片
  32. 单击完成 窗口关闭。

    这是use-dp-var.xq文件的内容:

    declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
    declare namespace dp = "http://www.datapower.com/extensions";
    declare option jsoniq-version "0.4.42";
    declare option output:method "json";
    
    let $ssn := .("Social-no")
    let $myvar := dp:variable("var://context/mine/myvar2")
    
    return
    
    jn:object(
     for $key in jn:keys(.)
     let $val := if ($key = "Social-no") then $myvar else .($key)
     return { $key : $val }
    )

    该脚本输出原始消息,用未加密的字段值代替加密的值(图24)。

    图24.完成的解密策略
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第24张图片
  33. 单击“ 应用策略” 如果这完成了所需的策略配置,请单击“ 关闭窗口”以关闭“处理策略”窗口。 然后在“网关”页面上单击“ 应用 ”。

    如果您提交使用共享密钥加密的有效负载,则将返回原始JSON文档。

    {
      "Name":"Cartoon Studios",
      "AccountID":"8458jf8757275234",
      "Social-no":"123-45-6789",
      "State":"MA"
    }

使用非对称密钥进行元素加密

此方法需要使用加密密钥和证书。 如果尚未创建密钥对象,请按照“ 密钥和证书对”部分中的说明进行操作。

  1. 点击新建规则
  2. 将规则的名称更改为SecureJSON_rule_asencrypt
  3. 将“ 规则方向”设置为 客户端到服务器”
  4. 双击突出显示的“ 匹配操作”图标。
  5. 单击+创建一个新的匹配。
  6. 名称字段中输入ssna
  7. 单击匹配规则选项卡。
  8. 点击添加
  9. 在“ URL匹配”字段中输入 */ssna
  10. 点击应用 窗口关闭。 新规则将输入到网格中,如图25所示。
    图25.配置匹配规则
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第25张图片
  11. 点击应用 窗口关闭。
  12. 单击完成 窗口关闭。 蓝色的“处理策略”窗格再次处于活动状态。
  13. 最后将“ 变换”动作拖到“处理规则”上。
  14. 双击图标。
  15. 在“ 使用文档处理说明”下 ,选择“使用处理控制文件转换”(如果指定)
  16. 输入语言应为JSON转换语言应为Xquery
  17. 单击“ 处理控制文件”下的“上载”按钮,然后上载extract-ssn-output.xq文件。
  18. 单击完成 窗口关闭。

    这是extract-ssn-output.xq文件的内容:

    declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
    declare namespace dp = "http://www.datapower.com/extensions";
    declare option jsoniq-version "0.4.42";
    declare option output:method "xml";
    
      let $ssn := .("Social-no")
    
    return
    
    
    {$ssn}
    

    该脚本从JSON请求中提取Social-no元素的值,并将其包装为XML。 在这种情况下,脚本的输出很重要。 此XML输出在下一步操作中被加密。

    图26.处理策略
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第26张图片
  19. Encrypt图标(图26)拖到处理行上。
  20. 双击图标。 一个新的窗口打开。
  21. 信封方法设置为标准XML加密
  22. 消息类型设置为Raw XML Document
  23. 使用收件人证书Jason ,如图27所示。
    图27.配置加密操作
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第27张图片
  24. 单击完成
    图28.处理策略
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第28张图片

    为了在JSON消息中通过网络传输加密的值,必须对加密的数据块进行URL编码。 下一个动作将执行此任务。

  25. 将“ 变换动作” (图28)拖到“处理规则”上。
  26. 双击图标。
  27. 在“ 使用文档处理说明”下 ,选择“使用XSLT样式表转换” ,如图29所示。
  28. 上载urlencode.xsl文件。
  29. 输出设置为NULL
    图29.配置XSLT转换
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第29张图片

    该样式表在PIPE上下文中检索Encrypted Data XML,对其进行URL编码以进行传输,然后将结果放入DataPower变量中。 输出并不重要。

    
    
    
    
        
            
        
    
        
        
    
        
          
        
    
    
  30. 最后将“ 变换”动作拖到“处理规则”上。
  31. 双击图标。
  32. 在“ 使用文档处理说明”下 ,选择“使用处理控制文件转换”(如果指定)
  33. 输入语言应为JSON转换语言应为Xquery
  34. 点击上传下的处理控制文件,并上传使用加密-var.xq文件。
  35. Input上下文设置为INPUT ,如图30所示。
  36. 输出上下文设置为OUTPUT
    图30.配置最终的XQuery转换
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第30张图片
  37. 单击完成 窗口关闭。 图31显示了已完成的处理策略规则。
    图31.完成的处理规则
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第31张图片

    这是use-encrypted-var.xq文件的内容:

    declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
    declare namespace dp = "http://www.datapower.com/extensions";
    declare option jsoniq-version "0.4.42";
    declare option output:method "json";
    
    let $ssn := .("Social-no")
    
    
    let $myvar := dp:variable("var://context/mine/encrypted")
    
    return
    
    jn:object(
     for $key in jn:keys(.)
     let $val := if ($key = "Social-no") then $myvar else .($key)
     return { $key : $val }
    )

    该脚本输出原始消息,用加密的数据替换Social-no元素。

  38. 单击“ 应用策略” 如果这完成了所需的策略配置,请单击“ 关闭窗口”以关闭“处理策略”窗口。 然后在“网关”页面上单击“ 应用 ”。

    如果使用此规则将示例JSON文档提交到网关,则将返回部分加密的文档,如下所示:

    {
      "State":"MA",
      "AccountID":"8458jf8757275234",
      "Social-no":"%3C%3Fxml+version%3D%221.0%22+encoding%3D%22UTF-8%22%3F%3E%0A%3Cxenc
      %3AEncryptedData+Type%3D%22http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmlenc%23Element%22+xmlns%3Axenc
      %3D%22http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmlenc%23%22%3E%3Cxenc%3AEncryptionMethod+Algorithm
      %3D%22http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmlenc%23tripledes-cbc%22%2F%3E%3Cdsig%3AKeyInfo+xmlns
      %3Adsig%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2F09%2Fxmldsig%23%22%3E%3Cxenc%3AEncryptedKey+Recipient
      %3D%22name%3AJason%22%3E%3Cxenc%3AEncryptionMethod+Algorithm%3D%22http%3A%2F%2Fwww.w3.org%2F2001
      %2F04%2Fxmlenc%23rsa-1_5%22%2F%3E%3Cdsig%3AKeyInfo%3E%3Cdsig%3AKeyName%3EJason%3C%2Fdsig%3AKeyName
      %3E%3C%2Fdsig%3AKeyInfo%3E%3Cxenc%3ACipherData%3E%3Cxenc%3ACipherValue%3EYCbZxpgATnTDySkvoJPJEP
      %2BQfqo323mNnozEUxarFohagST06iY4R%2FuwFPsnQEAIVQbmQqxnvUJ3qA63DtBg4GXAEvAPdgyl1947qU8qtDJzTzLixEM7BE7H
      %2B7ITTDbPiUm6ZslhYe4hvhWYa441AqaA8tdMCL2e5MhcWliTK4Y%3D%3C%2Fxenc%3ACipherValue%3E%3C%2Fxenc
      %3ACipherData%3E%3C%2Fxenc%3AEncryptedKey%3E%3C%2Fdsig%3AKeyInfo%3E%3Cxenc%3ACipherData%3E%3Cxenc
      %3ACipherValue%3EhN7LmbrYWJuEM3hFQYjvXua2p%2FtjnQsgto6vQ%2F1HgzEd5SmjLlH5PgL%2FYCop1MSJPiWI9bO
      %2BYpl811Hi63gO9M3uf7H73%2F8CLTbKjQWkPvuTX0CkGP7LtHMgPGxLvHZxJpusGBN5f6A%3D%3C%2Fxenc%3ACipherValue
      %3E%3C%2Fxenc%3ACipherData%3E%3C%2Fxenc%3AEncryptedData%3E",
      "Name":"Cartoon Studios"
    }

使用非对称密钥进行元素解密

  1. 点击新建规则
  2. 将规则的名称更改为SecureJSON_rule_asdecrypt
  3. 将“ 规则方向”设置为 客户端到服务器”
  4. 双击突出显示的“ 匹配操作”图标。
  5. 单击+创建一个新的Match
  6. 名称字段中输入assn
  7. 单击匹配规则选项卡。
  8. 点击添加
  9. URL匹配字段中输入 */assn
  10. 点击应用 窗口关闭。 新规则将输入到网格中,如图32所示。
    图32.配置匹配规则
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第32张图片
  11. 点击应用 窗口关闭。
  12. 单击完成 窗口关闭。 蓝色的“处理策略”窗格再次处于活动状态。
  13. 最后将“ 变换”动作拖到“处理规则”上。
  14. 双击图标。
  15. 在“ 使用文档处理说明”下 ,选择“使用处理控制文件转换”(如果指定的话) ,如图33所示。
  16. 输入语言应为JSON转换语言应为Xquery
  17. 单击“ 处理控制文件”下的“上载”按钮,然后上载set-dpvar-encrypted.xq文件。
    图33.配置XQuery转换
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第33张图片
  18. 单击完成 窗口关闭。 到目前为止,图34显示了处理策略规则。
    图34.处理规则
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第34张图片

    这是set-dpvar-encrypted.xq文件的内容:

    declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
    declare namespace dp = "http://www.datapower.com/extensions";
    declare option jsoniq-version "0.4.42";
    declare option output:method "xml";
    
      let $ssn := .("Social-no")
    
    let $dono := dp:set-variable("var://context/mine/encrypted", $ssn)
    
    return
    
    
    {$ssn}
    

    在这种情况下,输出并不重要; 设置变量很重要。 下一个动作将使用它。

  19. 将“ 变换”动作拖到“处理规则”上。
  20. 双击图标。
  21. 在“ 使用文档处理说明”下 ,选择“使用XSLT样式表转换” ,如图35所示。
  22. 上载urldecode-var.xsl文件。
  23. 在“ 输出上下文”字段中输入 posted的类型。
    图35.配置XSLT转换
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第35张图片
  24. 单击完成 窗口关闭。

    此样式表的输出很重要。 I由其后的Decrypt操作使用。

    这是样式表:

    
    
    
    
    
        
           
        
    
        
           
        
    
        
    
    
    
  25. 解密图标拖到处理行上。
  26. 双击图标。 一个新的窗口打开。
  27. 从可能的Input上下文中选择发布 ,如图36所示。
  28. 消息类型设置为整个文档
  29. 使用解密密钥 Jason
  30. 输出上下文字段中输入 outdata
    图36.配置解密操作
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第36张图片
  31. 单击完成

    解密后的数据现在位于outdata上下文中。 下一步操作将使用此输入,并将数据放在DataPower变量中,以备后用。

  32. 将“ 变换”动作拖到“处理规则”上。
  33. 双击图标。
  34. 从可能的Input上下文列表中选择outdata ,如图37所示。
  35. 在“ 使用文档处理说明”下 ,选择“使用XSLT样式表转换”
  36. 上载make-decoded-var.xsl文件。
  37. 输出上下文中输入relegate
    图37.配置XSLT转换
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第37张图片
  38. 单击完成 窗口关闭。 图38显示了到目前为止的处理策略规则。
    图38.处理规则
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第38张图片

    此样式表的输出并不重要; 设置变量很重要。

    这是样式表:

    
    
    
    
        
        
    
  39. 最后将“ 变换”动作拖到“处理规则”上。
  40. 双击图标。
  41. 从可能的Input上下文列表中选择INPUT ,如图39所示。
  42. 在“ 使用文档处理说明”下 ,选择“使用处理控制文件转换”(如果指定)
  43. 输入语言应为JSON转换语言应为Xquery
  44. 单击“ 处理控制文件”下的“上载”按钮,然后上载use-decoded-var.xq文件。
  45. 从可能的输出上下文列表中选择输出
    图39.配置XQuery转换
    websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第39张图片
  46. 单击完成 窗口关闭。
  47. 单击“ 应用策略” 如果这完成了所需的策略配置,请单击“ 关闭窗口”以关闭“处理策略”窗口。 然后在“网关”页面上单击“ 应用 ”。

    这是use-decoded-var.xq文件的内容:

    let $ssn := .("Social-no")
    
    
    let $myvar := dp:variable("var://context/mine/decoded") cast as xs:string
    
    return
    
    jn:object(
     for $key in jn:keys(.)
     let $val := if ($key = "Social-no") then $myvar else .($key)
     return { $key : $val }
    )

    该文件输出未加密的消息。 如果将使用非对称密钥加密的有效负载提交给网关,则会返回原始消息。

    {
              "Name":"Cartoon Studios",
              "AccountID":"8458jf8757275234",
              "Social-no":"123-45-6789",
              "State":"MA"
    }

结论

本文构建的处理策略为您提供了三种不同的方法来保护在基于REST的体系结构中传输的JSON有效负载。 无论传输协议如何,这都会保留有效负载的私密性。 您学习了如何加密整个有效负载或仅选择元素。 对于给定的用例,您可能只需要使用一种方法。 但是,这为您提供了仅创建方案所需的安全处理的策略或基础。

图40显示了处理策略以及本文中描述的所有规则。

图40.完整的处理策略
websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载_第40张图片

翻译自: https://www.ibm.com/developerworks/websphere/library/techarticles/1401_shute/1401_shute.html

你可能感兴趣的:(websphere负载均衡_使用WebSphere DataPower Appliances保护JSON有效负载)