首页 > 开发 > 综合 > 正文

利用WSE 加密SOAP报文(5)

2024-07-21 02:21:39
字体:
来源:转载
供稿:网友
,欢迎访问网页设计爱好者web开发。解密收到的报文

不管是在客户端还是在服务器端,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证书。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表