65.9K
CodeProject 正在变化。 阅读更多。
Home

安全的消息解决方案

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.79/5 (5投票s)

2008年1月22日

LGPL3

7分钟阅读

viewsIcon

53740

downloadIcon

491

我们正在通过互联网发送和接收敏感信息。我们希望保护与合作伙伴交换的所有消息。

Sample Image - maximum width is 600 pixels

引言

我们正在通过互联网发送和接收敏感信息。我们希望保护与合作伙伴交换的所有消息。

背景

Microsoft® BizTalk® Server 在很大程度上依赖于证书提供的安全性。通过使用证书进行加密和数字签名,BizTalk Server 可以发送和接收可信的数据。通过使用证书进行加密和数字签名,BizTalk Server 可以

  • 发送和接收可信的数据。
  • 确保它处理的数据是安全的。
  • 确保授权方能够收到其消息。
  • 确保它能够收到来自授权方的消息。

创建证书

我们需要创建一个证书来用于加密和解密我们的安全消息示例。

MakeCert 测试证书

MakeCert 测试证书是一种 Authenticode 数字证书,由 MakeCert 工具创建。MakeCert 测试证书是自签名根证书。要创建 MakeCert 测试证书,请使用 MakeCert 工具,如下所示:

MakeCert -r -pe -ss TestCertStoreName -n "CN=CertName" CertFileName.cer 

其中

  • -r 选项指定证书是自签名的,即该证书是根证书。
  • -pe 选项指定与证书关联的私钥可以导出。
  • -ss TestCertStoreName 选项指定包含测试证书的证书存储的名称。
  • -n "CN=CertName" 选项为证书指定一个名称,该名称可与 SignTool 命令行工具一起使用以标识证书。建议使用一个能清晰地将证书标识为测试证书的名称,例如,“WDK Driver Testing Cert - for in-house use only.”。如果未提供证书名称,证书的默认名称为“Joe's Software Emporium”。
  • CertFilename.cer”是包含测试证书副本的文件名。证书文件用于将证书添加到“受信任的根证书颁发机构”证书存储和“受信任的发布者”证书存储。
    存储证书
  • 根据证书的用途(签名消息、验证签名、解密消息、加密消息或方解析),它必须安装在特定的证书存储中。BizTalk Server 使用两个 Windows® 证书存储 - 用于公钥的“其他人员”证书存储(在本地计算机文件夹中),以及用于每个主机实例的服务帐户的“个人”证书存储(在当前用户文件夹中)用于私钥。

其他人员证书存储。顾名思义,公钥证书是公开的,任何能够访问存储它们的计算机的用户都可以访问。BizTalk Server 从此存储检索公钥证书,用于加密消息和验证传入消息的数字签名。所有用户都可以读取和使用此存储中的证书。下图显示了 BizTalk Server 用于公钥证书的“其他人员”证书存储。

图 1:其他人员证书存储

个人证书存储:BizTalk Server 使用私钥证书来解密传入消息和签名传出消息。每个有权交互登录计算机的 Windows 帐户都有一个只有该帐户可以访问的个人证书存储。BizTalk Server 使用每个主机实例服务帐户的个人证书存储来访问每个服务帐户有权访问的私钥证书。私钥证书必须存储在每个计算机上运行的主机实例的服务帐户的个人证书存储中,该主机实例需要该证书来解密或签名传出消息。

注意:在使用个人证书存储进行编程操作(例如脚本导入和导出证书)时,它也称为 MY 证书存储。下图显示了 BizTalk Server 用于私钥证书的“个人”证书存储。

图 2:个人证书存储

有关证书存储和 Microsoft Management Console (MMC) 的证书管理单元的更多信息,请在 Windows XP、Windows Server™ 2003 或 Windows 2000 Server 帮助中搜索“证书控制台”。

每个存储所需的证书

下表描述了您必须安装在每个 Windows 证书存储中的证书。

表 1:每个 Windows 证书存储的证书
证书用途 证书类型 证书存储

签名

自有私钥

个人存储,适用于具有配置为签名消息的 MIME/SMIME 编码器管道组件(“添加签名证书到消息”属性设置为“True”)的发送管道的每个主机实例服务帐户。

验证签名

合作伙伴公钥

其他人员存储,适用于在具有配置了 MIME/SMIME 解码器管道组件的接收管道的每个计算机上的主机实例。

