[转]用WSE 3.0 保护Web Service一例

首先想说的是这方面的中文资料太少了,在CSDN上问也无人问津,所以英文是一定要好好学的!:)
好了,开始了。我们将使用证书给Web Service加密。这里用到了WSE 3.0。
一、导入证书。
先来创建证书,如果你已经有了证书,可以省略,注意你必须有私钥哦!
开始->运行。。。cmd->cipher /R:Mycert
如:
C:\Documents and Settings\admin>cipher /R:Mycert
那么你将在C:\Documents and Settings\admin 下找到Mycert.cer和Mycert.pfx。
接着导入证书,步骤如下:
开始->运行。。。MMC
文件->添加/删除管理单元->添加->证书->添加->计算机帐户,必须是计算机帐户。
这时选看一下有没有“其它人”这个结点,如果没有,使用如下步骤:
            IE->Internet选项->内容->证书->其它人->导入
这里默认文件类型为:X.509证书,这里必须使用:个人信息交换即PFX文件,所以改一下吧。
导入完成后,回到控制台,刷新一下。此时右侧树应该包括“个人”“其它人”。
点开“个人”节点,点中证书,然后右键->所有任务->导入,这里也要导入PFX文件,切记哦!
同样的在“其他人”节点下再导入一遍,用同一本证书即可。
二、配置Web Service站点。
新建Web Service站点。
然后在网站名称上右键->WSE 3.0 Settings...
Gerneral标签里把两个勾都勾上。
Security标签里把 Verify trust前的勾去掉。
Policy标签里把Enable Policy勾上,点击Add...
输入策略名称,如:ServerClient(俺比较懒,取了个“s”)。
确定后选择服务器端的安全,以及证书。

下一步:Perform Authorization勾上,点击Add...

选择你导入的那本证书,注意这里取的是计算机帐户中其它人文件夹。这就是

前面导入证书的地方了。
好的,点击确定,继续。。。
接下来是Message Protection,这里看你的喜好选了,一般默认即可。
Next,再选一本证书,用来加密消息的,注意看这里的store是Local Machine

- Personal Store.
完成。

OK。配置完成。

接下来打开新建Web服务时默认添加的一个Service.cs在App_Code下。
在类前添加这一行:
[Policy("s")]
代码如下:

using  System;
using  System.Web;
using  System.Web.Services;
using  System.Web.Services.Protocols;
using  Microsoft.Web.Services3;

[WebService(Namespace 
=   " http://tempuri.org/ " )]
[WebServiceBinding(ConformsTo 
=  WsiProfiles.BasicProfile1_1)]
[Policy(
" s " )] // 指明使用哪个策略。
public   class  Service : System.Web.Services.WebService
{
    
public Service () {

        
//如果使用设计的组件,请取消注释以下行 
        
//InitializeComponent(); 
    }


    [WebMethod]
    
public string HelloWorld() {
        
return "Hello World";
    }

    
}

这样服务器端就配置好了。

三、客户端配置。
新建一个站点,然后在站点名称上右键,设置WSE。方法同上。
这里过这里应该选择Secure a Client application.
在选择证书的时候别忘了将Store改成Local Machine.其它选择与服务端相同就好了。
配置完成后,先来测试一下吧。
首先是添加Web引用,这里用默认的名称好了。
在Defalut.aspx上加两个组件:Button、Lable.
在按钮的点击事件中加如下代码:

localhost.ServiceWse s  =  
new  localhost.ServiceWse(); 
 
// 注意这里不是Service,而是ServiceWse。
     s.SetPolicy( " ClientPolicy " );
// 配置时取的名称。指明使用哪个策略。
   Label1.Text  =  s.HelloWorld();


OK,浏览一下吧。
四、将Web Service发布到服务器上。
接下来要把Web Service发布到服务器IIS上,在这之前你必须选在服务器上安装你项目中使用的证书。方法同上,导入完成后必须重启计算机。(当然如果你是在你自己机子IIS中,那就不用重复了。)同时还要给你的IIS足够的权限访问证书。这里将用到WSE 3.0中的证书工具:Certificates Tool。打开Certificates Tool之后,选择那本证书,比如在Certificate Location处选择Local Computer,Store Name 中选择Personnal如果有Other Pepel的话,也设置一下。现在是Personnal,选择证书点击“View Private Key File Properties...”,选择“安全”标签,再添加两个用户:ASPNET,NETWORK SERVICE,默认权限即可。 这样所有工作就完成了。如果是服务器,别忘了重启哦!
五、测试。
不说了。
六、常见错误 。
在一系列配置完成后,确保正确的情况下,也有可能会报如下错误:
1、Security requirements are not satisfied because the security header is not present in the incoming message.
R:没重启服务器啦。
2、WSE910
R:服务器和你的计算机时间对不上了。不过你可以放宽限制的,在服务端配置的时候将时间差距调大一点,在Security标签里面。

你可能感兴趣的:(Web,service)