在.net中保证WebService的通讯安全

WebService现在是很通用的技术,在WebService我们需要验证用户是否有使用此WebService的权限,并且要保证在通讯过程中的数据安全,防止数据在传输过程中被网络窃听。

首先是如何保证WebService被授权使用,在这里我说的是通过SoapHeader来判定调用Web服务的用户。

1.定义一个安全上下文,并且继续于SoapHeader类

publicclassSecurityContext:SoapHeader
...{
publicstringUserID;
publicstringPassword;
publicSecurityContextm_SecurityContext;

3.定义一个校验用户名和密码的方法

 

privateboolValidateUser()
...{
if(m_SecurityContext==null)
...{
thrownewException("没有指定用户名和密码");

//这里可以直接访问数据库来验证密码
if(m_SecurityContext.UserID.ToLower()==(newAppSettingsReader()).GetValue("DTUser",typeof(string)).ToString().ToLower()
&&m_SecurityContext.Password==(string)(newAppSettingsReader()).GetValue("DTPassword",typeof(string)))
...{
returntrue;

else
...{
returnfalse;

[WebMethod]
"m_SecurityContext")]
publicDataSetGetChangedDepts(stringDeptCode)
...{
if(!ValidateUser())
...{
returnnull;

returnm_ServiceAll.GetChangedDepts(DeptCode);
//实例化WebService
MyWebServiceservice=newMyWebService();
//实例化SoapHeader(用户上下文)
service.SecurityContextValue=localhost.SecurityContext();
//指定用户名和密码
service.SecurityContextValue.UserID="张三";
="12345";

在指定完用户名和密码后才能调用WebService的方法

上面所说的是如何保证WebService的授权使用,但是在实际使用中,客户端传输到WebService的用户名和密码都是以需要进行加密。因为Http的数据传输是以明文方式进行传输的,假如不加密,很可能被侦听到数据的传输而得到调用WebService的用户名和密码。我们这里所说的是采用SSL的加密方式来调用WebService.

1.首先我们需要配置一个SSL站点

要想为某个IIS网站创建数字证书,首先必须使用“Web服务器证书向导”功能为该网站生成一个证书请求文件。进入“控制面板→治理工具→Internet信息服务(IIS)治理器”,在IIS治理器窗口中展开“网站”目录,右键点击要使用SSL安全加密机制功能的网站,在弹出菜单中选择“属性”,然后切换到“目录安全性”标签页(如图),接着点击“服务器证书”按钮。在“IIS证书向导”窗口中选择“新建证书”选项,点击“下一步”,选中“现在预备证书请求,但稍后发送”,接着在“名称”栏中为该证书起个名字,在“位长”下拉列表中选择“密钥的位长”,这里要注重,位长不能设置的过大,否则会影响通信质量;接着设置证书的单位、部门、和地理信息,在站点“公用名称栏”中输入该网站的域名,然后指定证书请求文件的保存位置,这里笔者将该证书请求文本文件保存在“d:/certreq.txt”。这样就完成了证书请求文件的生成。

完成了证书请求文件的生成后,就可以开始申请IIS网站证书了。但这个过程需要证书服务(CertificateServices)的支持。Windows2003系统默认状态没安装此服务,需要手工添加。

   安装证书服务

 

  在“控制面板”中运行“添加或删除程序”,切换到“添加/删除Windows组件”页,在“Windows组件向导”对话框中,选中“证书服务”选项,接下来选择CA类型,这里笔者选择“独立根CA”,然后为该CA服务器起个名字,设置证书的有效期限,建议使用默认值“5年”即可,最后指定证书数据库和证书数据库日志的位置后,就完成了证书服务的安装。

 

完成了证书服务的安装后,就能开始申请IIS网站证书了。运行InternetExplorer浏览器,在地址栏中输入“http://localhost/CertSrv/default.asp”。接着在“Microsoft证书服务”欢迎窗口中点击“申请一个证书”链接,然后在证书申请类型中点击“高级证书申请”链接,在高级证书申请窗口中点击“使用BASE64编码的CMC或PKCS#10文件提交….”链接,接着将证书请求文件的内容复制到“保存的申请”输入框中,这里笔者的证书请求文件内容保存在“d:/certreq.txt”,最后点击“提交”按钮。

虽然完成了IIS网站证书的申请后,但这时它还处于挂起状态,需要颁发后才能生效。在“控制面板→治理工具”中,运行“证书颁发机构”程序。在“证书颁发机构”左侧窗口中展开目录,选中“挂起的申请”目录,在右侧窗口找到刚才申请的证书,鼠标右键点击该证书,选择“所有任务→颁发”。 接着点击“颁发的证书”目录,打开刚刚颁发成功的证书,在“证书”对话框中切换到“具体信息”标签页。点击“复制到文件”按钮,弹出证书导出对话框,一路下一步,在“要导出的文件”栏中指定文件名,这里笔者保存证书路为为“d:/cce.cer”,最后点击“完成”。

 

 在IIS治理器的“目录安全性”标签页中,点击“服务器证书”按钮,这时弹出“挂起的证书请求”对话框,选择“处理挂起的请求并安装证书”选项,点击“下一步”后,指定好刚才导出的IIS网站证书文件的位置,接着指定SSL使用的端口,建议使用默认的“443”,最后点击“完成”按钮.

 

 完成了证书的导入后,IIS网站这时还没有启用SSL安全加密功能,需要对IIS服务器进行配置。

 

  选择需要加密访问的站点目录(假如希望全站加密,可以选择整个站点),右键单击打开属性页,在“目录安全性”标签页,点击安全通信栏的“编辑”按钮,选中“要求安全通道(SSL)”和“要求128位加密”选项,最后点击“确定”按钮即可。假如需要用户证书认证等高级功能,也可以选择要示客户证书选择,还可以把特定证书映射为windows用户帐户。

 

我们现在就配置好了一个带SSL的虚拟目录,将我们的WebService放入这个虚拟目录中,我们访问WebService时会弹出一个对话框要求我们确认证书。那么我们使用怎样的方式可以用代码来调用使用SSL加密的WebService呢?

 

1.首先在调用的代码里定义一个静态的方法

 

privatestaticboolCheckValidationResult(objectsender,X509Certificatecertificate,X509Chainchain,SslPolicyErrorserrors)
...{//Alwaysaccept
returntrue;
这个方法总是返回true是用于忽略客户端证书时使用,假如要使用客户端证书,可能会用到中间两个参数,这里我没有研究,大家可以研究一下

 

2.在调用方初始化时加入下面的代码

 

ServicePointManager.ServerCertificateValidationCallback=newRemoteCertificateValidationCallback(CheckValidationResult);

 

上面所说的给大家抛砖引玉,通过SoapHeader来保证WebService的授权使用,通过SSL来保证数据的加密,防止网络侦听

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值