biztalk中消息加密解密的例子

原创 2007年10月10日 23:51:00

本文测试项目源代码下载:/Files/chnking/CertEncryptMsgSample.rar

       Biztalk
本身支持对消息的加密和解密。不需要开发人员自己写代码对消息进行加密解密,只需在biztalk中做些设置,即可实现biztalk对消息的加密解密任务。

Biztalk对消息的解密解密采用对称加密和非对称加密结合的方式。简单来说,就是使用对称加密算法对实际需要加密的消息进行加密,然后使用非对称加密算法的公钥加密对称加密密钥;解密时反过来,先用非对称加密算法的私钥解密加密后的对称加密算法的密钥,然后用对称加密的密钥解密被加密的消息本身。

Biztalk支持的对称加密的算法有:

l         DES3

l         DES

l         RC2

Biztalk的不对称加密使用X.509证书。

加密是在发送端口中发送管道的MIME/SMIME encoder组件中完成,组件根据发送端口指定的证书,使用证书中的公钥对消息进行加密,加密后的消息形成一个MIME消息发送出去。

解密是在接收端口中接收管道的MIME/SMIME decoder组件中完成,加密后的MIME消息进入到接收端口,然后进入接收位置,组件根据接收位置所属主机的证书,使用证书中的私钥对消息解密。

 

下面演示一个最简单的biztalk加密消息,发送出去后,接收加密消息并解密的例子。

 

clip_image001

 

这个例子实现下面的功能:

Biztalk Server A从文件夹1中读取一个明文消息,在biztalk内部不加任何处理,直接通过发送端口发送到文件夹2,这个消息在经过发送端口的发送管道时(发送端口配置了Biztalk Server B提供的只含有公钥的X.509证书),被使用证书加密。

将密文消息拷贝到Biztalk Server B的接收文件夹3,在接收位置中的接收管道里,使用Biztalk Server B的含有私钥的证书对消息进行解密,解密后的消息不加任何处理直接输出到文件夹4

为了简单起见,测试在一台服务器上进行,一台机器充当Biztalk Server ABiztalk Server B两个服务器的角色。分别用两个流程来完成它们的任务,OrchestrationEncrypt.odx加密消息,OrchestrationDecrypt.odx解密消息。

详细设计步骤:

1、 准备证书和分发

Biztalk Server A加密消息,Biztalk Server B解密消息,加密使用公钥加密,解密使用私钥解密,所以证书需要Biztalk Server B这方面申请或者生成。

关于如何生成或申请证书请参看《使用X.509数字证书加密解密实务(一)-- 证书的获得和管理》。

不管是自己生成的或者申请的,最后结果应该是可以获得一个pfx形式的数字证书,其中包含了公钥和私钥。

为了给合作伙伴加密消息使用,需要将pfx证书导出一个只含有公钥的cer证书,分发给需要加密消息的合作伙伴,它们使用cer证书中的公钥加密消息。

为了方便起见,本文提供的例子代码中分别提供了这两个证书:MyTestCert.pfx(私钥保护密码为password)、MyTestCert.cer

1.1.        解密端证书设置

解密端Biztalk Server B这边,请以主机实例BizTalkServerApplication设定的logon账户登录服务器,然后把MyTestCert.pfx证书导入到“当前用户”证书存储区的“个人”目录下(如何导入证书也请参见上面的文章)。

biztalk Server 2006 Administration Console中,在左边树形目录中依次打开BizTalk Group -- Platform Setting Hosts,选择BizTalkServerApplication主机,打开它的属性窗口,在属性窗口的左边,选Certificates,然后在窗口右边点击Browse按钮,在可选的证书中应该会有前面导入到到“当前用户”证书存储区的“个人”中的MyTestCert证书,选择这个证书。如果没有看到这个证书,可能是证书没有导入到正确的存储区。

这样,接收管道在需要解密时就会使用这个证书进行解密。

1.2.        加密端证书设置

加密端Biztalk Server A这边,把MyTestCert.cer证书导入到“当前机器”证书存储区的“其他人”目录下(如何导入证书也请参见上面的文章)。

2、 加密端设计

2.1.        新建用于加密的发送管道

加密是在发送管道的MIME/SMIME encoder组件中进行,新建一个发送管道SendPipelineEncrypt.btp,在管道的Encode阶段放置上MIME/SMIME encoder组件,然后对组件设置下列属性:

