soap加密
1. 如何给soap message element加密
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<UserLogin xmlns="http://bom.syd.com">
<in0>R0+TrgbtXiw=</in0>
<in1>R0+TrgbtXiw=</in1>
<in2>1</in2>
</UserLogin>
</soap:Body>
</soap:Envelope>
2. soapheader文件是什么格式,怎样获取他并进行验证
header就是soap的头
soap结构是
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Header>
...
</soap:Header>
<soap:Body>
...
<soap:Fault>
...
</soap:Fault>
</soap:Body>
</soap:Envelope>
这里哪个Header就是了。
如何做验证都是自己决定
例如header中传输个用户名、密码什么的或者时间戳等加密的方式 都可以
3. 证书调用Paypal的soap接口,报文中的密码是采用什么方式加密的,有相关实施经验的支援下
使用SSL协议进行的加密
4. soap是什么牌子,
SOAP
求助编辑网络名片
SOAP:简单对象访问协议,简单对象访问协议(SOAP)是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。 SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。
目录
简介四个部分
协议结构
语法规则
SOAP 核心技术
SOAP 的优点
php SOAP实例
消息格式
剖析SOAP封套
SOAP-RPC
SOAP用例
小结简介 四个部分
协议结构
语法规则
SOAP 核心技术
SOAP 的优点
PHP SOAP实例
消息格式
剖析SOAP封套
SOAP-RPC
SOAP用例小结展开 编辑本段简介
简单对象访问协议含义 这里之所以说是简单,是因为它是基于已经广泛使用的两个协议:HTTP和XML,所以业界把这种技术称为“它是第一个没有发明任何新技术的技术",之所以说是对象,是因为把访问的Web服务称为对象,既然服务是对象,那么服务肯定有相关的属性和调用行为,这些属性和行为是通过WSDL来描述的。如果按“简单的对象访问协议”来理解,相比“简单对象访问协议”要容易些。
四个部分
soap。n.(英文)肥皂 SOAP:简单对象访问协议 (SOAP:Simple Object Access Protocol) SOAP 包括四个部分: SOAP 封装:它定义了一个框架 , 该框架描述了消息中的内容是什么,谁应当处理它以及它是可选的还是必须的。 SOAP 编码规则:它定义了一种序列化的机制,用于交换应用程序所定义的数据类型的实例。 SOAP RPC 表示:它定义了用于表示远程过程调用和应答的协定。 SOAP 绑定:定义了一种使用底层传输协议来完成在节点间交换SOAP封装的约定。 SOAP 消息基本上是从发送端到接收端的单向传输,但它们常常结合起来执行类似于请求 / 应答的模式。所有的 SOAP 消息都使用 XML 编码。一条 SOAP 消息就是一个包含有一个必需的 SOAP 的封装包,一个可选的 SOAP 标头和一个必需的 SOAP 体块的 XML 文档。 把 SOAP 绑定到 HTTP 提供了同时利用 SOAP 的样式和分散的灵活性的特点以及 HTTP 的丰富的特征库的优点。在HTTP上传送 SOAP 并不是说 SOAP 会覆盖现有的 HTTP 语义,而是 HTTP 上的 SOAP 语义会自然的映射到 HTTP 语义。在使用 HTTP 作为协议绑定的场合中, RPC 请求映射到 HTTP 请求上,而 RPC 应答映射到 HTTP 应答。然而,在 RPC 上使用 SOAP 并不仅限于 HTTP 协议绑定。 SOAP也可以绑定到TCP和UDP协议上。
协议结构
SOAP 消息格式: SOAP 标头 <SOAP-ENV: Envelope Attributes> <SOAP-ENV:Body Attributes> </SOAP-ENV:Body> </SOAP-ENV:Envelope>目前主要在web服务中运用。
编辑本段语法规则
这里是一些重要的语法规则: SOAP 消息必须用 XML 来编码 SOAP 消息必须使用 SOAP Envelope 命名空间 SOAP 消息必须使用 SOAP Encoding 命名空间 SOAP 消息不能包含 DTD 引用 SOAP 消息不能包含 XML 处理指令
编辑本段SOAP 核心技术
SOAP采用了已经广泛使用的两个协议:HTTP 和XML。HTTP用于实现 SOAP 的RPC 风格的传输, 而XML 是它的编码模式。采用几行代码和一个XML 解析器, HTTP 服务器( MS 的 IIS 或 Apache) 立刻成为SOAP 的 ORBS。SOAP 通讯协议使用 HTTP 来发送XML 格式的信息。HTTP与RPC 的协议很相似,它简单、 配置广泛,并且对防火墙比其它协议更容易发挥作用。HTTP 请求一般由 Web 服务器软件(如 IIS 和Apache)来处理, 但越来越多的应用服务器产品正在支持HTTP。XML 作为一个更好的网络数据表达方式( NDR)。SOAP 把 XML 的使用代码化为请求和响应参数编码模式, 并用HTTP 作传输。具体地讲, 一个SOAP 方法可以简单地看作遵循SOAP编码规则的HTTP请求和响应, 一个 SOAP 终端则可以看作一个基于HTTP 的URL, 它用来识别方法调用的目标。像CORBA/ IIOP一样, SOAP不需要具体的对象绑定到一个给定的终端, 而是由具体实现程序来决定怎样把对象终端标识符映像到服务器端的对象。
编辑本段SOAP 的优点
(1) SOAP 是可扩展的。SOAP 无需中断已有的应用程序, SOAP 客户端、 服务器和协议自身都能发展。 而且SOAP 能极好地支持中间介质和层次化的体系结构。 (2) SOAP 是简单的。客户端发送一个请求,调用相应的对象, 然后服务器返回结果。这些消息是XML 格式的,并且封装成符合HTTP 协议的消息。因此,它符合任何路由器、 防火墙或代理服务器的要求。 (3) SOAP 是完全和厂商无关。SOAP可以相对于平台、 操作系统、 目标模型和编程语言独立实现。另 外,传输和语言绑定以及数据编码的参数选择都是由具体的实现决定的。 (4) SOAP 与编程语言无关。SOAP 可以使用任何语言来完成, 只要客户端发送正确SOAP 请求( 也就 是说, 传递一个合适的参数给一个实际的远端服务器)。SOAP 没有对象模型, 应用程序可以捆绑在任何 对象模型中。 (5) SOAP 与平台无关。SOAP 可以在任何操作系统中无需改动正百分比法办法常运行。
编辑本段PHP SOAP实例
php提供了一个专门用于soap操作的扩展库,使用该扩展库后 可以直接在php中进行soap操作。下面将介绍soap的基本操作。 一、soap扩展的使用方法 php的soap扩展库通过soap协议实现了客服端与服务器端的 数据交互操作。从php5.0后,php就自带了soap的支持。使用 soap扩展库首先需要修改php安装目录下的配置文件php.ini 来激活soap扩展库。 在php.ini文件中找到如下所示的一行代码,去掉前面的注释(;)。 ;extension=php_soap.dll 修改后,重启web服务器即可激活soap扩展。在soap扩展库中,主要 包括三种对象。 1、SoapServer SoapServer用于创建php服务器端页面时定义可被调用的函数及返回 响应数据。创建一个SoapServer对象的语法格式如下: $soap = new SoapServer($wsdl,$array); 其中,$wsdl为soap使用得wsdl文件,wsdl是描述Web Service的一种 标准格式,若将$wsdl设置为null,则表示不使用wsdl模式。$array是 SoapServer的属性信息,是一个数组。 SoapServer对象的addFunction方法是用来声明哪个函数可以被客户端调用, 语法格式如下: $soap->addFunction($function_name); 其中,$soap是一个SoapServer对象,$function_name是需要被调用的函数名。 SoapServer对象的handle方法用来处理用户输入并调用相应的函数,最后返回 给客户端处理的结果。语法格式如下: $soap->handle([$soap_request]); 其中,$soap是一个SoapServer对象,$soap_request是一个可选参数,用来表示 用户的请求信息。如果不指定$soap_request,则表示服务器将接收用户的全部 请求。 2、SoapClient SoapClient用于调用远程服务器上的SoapServer页面,并实现了对相应函数的调用 。创建一个SoapClient对象的语法格式如下: $soap = new SoapClient($wsdl,$array); 其中,参数$wsdl和$array与SoapServer相同。 创建SoapClient对象后,调用服务端页面中的函数相当于调用了SoapClient的方法, 创建语法如下: $soap->user_function($params); 其中,$soap是一个SoapClient对象,user_function是服务器端要调用的函数,$params 是要传入函数的参数。 3、SoapFault SoapFault用于生成soap访问过程中可能出现的错误。创建一个soapFault对象的语法格式 如下: $fault = new SoapFault($faultcode,$faultstring); 其中,$faultcode是用户定义的错误代码,$faultstring是用户自定义的错误信息。soapFault 对象会在服务器端页面出现错误时自动生成,或者通过用户自行创建SoapFault对象时生成。对于 Soap访问时出现的错误,客户端可通过捕捉SoapFalut对象来获得相应的错误信息。 在客户端捕获SoapFault对象后,可以通过下面的代码获得错误代码和错误信息。 $fault->faultcode;//错误代码 $fault->faultstring;//错误信息 其中,$fault是在前面创建的SoapFault对象。 已删除无关的内容。
编辑本段消息格式
SOAP在标准化消息格式环境中,可以做所有它能完成的工作。消息的主体部分 是“text/xml”形式的MIME类型,并且包含一个SOAP封套。该封套是一个XML文 档。封套包含了 报头(可选的)和报文(必须有的)。封套的报文部分总是用于 最终接收的消息,而报头项目可以确定执行中间处理的目标节点。附件、二进制 数字及其他项目可以附加到报文上。 SOAP提供了一种让客户端指定哪个中间处理节点必须处理报头项目的方法。由 于报头与SOAP消息的主体内容是互不相关的,所以可用它们给消息添加信息,而 不会影响对消息报文的处理。 例如,报头可用于为报文中包含的请求提供数字签名。在这种情形下,身份验 证/授权服务器可以处理报头项目独立于报文可以剥离信息以验证签名。 一旦通过验证,封套的其余部分将被传递给SOAP服务器,它将对消息的报文进行 处理。深入研究一下SOAP封套,有助于明了SOAP报头和报文元素的位置和用途。
编辑本段剖析SOAP封套
SOAP 1.1规范提供了下面的封套示例:SOAP-ENV:mustUnderstand="1" 5DEF 在这个例子中,GetLastTradePrice请求被传送给网络上某个位置的一个存储 -引用服务。 该请求带有一个字符型参数,一个订单符号,并在SOAP响应中返回一 个浮点数。SOAP封套是表示SOAP消息的XML文档的顶层元素。XML命名空间用于将SOAP标识 符与应用程序的特定标识符区分开。XML命名空间在SOAP中使用很频繁,以把消息 的元素的作用域限制在一个特定的领域。理解SOAP命名空间有助于熟悉XML命名空 间规范。如果您没有理解命名空间,也可以简单地把它看作一种邻近的标识符, 它通过把SOAP元素与特定的位置(真实的或想象的)相关联,从而有助于惟一地 标识SOAP元素。 命名空间 上面例子中的第一个命名空间参照了在SOAP消息中定义元素和属性的SOAP模式。 第二个命名空间参照了SOAP编码,即前文中讨论过的“Section 5”数据类型。 由于没有指定额外的通用元素编码,这种编码将适用于整篇文档。 报头 在SOAP封套报头示例中标识的第一个元素是一个transaction(交易)元素,它 带有一个命名空间属性和一个值为1的mustUnderstand属性。既然mustUnderstand的属性值设为1 ,接受该消息的服务器必须在该transaction节点上执行中间处理。您可以对此 作这样的解释:服务器与客户端事先已就管理该报头元素处理的语义达成了一 致,因而服务器确切地知道要处理的元素的内容,本例中元素的内容是“5”。 如果接收消息的服务器不理解transaction报头的语义,它就会拒绝请求并抛出 一个错误。错误元素是SOAP报文和定义良好的机制的一个特殊部分,用于把错误信 息送回给客户端。 像这样的中间处理节点是SOAP可扩展性的一个例子。客户端在SOAP消息中包含 这样的节点,以在可以处理消息的报文内容前,指示要发生的特殊的处理需要。 要保证向后兼容不能提供这种处理的现有的服务器,只需把mustUnderstand 属性设置为0,它使操作是可选的。除了定义像上例中所示的transaction节点外,SOAP消息还可包含报头项目, 它们用于指定节点执行身份验证处理、加密、状态的永久性、业务逻辑处理等。 报头有助于把SOAP构建成一种可扩展的模态包模型。只需记住报头处理是完全独 立于SOAP消息的报文的。 报文 上面例子中的SOAP报文包含一个XML载荷,我们可以推测RPC没有为我们对其作 详细解释。SOAP不仅是一种模态包模型,它还是一种相当神秘的包模型。没有什么迹象清楚地显示RPC将要开始做什么。我们在报文中所看到的是几个 XML元素,其中一个用命名空间进行了限制。它取决于SOAP服务器理解文档语义并 执行正确的处理。事实上,服务器提供了一种架构,以有意义的方式处理XML载 荷。这里的“有意义”意味着服务器在某些后台数据库上调用远程过程,以为消 息报文中包含的股票-符号元素接收股票价格。所有这些魔术般的操作都是在SOAP RPC幕后发生的。
编辑本段SOAP-RPC
SOAP消息本质上是一种从发送方到接收方的单向传输,但是SOAP经常组合到实 现请求/响应机制中。要让RPC使用SOAP,必须遵循几条规则。首先,请求和响应 消息必须被编码成结构类型。对一个操作的每一个输入参数,都必须有一个同名 元素(或输入结构的成员)作为参数。对每一个输出参数,都必须有一个名称匹 配的元素(或输出结构的成员)。 基于RPC的观点,会省略一些更早一点显示的SOAP消息。只带有报文部分的 SOAP请求与响应封套如下所示: 请求 DEF响应 22.50请求要调用GetLastTradePrice方法。注意响应定义了 GetLastTradePriceResponse操作。对附加响应到响应操作尾部的 一个常用的SOAP调用规则是:创建响应结构。这种输出结构包含一个名称为 price的元素,它返回方法调用的结果,假定为浮点型。 在SOAP封套中没有什么地方的数据类型是显式声明的,注意到这一点很重要, 这样如果只查看SOAP消息,就不会知道符号类型或结果参数price(价格)的类 型。客户端应用程序一般通过“Section 5”编码定义数据类型,或通过与服务器 私下达成的协议来定义数据类型。在任何一种情况下,这些包含在SOAP消息中的 定义都不是显式的。 最后,为了进行RPC,需要一种低级协议如HTTP。尽管SOAP 1.0规范强制要求 使用HTTP作为传输协议,但SOAP 1.1规范(及其姊妹规范“带有附件的SOAP消息” )允许使用FTP、SMTP、甚至(可能)原始的TCP/IP套接字。所有这些对SOAP通用 的序列化和编码规则,也适用于RPC参数。
编辑本段SOAP用例
Internet上某些地方的客户端应用程序使用Web服务。 Web服务(通过SOAP)显示对象方法。 对象方法访问Web上任意位置的远程数据。 对这些网络命题应用传递逻辑,我们可以为Web服务和SOAP下一个总的结论: 某些位置的客户端可以使Web上任意位置的数据。这就是所要证明的。 下面是更加详细一点的用例。 SOAP客户端使用UDDI注册来查找Web服务。不用直接操作WSDL,大多数情况下SOAP应用程序将硬连接到使用特定类型的端口和特定样式的绑定,并且它将 通过UDDI动态配置要调用的、与发现的Web服务匹配的服务地址。 客户端应用程序创建SOAP消息,它是一个可执行想要的请求/响应操作的 XML文档。 客户端把SOAP消息传送给监听SOAP请求的Web服务器上的JSP或ASP页面。 SOAP服务器解析SOAP包并在其领域调用合适的对象方法,在SOAP文档中包 含的参数中传递。在SOAP服务器接收消息之前,中间处理节点可以执行SOAP报 头指示的特殊功能,可视情况确定是否执行这步操作。 请求对象执行指示的功能,并返回数据给SOAP服务器,它把响应打包到 SOAP封套中。服务器把SOAP封套包裹在要发送回请求机器的响应对象中,如 servlet或COM对象。 客户端接收对象,剥离出SOAP封套并把响应文档发送给最初发出请求的程 序,完成请求/响应循环。
编辑本段小结
SOAP是一种基于XML的协议,它用于在分布式环境中发送消息,并执行远程过 程调用。使用SOAP,不用考虑任何特定的传输协议(尽管通常选用HTTP协议), 就能使数据序列化。用SOAP来构建平台与语言中性的互操作系统是一个好的选择。总之,SOAP和 Web服务已为在XML上构建分布式应用程序基础结构所需的一切都考虑好了。通过解决COM和Java组件对象模型之间的冲突,SOAP把多个平台在访问数据时所出现的 不兼容性问题减至最少。先把这些讨论放在一边,SOAP是一种适用于所有类型的对象实体的理想的媒介 即使对于像Brad Pitt和Edward Norton之类的好莱坞电影角色也可用作 一种通信媒介。就像在电影中一样,期待着这种新技术带来震撼世界的效果。
5. microsoft soap toolkit2.0 怎么设置 targetnamespace
与任何分布式协议相同,成功的 SOAP 应用程序的关键在于获得安全性权限。SOAP 标准不指定任何安全性机制,而是将安全处理委派给传输层。对 SOAP Toolkit 2.0 而言,传输层是 HTTP。在 HTTP 上运行的 SOAP 基本上是一个 Web 应用程序,与其它在 IIS 上运行的 ASP 或 ISAPI 应用程序很相似。SOAP 的身份验证、授权和加密机制与您通常使用的 Web 应用程序完全相同。如果熟悉 Web 安全性,也就了解了 SOAP 安全性。如果对 Web 应用程序不够熟悉,本文将为您提供充分的入门知识背景。每个主题都介绍的非常详细。如果需要更详细的信息,请参见 MSDN Library 或由 Michael Howard、Marc Levy 和 Richard Waymire 编着的《设计 Microsoft Windows 2000 基于 Web 的安全应用程序》。
重要规则
根据《设计 Microsoft Windows 2000 基于 Web 的安全应用程序》中阐述的观点,我们首先从概述建立安全 Web 服务应遵守的重要规则开始。安全 Web 服务可归纳为以下七类:
身份验证
授权
审核
保密
完整性
可用性
认可
身份验证是一个实体(也称为主题)验证另一个实体是否符合它所声称的身份的过程。SOAP Toolkit 2.0 支持以下身份验证方法:
基本
摘要式
Kerberos
Windows NTLM
SSL 客户端证书
基于 SOAP 头的身份验证
代理身份验证
本文档介绍如何配置服务器端和客户端使用上述身份验证方法。
授权是为经过身份验证的用户提供资源访问权限的机制。只要使用 SOAP Toolkit 建立的 Web 服务基于 IIS,这些服务就可以利用 IIS 支持的授权机制。本文档也将讲述用户应注意的一些问题。
审核的目的是为了收集有关对 Web 服务的成功和失败请求的信息。可以使用 IIS 审核功能和 SOAP Toolkit 跟踪功能实现这一目的。本文档没有介绍这方面的内容,您可以参考 IIS 文档、netmon 日志和 SoapServer 对象的 SOAP Toolkit 帮助。
保密是指确保攻击者看不到客户端与服务器之间的通信信息。完整性是指保护数据不被删除或更改(不管是恶意还是不慎)的能力。为了实现保密和完整性,SOAP Toolkit 允许使用安全套接字层 (SSL) 加密数据。本文档将介绍如何启用 IIS 上的 SSL 支持以及如何将其用于客户端。
可用性确保不会拒绝合法用户对请求的资源的访问。可用性技术的示例包括负载平衡以及硬件和软件的故障转移。SOAP Toolkit 已成功通过了 Microsoft Application Center 负载平衡软件的测试。
认可是一种技术,为发生的操作提供证据以防止客户端在事务处理中欺诈或否认。SOAP Toolkit 采用 IIS 提供的认可功能。本文档不对认可进行介绍。
身份验证
本节介绍了 SOAP Toolkit 支持的身份验证方法,包括其优点和缺点,以及如何对其进行设置。还介绍了 SOAP Toolkit 在支持平台上的已知局限性,以及服务器具有多个可用身份验证方案时 SOAP Toolkit HTTP 连接器的行为。
身份验证握手是如何进行的?每个身份验证握手都是如下开始:
客户端发出页面请求。
服务器返回状态 401“拒绝访问”和一组 HTTP 头。
WWW 验证它支持的每一个身份验证方法。
如何使用 SoapClient 验证自身?如果 Web 服务要求身份验证(基本、摘要式、NTLM 或 Kerberos),需要为 SoapClient 提供用户名和密码,以将其传递到 Web 服务。也可以使用 SoapClient.ConnectorProperty 包完成此操作:
dim SoapClient
set SoapClient = createobject("MSSoap.SoapClient")
SoapClient.mssoapinit("http://your-server/webservice/service.wsdl ")
SoapClient.ConnectorProperty("AuthName") = "username"
SoapClient.ConnectorProperty("AuthPassword") = "userpwd"
Quote = SoapClient.GetQuote()
注意:使用 SOAP Toolkit 2.0 时,只有在调用远程方法时才必须设置 SoapClient 上的 ConnectorProperties。
如果包含服务描述的 wsdl 文件所在的虚拟目录也要求身份验证,可以在 URL 内传递用户名和密码:
SoapClient.mssoapinit
("http:// username:userpwd@your-server/webservice/service.wsdl ")
人们往往错误地认为将用户名和密码放入 URL 是不安全的。事实并非如此。在发送 HTTP 请求之前,客户端 HTTP 代码将分析 URL,移出用户名和密码,并在身份验证握手时使用此用户名和密码。事实上,代码:
SoapClient.ConnectorProperty("AuthName") = "username"
SoapClient.ConnectorProperty("AuthPassword") = "userpwd"
Quote = SoapClient.GetQuote()
与下列代码的功能相同(假设 WSDL 文件 service.wsdl 指向自身):
SoapClient.ConnectorProperty("EndPointURL")=
"http:// username:userpwd@your-server/webservice/service.wsdl"
Quote = SoapClient.GetQuote()
虚拟目录设置如何要求身份验证?若要在服务器上更改特定虚拟目录的身份验证设置,请执行下列操作:
在 IIS 4.0 和 IIS 5.0 上,用鼠标右键单击虚拟目录,单击“属性”,然后单击“目录安全性”选项卡。
在“匿名访问和身份验证控制”之下,单击“编辑”。将出现以下两个选项:
匿名访问
匿名访问不是身份验证方法。Windows 2000 和 NT4 要求用户在访问任何资源之前验证自身,这种情况下,IIS 使用一个特殊帐户作为匿名 Web 用户(默认为 IUSR_machinename)。可以单击“匿名访问编辑”按钮更改此默认匿名 Web 用户的帐户或其密码。
注意:小心不要将特权帐户用作匿名 Web 用户帐户。若要将虚拟目录设置为要求身份验证,需要清除“匿名访问”标记。
基本身份验证
若要将虚拟目录设置为要求基本身份验证,需要:
转至“属性”/“目录安全性”/“编辑匿名访问验证控制”菜单。
取消选中“匿名访问”。
启用“基本身份验证”。将显示一条警告消息。如果要继续使用基本身份验证,请单击“确定”。
单击“基本身份验证编辑”按钮。输入域名。如果要使用默认域名,请输入“\”(不加引号)。
缺点:基本身份验证是非常不安全的。用户名和密码以不加密的 Base64 编码形式通过线路传输。问题不仅在于攻击者能访问基本身份验证保护的资源,他们还能够获取您的用户名和密码的实际值,并用来访问其它更安全的资源。使用 SSL 连接会更安全一些,因为 SSL 握手在身份验证握手之前发生。这样,可以通过安全连接传送用户名和密码。
优点:基本身份验证是 HTTP 1.0 协议的一部分,是得到最广泛支持的身份验证方案。
结论:基本身份验仅当与 SSL 功能共同使用时才是一个好的解决方案。如果希望您的服务具有安全性和高互操作性,请使用本方法。
摘要式身份验证
这是一个相对较新的方法,是 HTTP1.1 协议的一部分,但没有被 Web 服务器广泛采用。对于 Windows,它只在出现 Windows 2000 之后才被采用。若要在 IIS 5.0 上设置摘要式身份验证,请执行下列步骤:
转至“属性”/“目录安全性”/“编辑匿名访问”和“身份验证控制”菜单。
取消选中“匿名访问”。
启用“摘要式身份验证”。将显示一条警告消息。如果要继续使用摘要式身份验证,请单击“确定”。
使用摘要式身份验证具有以下要求:
运行 Windows 2000 Server 的系统位于 Active Directory 域。
在域控制器上安装 iissuba.dll 文件。该 DLL 在匿名访问和摘要式身份验证期间发挥作用。
在 Active Directory 设置中使用摘要式身份验证的所有帐户的日志记录都启用“使用可逆加密存储密码”选项。这是对 Active Directory 中帐户密码的纯文本副本进行摘要式身份验证访问时所必需的。这样,可确保存储这些密码的服务器是非常安全的。
缺点:如果摘要式身份验证不与 SSL 一起使用,将不能保护资源免于重复攻击。目前尚未在其它 HTTP 客户端和服务器中被广泛采用。在 IIS 5.0 上的实现具有局限性,如果通过摘要式身份验证登录到服务器,标识将无法委派到其它服务器。这就将服务器限制为服务器方案。
优点:摘要式身份验证简单,可能会越来越普及。它比基本身份验证更安全,因为尽管仍可能遭到重复攻击,但攻击者无法获得访问其它资源所要求的用户名和密码的实际值。
结论:摘要式身份验证可以用于保护通过 Web 服务公开到 Internet 的低价值资源。在 SSL 上使用基本身份验证可以获得更好的性能,因为 SSL 速度慢,但不会象基本身份验证那样将用户名和密码暴露给攻击者。
6. 如何开发 soap 访问 部署在aws上的 https服务
现在把完整代码贴上
-(NSString *) getSOAPXMLString:(NSString *) functionName
Parameter :(NSMutableDictionary * )parameterArray{
NSString * strParameter=@"";
if (parameterArray!=nil) {
NSArray *keys = [parameterArray allKeys];
for (NSString *key in keys) {
//[CommonFunction log:@"%@ is %@",key, [parameterArray objectForKey:key]];
NSLog(@"%@ is %@",key, [parameterArray objectForKey:key]);
strParameter=[strParameter
stringByAppendingFormat:@"<%@>%@</%@>\n",key,[parameterArray
objectForKey:key],key];
}
}
NSString * strBody=@"";
if ([strParameter isEqualToString:@""]) {
strBody=[NSString stringWithFormat:@"<%@ xmlns=\"%@\"/>\n",functionName,xmlns];
}
else {
strBody=[NSString stringWithFormat:@"<%@ xmlns=\"%@\">\n"
"%@"
"</%@>>\n",functionName,xmlns,strParameter,functionName];
}
NSString *soapMessage =[NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
"<soap:Envelope
xmlns:xsi=\"\"
xmlns:xsd=\"\"
xmlns:soap=\"\">\n"
"<soap:Body>\n"
"%@"
"</soap:Body>\n"
"</soap:Envelope>\n",strBody];
return soapMessage;
}
-(void) getWebServiceFunctionResult:(NSString *) functionName
Parameter :(NSMutableDictionary * )parameterArray
{
webserviceFunctionName=functionName;
self.webserviceFunctionResultName=[functionName stringByAppendingString:@"Result"];
NSString * soapMessage=[self getSOAPXMLString:functionName Parameter:parameterArray];
NSURL *url = [NSURL URLWithString:[webserviceBaseURL stringByAppendingString:@"servicemain.asmx"]];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]];
[theRequest addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
NSString * strFunctionURL=[webserviceBaseURL stringByAppendingString:@"servicemain.asmx"];
//stringByAppendingFormat:@"/",functionName];
NSLog(@"strFunctionURL %@",strFunctionURL);
[theRequest addValue:strFunctionURL forHTTPHeaderField:@"SOAPAction"];
[theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];
[theRequest setHTTPMethod:@"POST"];
[theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
theConnection_ = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self] ;
if( theConnection_ )
{
webData = [[NSMutableData data] retain];
}
else
{
NSLog(@"theConnection is NULL");
}
}
#pragma mark -
#pragma mark NSURLConnection delegate
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSHTTPURLResponse *HTTPresponse = (NSHTTPURLResponse *)response;
NSInteger statusCode = [HTTPresponse statusCode];
if ( 404 == statusCode || 500 == statusCode ) {
if (delegate) {
[delegate webServiceResultParseComplete:NO webServiceResultString:@""];
}
[connection cancel];
//[connection release];
//[webData release];
} else {
[webData setLength: 0];
NSLog(@"connection: didReceiveResponse:1");
}
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[webData appendData:data];
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
@try {
NSLog(@"ERROR with theConenction");
//if (delegate) {
// [delegate webServiceResultParseComplete:NO webServiceResultString:@""];
// }
[connection release];
[webData release];
}
@catch (NSException * e) {
if (self) {
[self release];
}
}
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSString
*theXML = [[NSString alloc] initWithBytes: [webData mutableBytes]
length:[webData length] encoding:NSUTF8StringEncoding];
//NSLog(theXML);
[theXML release];
if( xmlParser )
{
[xmlParser release];
}
xmlParser = [[NSXMLParser alloc] initWithData: webData];
[xmlParser setDelegate: self];
[xmlParser : YES];
[xmlParser parse];
[connection release];
//[webData release];
}
-(BOOL)connection:(NSURLConnection *)connection :(NSURLProtectionSpace *)protectionSpace
{
NSLog(@"protectionSpace.authenticationMethod %@",protectionSpace.authenticationMethod);
NSLog(@" %@",);
return [protectionSpace.authenticationMethod isEqualToString:];
}
-(void)connection:(NSURLConnection *)connection :(NSURLAuthenticationChallenge *)challenge
{
if ([challenge.protectionSpace.authenticationMethod isEqualToString:])
// if ([trustedHosts containsObject:challenge.protectionSpace.host])
[challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]
forAuthenticationChallenge:challenge];
[challenge.sender :challenge];
}
7. 求大神分享一份 soapui v5.2.1破解版安装包
建议不要使用破解版软件,因为破解版软件被破解者强行修改了软件流程,导致软件很容易出错,造成系统的不稳定和数据的丢失。另外,很多破解版软件中还携带的有病毒和木马,在使用破解版软件的同时带来其他更大的损失。
我之前有使用过一款破解版的U盘加密软件 U盘超级加密3000,结果我的数据就丢了,唉!再也不会使用破解版的软件了。
8. 怎么给WebService加上安全机制
简单一些继承SoapHeader加入账号密码之类的,然后使用ssl加密通讯过程也差不多了。
也可以使用客户端服务端约定使用一个加密key,然后加密webserver的某些或是全部调用参数,别人能看到webserver函数定义,但是不知道加密方式也就没办法了,当然最好把当前时间也加密到参数中防止重发攻击。也可以改进一下,借鉴ssl通讯过程,客户端生成临时加密key,然后使用公钥加密发给服务端,服务端使用私钥进行解密,然后双方使用临时加密key加密通讯参数。
当然你的客户端程序要混淆一下,或是核心加密过程使用非托管代码来写。
9. python 有没有php里面的soapclient这样的东西
SOAP.py 客户机和服务器
SOAP.py 包含的是一些基本的东西。没有 Web 服务描述语言(Web Services Description Language,WSDL)或者任何其它附加的东西,只有用 Python 实现的 SOAP 客户机和服务器的透明支持。甚至这个包中的一个很好的功能也只是与基础架构相关:SOAP.py 支持安全套接字层(SSL)用于加密的 SOAP 传输。为使用这个功能,您必须安装 M2Crypto,M2Crypto 是一个库,包含各种加密工具和格式,从 RSA 和 DSA 到 HTTPs、S/MIME 等等。在这一部分,我们不准备讨论 SOAP.py 的 SSL 支持。
SOAP 操作摘要
目前为止,SOAP 实用程序好象仍是比较流行的使用 Python 的开放源代码活动。下面是该项目的纲要以及它们目前的状态。首先,参与者:
4Suite SOAP,由 Fourthought 管理
SOAPy,由 Adam Elman 管理
SOAP.py,Python 项目的一个 Web 服务项目
soaplib,由 Secret Labs 管理
Orchard,由 Ken MacLeod 管理
PySOAP,由 Dave Warner 管理
4Suite SOAP 是我们自己的实现,我们在本专栏的前面三部分中使用过(请参阅 参考资料以获得它的链接)。它目前仍在开发中。
SOAPy 是在 2001 年 4 月公布的,目前处于 alpha 的预备阶段,但现在好象停止开发了。
SOAP.py 开发被冻结了。SOAP.py 这个项目是由 actzero 公司赞助的,而 actzero 却不再从事这一行业了。正在邀请自愿开发/维护 SOAP.py 的组织。
soaplib 的开发好象也延缓了,考虑到 Secret Labs 这段时间所承担的大量工作,或许就可以理解为什么会这样了。这个瑞典的公司是由 Fredrik Lundh 掌管的,他在 Python 圈内是出名的“工作狂”,同时也是 Python Association 董事会的一名成员。Secret Labs 还开发 PythonWare(Python 的一个核心和重要的附加模块);PythonWorks(一个领先的 Python IDE);Python Imaging Library 和许多其它好东西(日常 Python-URL Web 日志就是其中的一部分)。
Orchard 是一个数据管理框架,基本上是一种用一个公共接口管理不同数据格式的方法。它实现了一个 SOAP 客户机作为在远程过程调用中向 SOAP 服务器发送 Orchard 数据项的基本方法(被称为节点)。
PySOAP 这个项目主要是想作为 Dave Warner 的 Church 管理套件的一部分,但它还从没发行过任何文件,好象是一个毫无生气的项目。
安装
开始先下载分发包(在写这篇文章的时候,SOAPpy 0.9.7 是最新的分发包),把文件解包,转到结果目录,并把文件 SOAP.py复制到自己倾向的位置。当然,这个“倾向”就是需要技巧的地方。由于这些 SOAP lib 中有很多都使用大小写组合不同的“soap.py”作为模块名,所以大家一定要小心。当然,UNIX 用户只需关心大小写是否精确匹配,但对于 Windows 用户来说,甚至“SOAP.py”和“soap.py”之间的冲突也会带来麻烦。Orchard 的 SOAP.py 也有一个容易发生冲突的名称,但它有可能避开所有的问题,因为它的模块聪明地放在了 Orchard 包中。
上面的内容简言之就是建议您确保安装所有的 Python SOAP 模块时都使用与众不同的包名称。在我们的案例中,我们在 PYTHONPATH 中发现了一个合适的目录并创建了一个 WebServices 包,把 SOAP.py 放在了这个包中。因此,在 Linux 中:
$ mkdir ~/lib/python/WebServices
$ touch ~/lib/python/WebServices/__init__.py
$ cp SOAPpy097/SOAP.py ~/lib/python/WebServices
请注意很重要的第二条命令,它将生成一个 __init__.py 文件,这个文件将 WebServices 目录标志为 Python 包。如果您需要把这些代码打包成 Windows 版本,您可能希望向空文件中输入一些注释,因为一些 Windows 工具不创建空文件。
您已深入主题了
对于公开提供的 SOAP 服务器,早已经有了好几个活动的注册中心。最流行的可能是 XMethods。当然,它也是一个相当有趣的指导,通过它我们可以了解 SOAP 的实际状况,而不要听它的吹嘘。这里的大多数公共 Web 服务仍然只是一些无关紧要的东西,几乎不值得我们勇敢的新模型多费口舌,但那是另一回事了。实际上,我们将选择一个公共服务来演示和测试如何把 SOAP.py 作为 SOAP 客户机使用。
或者,我们可以试试。作者尝试的第一个服务,卫生保健提供者定位器,在遇到下列报错消息时显示 SOAP 互操作性的当前状态中的陷阱:
WebServices.SOAP.faultType: <Fault soap:Client:
Server did not recognize the value of
HTTP Header SOAPAction: "".>
哦。SOAPAction 是一个 HTTP 头,应该是用来标记被访问服务的。它是 SOAP 请求中必需的头,但即便是设置了所需的头(只是一对空的双引号)后,上面的错误仍然存在。作者发现大多数 MS SOAP 实现都存在这个问题。在试遍了这些服务后,我们断定,Delphi 实现好象与 SOAP.py 合作得最好,但在试服务时 — 即使是用 Delphi 实现时,也返回复杂的类型,比如列表,SOAP.py 无法使用它们,返回不带数据的 WebServices.SOAP.typedArrayType 实例。
最后,作者选择了一个相当合适的 Web 服务,该服务返回漫画《丁丁历险记》中的人物 Haddock 船长常用的骂人语言(是的,大多数 Web 服务都是这样)。 清单 1(curse.py)就是这个程序。
清单 1:访问 Curse 生成器 SOAP 服务的 SOAP.py 程序
#!/usr/bin/env python
import sys
#Import the SOAP.py machinery
from WebServices import SOAP
remote = SOAP.SOAPProxy(
"ck.exe/soap/IHaddock",
namespace="urn:HaddockIntf-IHaddock",
soapaction="urn:HaddockIntf-IHaddock#Curse"
)
try:
lang = sys.argv[1]
except IndexError:
lang = "us"
result = remote.Curse(LangCode=lang)
print "What captain Haddock had to say: "%s""%result
把一切综合在一起
导入库后,我们将设置代理对象 remote 。这个对象将方法调用转换为远程 SOAP 消息。它的初始化器使用管理远程请求的关键参数: 服务器的 URI(被称为“端点”)、请求元素的 XML 名称空间(通过它,SOAP-as-RPC 将 口头承诺变成 XML 基础)和 SOAPAction 头值。
接下来,我们将确定方法参数,对于这个 Web 服务来说,方法参数只是 Haddock 骂人的语言,瑞典语(“se”)或英语(奇怪的是,是“us”而不是“en”)。
最后,我们调用名称正确的方法,代理对象的 Curse 进行 SOAP 调用,然后打印出结果。下面的会话演示了对该程序的使用:
$ python curse.py
What captain Haddock had to say: "Ectoplasmic Byproct!"
我们自己的 SOAP 服务器
用 SOAP.py 实现 SOAP 服务器相当容易。作为一个示例,我们将仿建字段,还要实现一个很常见的服务:一个程序,给出年份和月份,它将以字符串的形式打印出日历。它的程序服务器是 清单 2(calendar-ws.py)。
清单 2:实现日历服务器的 SOAP.py 程序
#!/usr/bin/env python
import sys, calendar
#Import the SOAP.py machinery
from WebServices import SOAP
CAL_NS = "/simple-cal"
class Calendar:
def getMonth(self, year, month):
return calendar.month(year, month)
def getYear(self, year):
return calendar.calendar(year)
server = SOAP.SOAPServer(("localhost", 8888))
cal = Calendar()
server.registerObject(cal, CAL_NS)
print "Starting server..."
server.serve_forever()
进行过必要的导入后,我们为自己的服务器定义 SOAP 请求元素期望的名称空间( CAL_NS )。接下来我们定义实现所有方法的类,这些方法将被公开为 SOAP 方法。大家也可以把单个函数作为 SOAP 方法注册,但使用类方法是最灵活的,特别是当您想管理调用间的状态时。这个 Calendar 类定义了一个方法 getMonth ,该方法使用 Python 的内置日历模块在文本表单中返回月度日历,同时它还定义了另一个返回整年日历的方法。
然后创建 SOAP 服务器框架的一个实例,这个实例还带有侦听端口 8888 的指令。我们还必须创建 Calendar 类的一个实例,这个实例在下一行中被注册用来处理 SOAP 消息,同时为其指出相关的名称空间。最后,我们调用 serve_forever 方法,该方法直到进程终止才返回。
为运行服务器,请打开另一个命令 shell 并执行 python calendar-ws.py 。执行结束时使用 ctrl-C 杀死进程。
我们本来可以用也是用 SOAP.py 写的客户机测试服务器,但那太显而易见了。我们还是用低级 Python 编写客户机把 SOAP 响应作为 XML 字符串来构建,并发送一条 HTTP 消息。这个程序(testcal.py)在 清单 3中。
清单 3:用 Python 核心库写的访问日历服务的客户机
import sys, httplib
SERVER_ADDR = "127.0.0.1"
SERVER_PORT = 8888
CAL_NS = "ple-cal"
BODY_TEMPLATE = """<SOAP-ENV:Envelope
xmlns:SOAP-ENV="oap/envelope/"
xmlns:s="/ws/simple-cal"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/1999/XMLSchema"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>
<SOAP-ENV:Body>
<s:getMonth>
<year xsi:type="xsd:integer">%s</year>
<month xsi:type="xsd:integer">%s</month>
</s:getMonth>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>"""
def GetMonth():
year = 2001
month = 12
body = BODY_TEMPLATE%(year, month)
blen = len(body)
requestor = httplib.HTTP(SERVER_ADDR, SERVER_PORT)
requestor.putrequest("POST", "cal-server")
requestor.putheader("Host", SERVER_ADDR)
requestor.putheader("Content-Type", "text/plain; charset="utf-8"")
requestor.putheader("Content reply_body = requestor.getfi-Length", str(blen))
requestor.putheader("SOAPAction", "het/eg/ws/simple-car")
requestor.endheaders()
requestor.send(body)
(status_code, message, reply_headers) = requestor.getreply()
le().read()
print "status code:", status_code
print "status message:", message
print "HTTP reply body:\n", reply_body
if __name__ == "__main__":
GetMonth()
下面的会话演示了这个测试的运行情况。
$ python testcal.py
status code: 200
status message: OK
HTTP reply body:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsd="http://www.w3.org/1999/XMLSchema" xmlns:SOAP-
ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:SO
AP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<getMonthResponse SOAP-ENC:root="1">
<Result xsi:type="xsd:string"> December 2001
Mo Tu We Th Fr Sa Su
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
</Result>
</getMonthResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
仔细审查的字节
如果您查找行 self.debug = 0 并把“0”改为“1”(这是 SOAP.py 版本 0.9.7 中的第 210 行),有一件要注意的事情是您可以获得被交换的实际 SOAP 消息的详细信息和用于调试与跟踪的其它关键数据,这对您很有用。作为示例,下面提供了一个会话,它是打开了调试信息显示开关的以前的 curses.py 程序的一个会话:
$ python curse.py
*** Outgoing HTTP headers **********************************************
POST /scripts/Haddock.exe/soap/IHaddock HTTP/1.0
Host: www.tankebolaget.se
User-agent: SOAP.py 0.9.7 (actzero.com)
Content-type: text/xml; charset="UTF-8"
Content-length: 523
SOAPAction: "urn:HaddockIntf-IHaddock#Curse"
************************************************************************
*** Outgoing SOAP ******************************************************
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsd="http://www.w3.org/1999/XMLSchema" xmlns:SOAP-
ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:SO
AP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:Curse xmlns:ns1="urn:HaddockIntf-IHaddock" SOAP-ENC:root="1">
<LangCode xsi:type="xsd:string">us</LangCode>
</ns1:Curse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
************************************************************************
*** Incoming HTTP headers **********************************************
HTTP/1.? 200 OK
Server: Microsoft-IIS/5.0
Date: Tue, 11 Sep 2001 16:40:19 GMT
Content-Type: text/xml
Content-Length: 528
Content:
************************************************************************
*** Incoming SOAP ******************************************************
<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-
ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/1999/XMLSchema"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xml
soap.org/soap/encoding/"><SOAP-ENV:Body><NS1:CurseResponse xmlns:NS1="urn:HaddockIntf-
IHaddock" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><NS1:return
xsi:type="xsd:string">Anacoluthons!</NS1:return></NS1:CurseRespon
se></SOAP-ENV:Body></SOAP-ENV:Envelope>
************************************************************************
What captain Haddock had to say: "Anacoluthons!"
为进行比较,您可以在带有下列代码的旧的 Python 脚本或程序中获得相同的信息:
import calendar
return calendar.month(2001, 10)
SOAP.py 总结
我们已经注意到了,虽然 SOAP.py 的互操作性还存在一些问题,但可用的调试工具可望提供帮助。