当前位置:首页 > 工作总结 > 常用的加密方法_基于WSE安全断言实现Web服务身份验证
 

常用的加密方法_基于WSE安全断言实现Web服务身份验证

发布时间:2019-01-10 04:16:35 影响了:

  摘要:随着Web服务在分布式系统中的广泛应用,安全问题日益突出。文章描述了使用UsernameForCertificateAssertion安全断言对Web服务进行身份验证的实现方法,并给出了一个利用WSE实现Web 服务身份验证的说明性实例。
  关键词:WSE;安全断言;WEB服务
  中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)18-31530-02
  Identity Authentication Based on WSE Security Assertions
  CHEN Jia-hong,HUA Hui
  (Jinling Institute of Technology,Nanjing 210001,China)
  Abstract:With the wide use of Web Services in distributed systems,the issues of Web Services security are becoming increasingly prominent.The paper introduces the method of implementing authentication of Web Services with UsernameForCertificateAs sertion Security Assertion,then illustrate Identity Authentication of Web Services with WSE.
  Key words:WSE;Security Assertion; Web Services
  
  1 引言
  
  越来越多的公司使用Web服务通过Internet 和公司 Extranet 将自己的产品和服务展示给客户和商业伙伴。在这些服务中安全是极为重要的。在网络是Intranet 或者 Extranet 的情况下,我们可以在一定程度上控制两端的终结点,这时可使用平台级的安全服务提供点到点的安全解决方案。但是,Web 服务基于消息的体系结构和跨越信任边界的异构环境对安全问题提出了新的挑战。这时,我们就必须解决跨中间结点的消息级安全。
  要实现Web服务安全,主要就是要实现以下两个方面的安全要求:
  (1)身份验证要求
  如果您的 Web 服务提供敏感的信息,就需要对调用方进行身份验证以支持授权。在 Windows 环境中,可以使用 Windows 身份验证。但是,当您不能控制两端的终结点的时候,可以使用 WSE 提供身份验证解决方案。WSE 为使用SOAP头传递身份验证详细信息提供了一个标准框架。
  (2)私密性和完整性要求
  如果要在 Web 服务请求或者响应消息中传递敏感的应用程序数据就要考虑如何才能保证它们在传输过程中保持私密性、防止被修改。WSE通过数字签名提供了完整性检查,它还支持对SOAP消息整体或部分加密。
  
  2 WSE安全断言
  
  Microsoft 已经发布了Web服务Enhance ments 3.0 for Microsoft .NET (WSE),它支持 WS-Security 以及一系列相关安全标准。我们可以使用WSE实现WEB服务消息级安全,包括身份验证、加密和数字签名。WSE3.0 一共定义了六种总控钥匙安全断言,分别是:AnonymousForCertificateAssertion、sernameForCertificateAssertion、UsernameOverTransportAssertion、MutualCertificate10
  Assertion、MutualCertifi cate11Assertion、KerberosAssertion,这些安全断言是WSE 3. 0中提供的最重要的安全功能,我们可以使用这六种安全断言中的任何一种实现Web服务身份验证。其中,UsernameForCertificateAssertion是使用比较多的一种安全断言,它采用对服务器端使用X.509证书进行验证,对客户端使用用户名令牌(UsernameToken)进行验证的方式实现Web服务身份验证。
  
  3 实例分析
  
  以下将结合一个虚拟的手机话费余额查询的Web服务的例子,讲述如何在Web服务中使用UsernameForCertificateAsser?tion安全断言来实现Web服务的身份验证。
  使用UsernameForCertificateAssertion安全断言时,服务器必须配置一个X.509证书及其相关的私钥,客户端需要配置有自己的用户名/密码令牌,以及服务器端分配的X.509证书(仅公钥)。实现步骤如下:
  (1)平台的构建
  本实例应用程序采用visual studio 2005开发,同时配合WSE3.0实现Web服务的身份验证。为了使用X.省略平台下的两个工具软件make?cert.exe和certmgr.exe。makecert.exe是证书创建工具,它生成仅用于测试目的的 X.509 证书,它创建用于数字签名的公钥和私钥对,并将其存储在证书文件中,此工具还将密钥对与指定发行者的名称相关联,并创建一个 X.509 证书,该证书将用户指定的名称绑定到密钥对的公共部分。certmgr.exe证书管理器工具用于管理证书、证书信任列表(CTL) 和证书吊销列表 (CRL)。现在,我们就运行这两个工具创建并安装证书:
  makecert.exe -sr LocalMachine -ss My -a sha1 -n“CN=WSEQuickStartServer” -sky exchange -pe
  certmgr.exe -add -r LocalMachine -s My -c -n “WSEQuickStartServer” -r CurrentUser -s AddressBook
  特别注意:服务端和客户端都要安装刚才创建好的证书。
  创建一个名为“mobile.省略 Web服务项目,为项目添加Microsoft. Web.Services3.dll引用,并在Service.cs文件中添加语句“using Micro?soft.Web.Services3;”,引用和名称空间添加好之后,我们就可以使用WSE了,如果WSE安装时选择的是和visual studio开发环境集成,那么此时你就可以直接右击Web服务项目,从弹出菜单中选择“WSE Settings 3.0…”菜单项,进入WSE Settings 配置界面,在General 选项卡中选中复选框“Enable this project for Web Services Enhancements”和 “Enable Microsoft Web Services Enhancement SOAP Protocol Factory”,启用WSE 保护,在Policy 页新建一个名为ServicesPolicy 的安全策略, 然后设置此安全策略,其中, 应用类型选择“secure a service application”,客户端验证方式选择“username”, 即采用UsernameForCertificateAssertion安全断言; 启用WS- Security 1.1 扩展, 并在保护级别中选择 “Sign and Encrypt”, 也就是说SOAP 消息必须签名和加密; 然后选择服务端的X.509 证书。安全策略建立好之后,通过在Web服务类service.省略/")]
  [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
  [Policy("ServicesPolicy")]
  public class Service : System.Web.Services.WebService{
  //省略其它代码
  [WebMethod]
  public string returnBalance(string phoneNum) {
  string balance = "";
  string myConnString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source ="f:\wsetest\mobile.mdb"";
  string mySelectQuery = "select * from mobile where phoneNum ="" + phoneNum + """;
  OleDbConnection myConnection = new OleDbConnection(myConnString);
  OleDbCommand myCommand = new OleDbCommand(mySelectQuery, myConnection);
  myConnection.Open();
  OleDbDataReader myReader;
  myReader = myCommand.ExecuteReader();
  if (myReader.Read())
  {balance = myReader[2].ToString().Trim();
  myConnection.Close();
  return balance;}
  else
  {myConnection.Close();
  return "Error";}}
  同时,为了使服务端能够对客户端传递过来的用户名令牌进行验证,我们需要在项目中添加一个从类UsernameTokenManager继承的类MyUsernameTokenManager,代码片断如下:
  //省略其它代码
  using Microsoft.Web.Services3.Security;
  using Microsoft.Web.Services3.Security.Tokens;
  using System.Data;
  using System.Data.OleDb;
  namespace WSETest
  { //省略其它代码
   protected override string AuthenticateToken(UsernameToken token)
  {string phonePsd;
  string myConnString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source ="f:\wsetest\mobile.mdb"";
  string mySelectQuery = "select * from mobile where phoneNum ="" + token.Username + """;
  OleDbConnection myConnection = new OleDbConnection(myConnString);
  OleDbCommand myCommand = new OleDbCommand(mySelectQuery, myConnection);
  myConnection.Open();
  OleDbDataReader myReader;
  myReader = myCommand.ExecuteReader();
  if (myReader.Read())
  {phonePsd = myReader[1].ToString();
  myConnection.Close();
  return phonePsd;}
  else
  {myConnection.Close();
  return "Error";}}
  再次进入WSE Settings 配置界面,在Security 页中添加一个SecurityToken Manager。在Built In Token Managers中选择“UsernameToken Manager”,然后将type 改为“WSETest.MyUsernameTokenManager”,点击“Add” 添加。这表示将由MyUsernameTokenManager类来处理用户名令牌,MyUsernameTokenManager类中的重载函数AuthenticateToken是用来验证客户端提交的用户名和密码的函数。如果验证成功,就允许调用Web Services查询话费余额;否则就会拒绝调用余额查询Web Services。
  (3)客户端应用程序开发
  在vs2005的解决方案中添加一个windows应用程序项目作为客户端应用程序,同样要添加Microsoft. Web.Services3.dll 引用,并在Form1.cs文件中添加语句“us?ing Micro?soft.Web.Services3;” ,同时,为了调用Web服务,我们需要在项目中添加一个到服务端Web服务的一个引用,以此作为服务代理,使我们在客户端应用程序中能调用Web服务。然后,我们也要为客户端设置WSE,在Policy 页新建一个名为“Client?Policy”的安全策略, 应用类型选择“se?cure a client application”表示是客户端程序。证书选择服务端分配的X.509证书,用此证书的公钥对用户令牌进行签名和加密,其它的设置和服服端类似。客户端代码片断如下:
  //省略其它代码
  using Microsoft.Web.Services3.Design;using Microsoft.Web.Services3.Security;
  using Microsoft.Web.Services3.Security.Tokens;
  using Microsoft.Web.Services3.Security.X509;
  using WSEClientWin.svc;
  namespace WSEClientWin
  {//省略其它代码
  ServiceWse sw = new ServiceWse();
  //省略其它代码
  private void button1_Click(object sender, EventArgs e)
  {string phoneNum = textBox1.Text.Trim();
  string PhonePsd = textBox2.Text.Trim();
  UsernameToken uToken = new UsernameToken(phoneNum,PhonePsd);
  sw.SetClientCredential(uToken);
  sw.SetPolicy("ClientPolicy");
  label3.Text = label3.Text + sw.returnBalance(phoneNum) +"元";
  }}
  客户端界面如图1所示:
  图1 客户端界面
  客户端程序运行后,点击“查询”按钮,客户端应用程序用手机号码和密码创建一个令牌,并且在服务代理sw上调用SetClientCredential()方法为服务端提供用户名/密码凭据,如果密码正确,服务端验证就可以通过,这时,客户端就可以调用Web服务方法返回数据库中相关手机号所对应的余额了。至此,服务端和客户端应用程序全部开发完成。
  
  4 结束语
  
  本文通过给出的使用WSE 配合数据库验证用户名/ 密码来获取Web 服务的实例,说明了使用WSE 保证Web 服务安全的基本措施和方法。WSE 3. 0 作为新推出的工具,在实现Web 服务安全方面提供了更加简便、更加全面的设计方案。在该工具的支持下,我们可以通过WSE 3. 0 的策略框架来设计安全架构,快速实现实际应用中的安全需求。
  
  参考文献:
  [1]Microstoft.MSDN.证书创建工具 (Makecert.exe)[EB/OL].https://msdn2.省略/zh-cn/library/bfsktky3.aspx.
  [2]Microstoft. MSDN证书管理器工具 (Certmgr.exe)[ EB/ OL ].https://msdn2.microsoft.-com/zh-cn/library/e78byta0.aspx.
  [3]Keith Brown.Security Features in WSE 3.0.[EB/OL].https://msdn.省略/-msdnmag/issues/05/11/SecurityBriefs/default.aspx,2005-12.
  注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文

猜你想看
相关文章

Copyright © 2008 - 2022 版权所有 职场范文网

工业和信息化部 备案号:沪ICP备18009755号-3