l         Check revocation list – false
当接收到一个加密的消息时是否检查证书吊销表,选择false

l         Content transfer encoding – Base64
最后加密的消息以什么编码传送出去,选Base64

l         Enable encryption – true
对输出的消息是否加密,选true

l         Encrypt alogrithm – DES3
如果消息要加密,选择加密消息的对称加密算法,选DES3

l         Send boby part as attachment – false
是否把消息正文作为附件,选false

l         Signaltrue type – NoSign

是否对消息进行签名,选NoSign

clip_image002

 

2.2.        设计流程

加密是在输出端口的管道中完成的,跟流程没有关系,为了测试,OrchestrationEncrypt.odx流程设计的十分简单,只是起个传递消息的作用:

clip_image003

传送的消息架构很简单,类似这样的消息:

<ns0:id xmlns:ns0="http://CertEndryptMsg.MsgScheSim">simple</ns0:id>

 

2.3.        配置端口

项目部署后,在biztalk administration console配置物理端口。

Port_1绑定到一个File接收端口指向文件夹1PlainTextIn),接收明文消息。

Port_2绑定到一个端口File发送端口指向文件夹2EncryptOut),这个端口的发送管道选择前面新建的SendPipelineEncrypt.btp。查看发送端口属性,属性窗口的左边,选Certificate,然后在窗口右边点击Browse按钮,在可选的证书中应该会有前面导入到到“当前机器”证书存储区的“其他人”中的MyTestCert证书,选择这个证书。如果没有看到这个证书,可能是证书没有导入到正确的存储区。

3、 解密端设计

3.1.        新建用于解密的接收管道

解密是在接收管道的MIME/SMIME decoder组件中进行,新建一个发送管道ReceivePipelineDecrypt.btp,在管道的decode阶段放置上MIME/SMIME decoder组件,然后对组件设置下列属性:

l         Allow non MIME message – false
是否允许非MIME消息,选false

l         Body part index – 0
当有多个部分时,选哪一个部分为消息正文部分,选0

l         Chect revocate list – false
当接收到一个加密的消息时是否检查证书吊销表,选择false

 

在管道的Disassemble阶段放置XML Disassembler组件,以解析xml消息,提升消息中属性和消息类型。

 

3.2.        设计流程

同样用于解密的OrchestrationDecrypt.odx流程也是十分的简单:

clip_image004

 

3.3.        配置端口

项目部署后,在biztalk administration console配置物理端口。

Port_2_1绑定到一个File接收端口指向文件夹3EncryptIn),接收加密的消息。接收位置的接收管道选上面新建的ReceivePipelineDecrypt.btp管道。

Port_2_2绑定到一个File发送端口指向文件夹4DecryptOut),这个端口的把接收位置解密后的消息,直接写入到文件夹。

4、 测试

在本文提供的测试项目代码中有两个测试消息:testSim.xmltestSimL.xml

testSim.xml做测试,testSim.xml消息如下:

<ns0:id xmlns:ns0="http://CertEndryptMsg.MsgScheSim">simple</ns0:id>

把这个文件拷贝到项目下的PlainTextIn目录中,如果正常,在EncryptOut目录下会有加密后的消息输出,打开加密后的消息,是这样的:

Content-ID: {C101BFE8-B609-4B8A-834A-B7874097E0BD}

Content-Description: body

Bcc:

MIME-Version: 1.0

Content-type: application/x-pkcs7-mime; smime-type=enveloped-data; name="smime.p7m"

Content-Transfer-Encoding: base64

 

MIAGCSqGSIb3DQEHA6CAMIACAQAxgcQwgcECAQAwKjAWMRQwEgYDVQQDEwtSb290IEFnZW5jeQIQ

WRRSbjmnU5FINb3pvccz7jANBgkqhkiG9w0BAQEFAASBgHr2zmAgr8kqK0FuEkAkg5lfahVrNuog

QvV+HbU0IKcI1AtsyH20aDwVLxankITC4Umzq47ZcnmNV+HiuNvHKaaVC/0wqwtLylKoKWXKTGoi

/dAewRHE3cV3xJRYFYEnxxDuTH5ORcXdzNmEx+ue+LQrN/m97b31Xe+V3n/ukL3TMIAGCSqGSIb3

