利用WSE 加密SOAP报文(3)

原创 2004年03月23日 09:55:00

WSE对加密的支持<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 WSE支持对SOAP 报文的部分加密.对称加密使用一个共享的密钥,不对称加密支持使用x.509证书.当使用WSE来加密SOAP报文时,整个body节点的内容被加密,除非明确指定不要加密.下面举了2个例子,一个加密这个主体部分,一个加密部分.

WSE运行时库实现了所有的WS-security.SecurityInputFilter SecurityOutputFilter 类中SecurityOutputFilter 类中.前者通过查找Security节点在一个

进入的SOAP报文中,如果该节点存在.它创建了一个代表任意安全标记和加密密钥,解密节点,验证任何数字签名的对象.对于一个进入的报文,任何任何安全的节点都剋通过报文产生的SOAPcontext对象的安全属性进行访问.相反的, SecurityOutputFilter为进出报文实施加密和签名的操作,附带任何特定的安全标记或者加密密钥.安全措施,比如添加标记,加密,或者签署进出报文利用报文的SOAPContext.SecuritySOAPContext.ExtendedSecurity属性, ExtendedSecurity只在需要创建安全报头时候使用Security属性只在为包含最终目的地时使用

配置WSE

尽管在安装时,WSE已经被安装到asp.net Web 服务器上,但是还需要一些额外的配置,如果需要那些asp.net应用使用安全支持的话.当创建完毕asp.net Web 服务后工程后,visual studio.net,引用Microsoft.Web.Services.dll 程序集需要加载到该项目中.你也需要对SOAPExtensionTypes节点添加一个新的SOAP扩展.这可在 Web.config文件中创建一个新的 add 节点.如下所示

<configuration>

    <system.Web>

      ...

        <WebServices>

            <SOAPExtensionTypes>

                <add type=

                "Microsoft.Web.Services.WebServicesExtension,

                 Microsoft.Web.Services,

                 Version=1.0.0.0,

                 Culture=neutral,

                 PublicKeyToken=31bf3856ad364e35"

                priority="1" group="0" />

            </SOAPExtensionTypes>

        </WebServices>

    </system.Web>

</configuration>

 

type属性的值必须不能包含任何间断或者额外的空格.这个例子为了可读性有额外的换行. 如果WebServices SOAPExtensionTypes 节点不存在,它们必须加到 Web.config文件里面.一种更容易的方法是完全WSE配置工具.一种visual studio的插件,使用它您可以非常容易的配置使用WSEWeb service   项目.当然还有一下其他相关的配置必须手工配置.

当使用WSE进行编程时,你需要添加一个Microsoft.Web.Services 和一个System.security名字空间的引用.在客户端和服务器端的工程中,如果既在客户请求和服务器回应中加密了.在客户部分你应该使用添加Web引用工具为基于WSEWeb service工程产生Web service代理.

SOAP报文进行对称加密

接下来,让我们再来看看如何用WSE来给SOAP报文使用对称密钥加密。下面的例子是基于一个启用WSEWeb服务的,这个Web服务将返回一个SOAP回应报文,在该报文正文内包含了一些敏感数据。这么说,客户端给服务发送一个简单的Web服务请求,该请求将返回一个由三元 DES对称加密算法(使用了一个共享密钥和一个初始向量,IV)加密过的XML文档,当客户端收到了加密后的回应信息后,SecurityInputFilter将调用一个在客户端的解密密钥提供程序,来访问客户端上相同的共享密钥,以此来对报文体进行解密,这个解密密钥提供程序必须由你来编写,并且提供一个用于同步共享密钥的方法。这些例子假设双方都知道密钥,并且我们所要做的,仅仅是提供密钥的名字,以此作为一个暗示,给对方知道我们用的是哪个密钥加密的信息。

双方之间管理、同步和和对密钥保密的时候一定要多加小心。有个解决方案使用了一个分布式密钥机制,例如Kerberos。但从WSE1.0版本开始,WSE就不再继续支持Kerberos了。

利用WSE 加密SOAP报文(5)

解密收到的报文不管是在客户端还是在服务器端,WSE总是在SecurityInputFilter实现报文解密的,由于对称加密需要由公共密钥派生出来的加密密钥,你需要创建一个SecurityInputFi...
  • loyalzu
  • loyalzu
  • 2004年03月22日 15:50
  • 844

利用WSE 加密SOAP报文(2)

一个加密后的SOAP 报文下面的SOAP报文示例有一个payment节点,含有一些敏感的客户信息.OAP:Envelope SOAP:xmlsn="http://www.w3.org/2002/12/...
  • loyalzu
  • loyalzu
  • 2004年03月22日 15:50
  • 1229

利用WSE 加密SOAP报文(7)

给收到的报文解密当收到一个由X.509证书加密后的报文后,SoapInputFilter会自动尝试使用用户密钥储存室的私有密钥来进行解密,当然,这个需要告诉WSE运行时哪里可以找到这个证书的额外配置信...
  • loyalzu
  • loyalzu
  • 2004年03月22日 15:51
  • 785

利用WSE 加密SOAP报文(1)

摘要:如何使用支持WS安全规范的WSE(Microsoft Web Services Enhancements)使加密SOAP能够跨越标准HTTP呢?讲述了SOAP报文加密是如何进行,在WS安全和XM...
  • loyalzu
  • loyalzu
  • 2004年03月22日 15:50
  • 1738

利用WSE 加密SOAP报文(6)

加密对外发送的报文我已经修改了前面的GetXmlDocument方法,让它可以使用由WSE实现的基于X.509非对称加密技术。加密回应报文,FindCertificateBySubjectString...
  • loyalzu
  • loyalzu
  • 2004年03月22日 15:51
  • 1005

利用WSE 加密SOAP报文(8)

下面是被WSE在运行时序列化后产生的报文加密后的结果  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xmlns:xsd="http:...
  • loyalzu
  • loyalzu
  • 2004年03月22日 15:51
  • 875

利用WSE 加密SOAP报文(4)

加密对外发送的报文这里我简单描述下如何创建一个可以返回个被加密的XML文档的Web服务。第一步先用using指示符来添加必要的命名空间,如下:using System.Web.Services;usi...
  • loyalzu
  • loyalzu
  • 2004年03月22日 15:50
  • 781

利用WSE 加密SOAP报文增加WEB SERVICE 的安全性

翻译:张勇,周竞 摘要:如何使用支持WS安全规范的WSE(Microsoft Web Services Enhancements)使加密SOAP能够跨越标准HTTP呢?讲述了SOAP报文加密是如何进行...
  • Eastunfail
  • Eastunfail
  • 2004年10月17日 12:40
  • 1708

使用WSE实现对SOAP报文进行加密

摘要:如何使用支持WS安全规范的WSE(Microsoft Web Services Enhancements)使加密SOAP能够跨越标准HTTP呢?讲述了SOAP报文加密是如何进行,在WS安全和XM...
  • deepbluekk
  • deepbluekk
  • 2006年06月01日 09:03
  • 1110

soap报文略说

简单说一下soap报文,有两种版本的报文的报头。 SOAP_1_1_PROTOCOL与SOAP_1_2_PROTOCOL 分别对应的是1.1: 1.2: ...
  • shaguatao
  • shaguatao
  • 2016年09月23日 14:36
  • 1166
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用WSE 加密SOAP报文(3)
举报原因:
原因补充:

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