[转]用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.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.
在按钮的点击事件中加如下代码:
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标签里面。