DQEHATAUBggqhkiG9w0DBwQIGpLuzeYobt+ggASBsPvdVe4wYYawE5PZTz9UsQwta8PiNHo1NXLU

3XBa7hDcmc2FlO3PtiZ9tWlOZjjopsp3kqIj9w7HLWm/JrFR2sS0qEupZm7jvqSlREcnC8ql83xh

VcuOHYbwhhimGyfM4i5tHZbbVGzHHaxwfas3+hAQbzYyfScmP2XCZUj99+KntZS81NstQ7GCyTxa

v9pJF+8SZKMVmQ3EIdlcK75pPukoEzZlgNuhizgqZr7LZZYOAAAAAAAAAAAAAA==

看到这样的内容,表示消息被正确的加密。

然后把这个加密的消息拷贝到EncryptIn目录,正常情况下,在DecryptOut目录下会输出一个解密后的消息,消息内容跟一开始的testSim.xml一样。

 

Biztalk 2010 的安装与配置

1.  软件安装 安装环境: Windows7 ultimate 版 SQL Server 2008 R2 Enterprise 版。注意:SQL Sever必须要用R2...
  • u011782991
  • u011782991
  • 2013年11月27日 15:11
  • 844

Biztalk中配置EDI消息交换

Biztalk对EDI的支持          EDI作为一项技术标准已经有几十年的历史了。从biztalk 2006R2版本以来,biztalk就能对EDI提供标准的支持。EDI与biztalk结...
  • u011782991
  • u011782991
  • 2013年12月09日 15:08
  • 994

消息驱动bean(MDB)实例

到目前为止前面介绍的有关JavaEE的东西都是同步的,也就是说调用者调用某个方法,那么这个方法必须立即执行并返回执行结果。用官方一些的语言来说就是“客户端通过业务接口调用一个方法,在将控制权返回给客户...
  • beijiguangyong
  • beijiguangyong
  • 2014年12月23日 23:14
  • 2637

Android基础系列-----------Android进程/线程管理应用示例(Android中的消息队列和线程队列机制)

Android通过Looper、Handler来实现消息循环机制。Android的消息循环是针对线程的,每个线程都可以有自己的消息队列和消息循环。Android系统中的Looper负责管理线程的消息队...
  • zhoupenglei
  • zhoupenglei
  • 2015年05月28日 17:30
  • 890

SIP常用消息实例参考 9、OPTIONS消息

9、OPTIONS消息         1)头字段填写说明         必选头域如下:         Call-id         Cseq         From       ...
  • tfhui928
  • tfhui928
  • 2014年10月24日 10:07
  • 1340

C#基础之 --- 消息队列例子

本机上创建一个消息队列: namespace CBIP.CProxy.MSMQBuilder { class Program { static void Main(st...
  • jiq408694711
  • jiq408694711
  • 2014年03月29日 15:20
  • 1984

Biztalk AS2开发经验总结

一、    准备证书    4 1、    升级win2008 R2证书服务    4 2、    申请证书    6 二、    配置证书    13 1、    为AS2配置证书   ...
  • j7lfhdxh
  • j7lfhdxh
  • 2017年02月10日 20:35
  • 394

Biztalk组件介绍

1.    biztalk的由来 没有任何应用程序是完全孤立的。无论我们喜欢与否,将系统整合在一起已成为必然。系统整合不仅仅是交换字节,随着应用软件的复杂化和面向服务的发展,其现实目标也即将实现...
  • u011782991
  • u011782991
  • 2013年10月24日 14:53
  • 830

Biztalk AS2开发经验总结

一、    准备证书    4 1、    升级win2008 R2证书服务    4 2、    申请证书    6 二、    配置证书    13 1、    为AS2配置证书   ...
  • swywkc2i
  • swywkc2i
  • 2017年02月11日 19:47
  • 83

handler的机制和例子解析

一:什么是handler:   今天学了handler,感觉用的还是蛮多的,所以做了一下总结,先来了解下下面的几个重要的组件 1:Message:Hander接收和处理消息对象 2:looper:每一...
  • qq_25591985
  • qq_25591985
  • 2016年01月15日 12:08
  • 1220
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:biztalk中消息加密解密的例子
举报原因:
原因补充:

(最多只允许输入30个字)