利用WSE 加密SOAP报文(5)

原创 2004年03月22日 15:50:00

解密收到的报文<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

不管是在客户端还是在服务器端,WSE总是在SecurityInputFilter实现报文解密的,由于对称加密需要由公共密钥派生出来的加密密钥,你需要创建一个SecurityInputFilter能够调用的方法来得到这个对称密钥,然后你就能使用包含在EncryptedData中的密钥和算法信息来帮你找到正确的共享密钥和加密算法了。这个方法必须实现在从Microsoft.Web.Services.Security.IDecryptionKeyProvider派生出来的类中。在我的例子中,DecryptionKeyProvider.GetDecryptionKey方法返回了对称密钥,如下:

 

public DecryptionKey GetDecryptionKey(string encAlgorithmUri,

  KeyInfo keyInfo)

{

 

  //重新创造同样的用于表示128位密钥的16个字节

  byte[] keyBytes = {48, 218, 89, 25, 222, 209, 227, 51, 50, 168, 146,

    188, 250, 166, 5, 206};

 

 

  //重新创造表示初始化向量的8个字节(64位)

  byte[] ivBytes = {16, 143, 111, 77, 233, 137, 12, 72};

 

  SymmetricAlgorithm mySymAlg = new TripleDESCryptoServiceProvider();

  mySymAlg.Key = keyBytes;

  mySymAlg.IV = ivBytes;

 

  //重新创建对称加密密钥

  DecryptionKey myKey = new SymmetricDecryptionKey(mySymAlg);

 

  return myKey;

}

即便在我的方法中并没使用他们,WSE还是要把KeyInfo元素和加密算法的URI传递给这个方法的,决定使用哪一个共享密钥或者加密算法来产生对称密钥

 

为了让SecurityInputFilter能够访问到GetDecryptionKey方法,下面的配置信息必须加入到应用程序的配置文件中(也就是 app.config 文件)

 

<configuration>

  ...

  <microsoft.web.services>

    <security>

      <decryptionKeyProvider

        type="MyClient Assembly.DecryptionKeyProvider,

        MyClientAssembly" />

    </security>

type 属性不能有任何过多的空格或者任何换行。他们只包含上面的内容以增强可读性,这个也可一用WSE设置工具来修改。一旦DecryptionKeyProvider类被添加到客户端而且WSE安全支持已经配置好了,WSE将自动拦截加密数据,一个基于标准的Web服务的2次开发平台程序,就可以让你随心所欲的给客户端编程了。

使用 X.509 证书来给SOAP报文加密

正如我前面提到的,非对称操作有一定开销。当传输大量数据时,从性能上来说,用非对称算法来加密这些数据会显得不太实际,WSE就这个问题,实现了一种伪非对称性加密(pseudo-asymmetric encryption)。和非对称性加密的报文相比,WSE使用一个非对称性算法和X.509证书的一个公开备份,以此来加密对称密钥,而实际上这些被用来给报文加密。当收到报文后,SecurityInputFilter得到和X.509证书相关联的私有密钥,以此给对称密钥解密,然后用解密后的密钥给报文正文解密。为了能让这个例子能够正常工作,一个来自受信任的证书认证的X.509证书(支持加密),必须出现在客户机器上当前用户帐号的个人证书储藏室里面,这个证书的私有密钥也必须出现在本地机器在主管Web服务的服务器的帐号里。另外,CA证书链中的一个证书必须出现在客户端的受信任储存室里,那样WSE才知道可以信任接受到的X.509证书。

 

 

利用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报文(4)

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

利用WSE 加密SOAP报文(3)

WSE对加密的支持 WSE支持对SOAP 报文的部分加密.对称加密使用一个共享的密钥,不对称加密支持使用x.509证书.当使用WSE来加密SOAP报文时,整个body节点的内容被加密,除非明确指定不要...
  • loyalzu
  • loyalzu
  • 2004年03月23日 09:55
  • 945

利用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报文增加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
  • 1112

SOAP请求、响应报文格式

SOAP请求报文格式:   SOAP响应报文格式:
  • a19881029
  • a19881029
  • 2014年06月06日 11:12
  • 15094
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用WSE 加密SOAP报文(5)
举报原因:
原因补充:

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