加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 23:25:50 所属栏目:安全 来源:网络整理
导读:?? Web Service现在是很通用的技术,在Web Service我们需要验证用户是否有使用此Web Service的权限,并且要保证在通讯过程中的数据安全,防止数据在传输过程中被网络窃听。 首先是如何保证Web Service被授权使用,在这里我说的是通过SoapHeader来判断调用Web
??

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

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

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

public ? class ?SecurityContext?:?SoapHeader

... {

????
public?string?UserID;

????
?Password;

}

UserID是定义的用户名,Password是密码,当然这个UserID和密码是可以通过数据库获得的,在这里,我们固定这两个变量的值

2.在Web Service中定义一个公开的变量,类型是SecurityContext

?SecurityContext?m_SecurityContext;

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

?

private bool ?ValidateUser()

????
... {

????????
if?(m_SecurityContext?==null)

????????
...{

????????????
thrownew?Exception("没有指定用户名和密码);

????????}

????????

????????
//这里可以直接访问数据库来验证密码

?????????(m_SecurityContext.UserID.ToLower()??(?AppSettingsReader()).GetValue(DTUser,?typeof()).ToString().ToLower()

????????????
&&?m_SecurityContext.Password?)(DTPassword)))

????????
...returntrue;

????????}

????????
else

????????
...false

????}
4.在公开的,提供给客户调用的Web Service方法里调用校验的方法,如

[WebMethod]

????[SoapHeader(
" m_SecurityContext )]

????
?DataSet?GetChangedDepts( string ?DeptCode)

????
... !ValidateUser())

????????
...

???????

????????
?m_ServiceAll.GetChangedDepts(DeptCode);

????}

5.在调用方制定用户名和密码

// 实例化Web?Service

MyWebService?service? = new ?MyWebService();

实例化SoapHeader(用户上下文) service.SecurityContextValue? ?localhost.SecurityContext();

指定用户名和密码 service.SecurityContextValue.UserID? 张三 ;

service.SecurityContextValue.Password?
12345 ;

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

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

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

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

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

  安装证书服务

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

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

? 这个语句指定了远程证书校验的回调函数。在指定了远程证书校验的回调函数后,就可以开始实例化WebService

虽然完成了 IIS 网站证书的申请后,但这时它还处于挂起状态,需要颁发后才能生效。在 控制面板 管理工具 中,运行 证书颁发机构 程序。在 证书颁发机构 左侧窗口中展开目录,选中 挂起的申请 目录,在右侧窗口找到刚才申请的证书,鼠标右键点击该证书,选择 所有任务 颁发

 接着点击颁发的证书目录,打开刚刚颁发成功的证书,在证书对话框中切换到详细信息标签页。点击复制到文件按钮,弹出证书导出对话框,一路下一步,在要导出的文件栏中指定文件名,这里笔者保存证书路为为“d:/cce.cer”,最后点击完成

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

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

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

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

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

static ?CheckValidationResult( object ?sender,?X509Certificate?certificate,?X509Chain?chain,?SslPolicyErrors?errors)

????????
... {??????Always???accept???????????????;

????????}

这个方法总是返回true是用于忽略客户端证书时使用,如果要使用客户端证书,可能会用到中间两个参数,这里我没有研究,大家可以研究一下

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

ServicePointManager.ServerCertificateValidationCallback? ?RemoteCertificateValidationCallback(CheckValidationResult);

?

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读