1. 首页
  2. 编程语言
  3. Web开发
  4. 了解 Web 服务规范_第 4 部分:WS-Security.

了解 Web 服务规范_第 4 部分:WS-Security.

上传者: 2018-12-25 16:54:28上传 PDF文件 515.66KB 热度 64次
了解 Web 服务规范_第 4 部分:WS-Security.在我们讨论如何进行更改前,最好了解一下Gene和 Frances面临的现状Classifieds的服务是使用Axis2实现的,而这意味着它包含在*.ar文件中CMSSeryice.aar文件包含三个文件,如清单2中所示。清单2.原始服务的内容MSServicelassme la-inf/Manifest. MFmeta-inf/services. xml此类本身相当简单,接受一个列出类别的SOAP消息,并返回包含该类别的广告数量的SOAP消息。它将按照 services,xml文件(请参见清单3)所定义的方式执行此功能清单3.原始 services.xm1文件This is a sample Web Service for the newspapersContent Managment SystemK/description>Parameter name="ServiceClasslocked="false">CMSServiceKmessageReceiver class-org. apache axis2. receivers. Raw INOut MessageReceiver />保扩服务的安全仅涉及到对 services.xm1文件进行处理;Gene和 frances完全不必接触实际的Java类。回页首当前客户机客户机本身相当简单,仅发出并显示请求,如清单4中所示:清单4.原始客户机类import org. apache axis2 Constantsimport org. apache axis2 addressing Endpoint Referenceimport org. apache axis2 client. Optionsimport org. apache axis2 client. Serviceclientimport org. apache axiom. om. OMElementimport org. apache axiom. om. OMAbstractFactoryimport org. apache axiom. soap. SOAPFactoryimport org. apache axiom. om. OMName spaceimport org. apache axis2 context Configuration Contextimport org. apache axis2 context Configuration ContextFactory:public class ClassifiedClient tprivate static endpointReference targetEPRnew EndpointReference(http://localhost:8888/axis2/services/cmsservice)oublic static OMElement getNumOfArticlesoMElemento ISOAPFactory fac=OMAbstractFactory. getSoAP12Factory o)OMName space omNs- fac creat eOMNamespace(http://daily-moon.com/cms",cms")OMElemlent me thod= fac. crealeOMElement(getNumberOrArticlesOMElement value= fac. createOMElement( category, omNs)value. addChild(fac. createOMText(value, classifieds //ethod addChild (value)return methodlic static void main (Stringg args)(trOMElement pay loadClassifiedClient. getNumOfArticlesOMElementOOptions options new Options ooptions. setTo( targetEProptions settransporTinprotocol(constants. TraNspoRt Http)ServiceClient sender new Serviceclient osender. setOptions(options)OMElement result- sender sendReceive(pay loadString response result getTextystem. out. printIn(There are response+classifieds at the moment. "g catch(ExceptionSystem. out. printIn(e tostring()请注意,Gene已将端点端口更改为8888,而不是 Geronimo所侦听的8080端凵。他之所以这样做,是为了插入其他步骤,以便能看到往返传递的消息回页首查看消息为了查看实际的SOAP消息,请从http://ws.apacheorg/commons/tcpmon/download.cgiF*TcpMonO(axiS2提供了 SOAPMoni tor,但Gene发现除了设置方面的麻烦以外,它仅显示SOAP,却没有显示必要的原始消息,而后者正是我们希望杳看的内容。)下载后,请解压缩应用程序,并运行 tcpmon-1.0-bin\ build\ tcpmon.bat文件。单击 Admin选项卡,并创建新侦听器,如图1中所示。图1. TCPMon的 Admin选项卡TCPMonAdmin senderCreate a new TCPMon.Listen Port*8888Act as a..Target Hostname.0.0.1Target Port+8080O ProxyOptions□ Http pRoxY SupportHostnameP□ Simulate slow connectionBytes per Pausen Milliseconds选择888作为要侦听的端口,并指定8080为目标端口,以便使 TCPMon位于客户机和服务器之间。单击Ad,然后单击Port888选项卡。单击 XML Format复选框。现在,当 Frances运行客户机时,Gene可以看到请求和响应,如图2中所示图2.原始请求和响应TeAdmin Sender B808Srp Listen Port: 8888 Host: 1270.0.1Port: BD80ProrySu:TineRe启时H时Tag时tHetRequesterElapsed TimeMost RecentDone 2005-05-19 07: 3, localhostE27001PT声YsB3Remove Selected Remove AllPosT /axisz/aervicea/ensservice Http/1.1Uger-igent: Axis/2.0QPcB!照理Bost127.0.0,1:88gaTranater-gncoding: chunkedContent-TyPe: text/xml: charset-UTT-g135?xml version '1,0 encoding"UTF-87>Boapewv:emvelopeximinb:goapenvehttp://schemas.xm1s0ay.orw/beapenvelope/>dsoapenv: HendeE /Ksoapenv: EnvelopeXmins:soapeny=http://schemas.xmlsoap.org/soap/envelope/>soapenv:Header/>Ksoapenv: Body>cms: getNumberOfArticlesxmins:cms-http://daily-moon.com/cms">Kcms: category>classifiedsK/ soapenv: Body>soapenv: Envelope响应也同样简单,如清单6中所示清单6.原始响应K?xmI version=1.0 encoding=UTF-8?>soapenv: Envelope xmlns: soapenv=http://schemas.xmlsoap.org/soap/envelope/Ksoapenv: Header />(Soapery: Body>Resp: numberOfArcticlesxmlns: resp="htlp: //daily-lmOon com/ cms/xmins:tns-http://ws.apacheorg/axis242/resp: numberOfArcticlesK/soapery: Body>在这两个消息中, Frances将在 Header元素中放入其他信息,供服务器(或客户机)进行处理。目前任何人都可以向服务发送请求并获取响应,而这正是让Rudy感到紧张的原因。他希望对服务进行设置,以使得只有授权川户才能获得信息,而竞争者无法截取信息。Rudy指出这是一个不错的概念验证系统。他真正担心的是更为复杂的系统,如向财务系统添加内容或进行访问的系统。但概念是相同的。为了提供这个安全机制,Gene和 Frances需要使用加密及其相关技术一一签名加密和签名大部分安全性措施都涉及到某种形式的加密或数字签名中的加密,因此在Frances i gene开始进行服务的安全配置前,她希望确保他们能理解自己即将进行的工作加密类型加密是对信息进行遮蔽以使其在没有特殊知识的情况下不能阅读的过程。已经出现了很多不同类型的加密方式。现代加密是应用于消息的定义良好的转换序列和某种形式的“密钥”。所得到的结果是无法阅读的杂乱数据。解密是与此相反的过程,也涉及到密钥,因此,通过将对密钥进行保密,可以很好地确保其他人都不能阅读经过加密的消息、ε现代加密方法可以根据是使用个密钥还是两个密钥来进行分类在对称密钥算法(例如,DES)中,发送方和接收方必须事先确定共享密钥,并将其对其他各方保密:发送方使用此密钥进行加密,而接收方使用相同的密钥进行解密。在这种情况下,除了密钥应该由且仅由涉及的双方知道外,密钥本身并不重要。在非对称密钥算法(如RSA)中,存在两个分开的密钥:公钥向外公开,都知道其属于某个特定的个人(或组织),而会将对应的私钥保密。采用公钥加密的消息仪能由私钥进行解密,因此仼何人都可以向特定个人发送保密消息。但反过来也成立,因此可使用某人的公钥解密的消息一定是由此人发出的。我们将说明这如何在对SOAP消息进行加密和签名的过程中应用回页首对文件进行加密Gene决定首先看看实际消息文本如何受加密影响。她首先从文本文件msg.txt着手,此文件仅包含一行内容,如清单7中所小。清单7.目标文本Hello. world!为了简单起见,他使用了免费的 GnuPg程序来执行清单8中所示的命令清单8.加密命令gpg. exe -c -a --cipher-algo 3DESmsg. txt此命令将使该程序使川对称密钥算法3DES来对文件进行加密。程序公询问passphrase(cene输入的是“ password”),然后将生成文件msg.txt.asco可以在清单9中看到此文件的内容清单9.经过加密的文件BeGIn PGP MESSaGe----Version: GnuPG v1. 4. 2.2(MingW32)jAOEAgMCqF jZXeujyOJgy SokQ2qhpCpGERKpFnOi 4kw jpI51BLcoTyH4p61YJkDAi RMbC6PfcBmg-=G4ENFEND PGP MESSAGE----当然,没有人能够据此猜岀原始文木。成功后,Gene继续处理数字签名的问题回页首签名如何工作数字签名使用加密技术,但签名的目的不同。签名不会对消总进行遮蔽,而是让接收方相信两个信息的真实性:消息的发送方和消息本身它的工作方式是这样的。发送方使用其私钥对消息进行加密。此“签名”将随后与原始消息一起发送到接收方。接收方尝试验证签名,即使用发送方的公钥对签名进行解密,并将结果与原始消息进行比较。如果此过程成功完成,接收方可以确保发送方为消息的唯一发出者,因为除了发送方之外,没有人具有其私钥。而且,如果原始消息在传输过程中发生了更改,解密后的签名将不会与其匹配,因此成功的签名验证也意味着没有对消息进行篡改。通常发送方不会对整个消息进行签名,而计算消息的一个“摘要”(使用加密散列函数),对此摘要进行签名,并将其随未加密的消息一起传递。接收方计算所接收到的消息的摘要,并将其与解密得到的签名摘要进行比较。这可提供相同的功能,但不会让每个消息的大小因此而翻倍。(它还减少了创建和验证签名的处理时间。)回页首对文件签名成功后Gene大受鼓舞,决定对此进行实际应用。他要对之前进行了加密的msg.txt文件进行数字签名。由于通过GuPG可方便地对文件进行签名,因此他将使用同一个软件,不过稍后将使用不同的技术来创建实际应用程序所使用的密钥。第一步是使用清单10中的命令创建密钥对
用户评论
码姐姐匿名网友 2018-12-25 16:54:28

很早就下载了,对学习ONVIF协议有一定帮组