转载自 http://blog.csdn.net/firewolffeng/article/details/2310187数据库
Web Service如今是很通用的技术,在Web Service咱们须要验证用户是否有使用此Web Service的权限,而且要保证在通信过程当中的数据安全,防止数据在传输过程当中被网络窃听。windows
首先是如何保证Web Service被受权使用,在这里我说的是经过SoapHeader来判断调用Web服务的用户。浏览器
1.定义一个安全上下文,而且继承于SoapHeader类安全
UserID是定义的用户名,Password是密码,固然这个UserID和密码是能够经过数据库得到的,在这里,咱们固定这两个变量的值服务器
2.在Web Service中定义一个公开的变量,类型是SecurityContext网络
3.定义一个校验用户名和密码的方法ide
4.在公开的,提供给客户调用的Web Service方法里调用校验的方法,如函数
5.在调用方制定用户名和密码工具
在指定完用户名和密码后才能调用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编码的 CMC或PKCS#10文件提交….”连接,接着将证书请求文件的内容复制到“保存的申请”输入框中,这里笔者的证书请求文件内容保存在“d:/ certreq.txt”,最后点击“提交”按钮。
这个语句指定了远程证书校验的回调函数。在指定了远程证书校验的回调函数后,就能够开始实例化WebService
接着点击 “颁发的证书”目录,打开刚刚颁发成功的证书,在 “证书”对话框中切换到“详细信息”标签页。点击“复制到文件”按钮,弹出证书导出对话框,一路下一步,在“要导出的文件”栏中指定文件名,这里笔者保存证书路为为“d:/cce.cer”,最后点击“完成”。
在IIS管理器的“目录安全性”标签页中,点击“服务器证书”按钮,这时弹出“挂起的证书请求”对话框,选择“处理挂起的请求并安装证书”选项,点击“下一步”后,指定好刚才导出的IIS 网站证书文件的位置,接着指定SSL使用的端口,建议使用默认的“443”,最后点击“完成”按钮.
完成了证书的导入后,IIS网站这时尚未启用SSL安全加密功能,须要对IIS服务器进行配置。
选择须要加密访问的站点目录(若是但愿全站加密,能够选择整个站点),右键单击打开属性页,在“目录安全性”标签页,点击安全通讯栏的“编辑”按钮,选中“要求安全通道(SSL)”和“要求128位加密”选项,最后点击“肯定”按钮便可。若是须要用户证书认证等高级功能,也能够选择要示客户证书选择,还能够把特定证书映射为windows用户账户。
这个方法老是返回true是用于忽略客户端证书时使用,若是要使用客户端证书,可能会用到中间两个参数,这里我没有研究,你们能够研究一下
2.在调用方初始化时加入下面的代码
上面所说的给你们抛砖引玉,经过SoapHeader来保证WebService的受权使用,经过SSL来保证数据的加密,防止网络侦听