解密

自有私钥

个人存储,适用于具有 MIME/SMIME 解码器管道组件的接收管道的每个主机实例服务帐户。

加密

合作伙伴公钥

其他人员存储,适用于在具有配置为加密消息(“启用加密”属性设置为“True”)的 MIME/SMIME 编码器管道组件的发送管道的每个计算机上的主机实例。

方解析

合作伙伴公钥

其他人员存储,适用于从您正在配置方解析的管理计算机。

解决方案

图 3:解决方案概念

该解决方案包括创建两个管道。一个用于解密传入消息的接收管道,以及一个用于加密传出消息的发送管道。此解决方案中的示例使用了四个端口,两个用于加密场景,两个用于解密场景。

  1. 明文接收端口,用于消耗需要加密的目录中的文件。此接收端口使用一个接收位置,该位置使用标准的“Microsoft.BizTalk.DefaultPipelines.XMLReceive”管道。
  2. Enc 发送端口,订阅明文接收端口。此发送端口使用“PracticalBTS.EncryptPipeLine.EncSendPipeline”管道。下图显示了配置。请注意,在“传出加密”中,证书名称已设置为接收方在“其他人员证书存储”中的证书。

图 4:发送加密端口设置。
  1. Enc 接收端口,用于消耗目录中已加密并需要解密的文件。此接收端口使用一个接收位置,该位置使用“PracticalBTS.EncryptPipeLine.DecReceivePipeline”管道。下图显示了配置。

图 5:端接收位置端口配置

请注意,我们未指定用于解密消息的证书。因为 BTS 使用 BTS 组中定义的证书,如下图所示

图 6:BizTalk 组属性证书设置
  1. 明文发送端口 - 此端口订阅 Enc 接收端口,并将输出保存到文件中,以便我们可以检查它

管道实现

接收解密管道

图 7:接收解密管道

上图显示了接收管道。如您所见,我们在解码阶段插入了 MIME/SMIME 管道组件。在拆装阶段,我们插入了 XML 拆装器管道组件。此接收管道中的任何组件都没有特殊设置,我们仅接受默认设置。

发送加密管道

图 8:加密发送管道

上图显示了加密发送管道。在此管道中,我们在组装阶段有标准的 XML 组装器管道组件,在编码阶段有 MIME/SMIME 编码器组件。

图 9:编码器管道组件设置

上图显示了 MIME/SMIME 编码器管道组件的设置,我们在其中启用了加密并选择了“DES3”加密算法。在此示例中,我们不打算签名消息,因此我们将签名选择为“NoSign”。

部署解决方案

  1. 安装证书
  2. 编译和部署解决方案

使用安全消息部署脚本来部署解决方案。

Using the Code

要测试配置,请将一个示例 XML 文件从“Data Folders\Sample XML Files”或任何其他有效 XML 文件复制并放入“Data Folders\SecureMessaging\Encryption\In”文件夹。在 BTS 处理完消息后,您将在“SecureMessaging\Encryption\Out”找到加密后的文件,加密后的文件应如下所示:

图 10:示例加密消息

将加密的消息复制到“Data\SecureMessaging\Decryption\In”,在 BTS 处理完消息后,您将在“Data\SecureMessaging\Decryption\out”找到明文消息。

关注点

证书授权

A message received by adapter "FILE" on receive location 
"EncReceive Location" with URI "…\*.txt" is suspended. 
Error details: There was a failure executing the receive pipeline: 
"PracticalBTS.EncryptPipeLine.DecReceivePipeline, 
PracticalBTS.EncryptPipeLine, Version=1.0.0.0, Culture=neutral, 
PublicKeyToken=e56921b90feec973" Source: "MIME/SMIME decoder" 
Receive Port: "EncReceivePort" URI: "\SecureMessaging\Decryption\In\*.txt" 
Reason: Could not validate the Trust Chain of the encryption certificate. 
The certificate issuing authority may not be a trusted Certificate Authority. 
MessageId: {9C0C7B4B-D2B7-489F-A343-6355F5BFA9AC}
InstanceID: {67753340-9C17-4C7B-8364-501BFD5F2FD3}

解决方案

确保您已将证书安装在受信任的 Authority 文件夹中。

历史

访问 www.MoustafaRefaat.com\Bits 查找更多信息。

© . All rights reserved.