Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web services 我们是否需要web服务响应的安全签名?_Web Services_Security_Rest_Digital Signature - Fatal编程技术网

Web services 我们是否需要web服务响应的安全签名?

Web services 我们是否需要web服务响应的安全签名?,web-services,security,rest,digital-signature,Web Services,Security,Rest,Digital Signature,我已经创建了一个web服务API,它的体系结构是这样的:服务器需要一个客户端对请求进行签名,并为其分配一个密钥(多个请求之间的签名总是不同的) 服务器将客户端的签名与其自己的计算签名相匹配。如果它们匹配,则服务器返回响应 我想知道客户机是否应该检查从服务器返回的响应,以查看它是否来自发出请求的同一应用程序 HTTP请求和HTTP响应之间是否可能存在任何类型的攻击?使请求转移以确保响应的有效性 这将确保您的数据不易受到攻击。滚动您自己未经测试的加密/散列方法是打开应用程序进行攻击的可靠方法,因此您

我已经创建了一个web服务API,它的体系结构是这样的:服务器需要一个客户端对请求进行签名,并为其分配一个密钥(多个请求之间的签名总是不同的)

服务器将客户端的签名与其自己的计算签名相匹配。如果它们匹配,则服务器返回响应

我想知道客户机是否应该检查从服务器返回的响应,以查看它是否来自发出请求的同一应用程序

HTTP请求和HTTP响应之间是否可能存在任何类型的攻击?

使请求转移以确保响应的有效性

这将确保您的数据不易受到攻击。滚动您自己未经测试的加密/散列方法是打开应用程序进行攻击的可靠方法,因此您应该使用TLS/SSL,这意味着您应该通过HTTPS连接到web服务API。是一种经验证且安全的方法,可确保响应来自向其发出请求的应用程序。

通过请求确保响应的有效性

这将确保您的数据不易受到攻击。滚动您自己未经测试的加密/散列方法是打开应用程序进行攻击的可靠方法,因此您应该使用TLS/SSL,这意味着您应该通过HTTPS连接到web服务API。是一种经验证且安全的方法,可确保响应来自向其发出请求的应用程序

我们是否需要web服务响应的安全签名

视情况而定。有几种类型的web服务API。有些需要严格的安全措施,有些可能不需要。您可以有几种类型的API:

(1)完全打开API。假设您有一个博客,在其中发布关于编写RESTful服务和客户端的内容。你根据你的一篇文章主持了一个完整的工作休息服务,这样人们就可以对它进行旋转。你不在乎谁调用你的服务,服务返回一些虚拟数据等。它只是一个演示,一个玩具,这里没有安全性,没有请求签名,nada。这只是普通的HTTP调用

(2)具有API密钥的服务。假设您有一个web服务,您想知道是谁调用它。这种服务需要预先注册,每个想呼叫您的服务的客户都需要先注册并获得密钥。请注意,注册不是关于身份验证或授权,您只想知道谁在使用您的API(例如,他们在哪个业务部门运营,他们有多少客户,他们为什么使用您的API等),以便您稍后对自己进行一些分析并采取一些措施(可能是营销)稍后,根据您获得的数据做出某种决策

这个API密钥没有什么秘密。这只是某种UUID,是区分调用的最基本方式。这同样只涉及以密钥作为附加请求参数的普通HTTP调用

(3)具有API密钥和密钥的服务。这与第(2)项类似,但您需要绝对确保调用来自提供某些API密钥的客户端。你需要这个,因为你可能想向客户收取他们使用你的服务的费用。你要确保电话实际上是从那个客户打来的,而不是那些恶意的人,他们可能想多收客户的账单

因此,客户机使用它的密钥进行标识,并使用带有密钥的请求签名来实际证明它的身份。这同样可以是普通的HTTP调用,并将密钥和签名作为额外的请求参数

(4)数据“篡改安全”web服务。对于上述第(1)、(2)和(3)项,我没有考虑任何消息安全问题,因为大多数API不需要它。交换的东西不是机密,也不需要保护。但有时,尽管数据不是机密数据,但您需要确保数据在传输过程中未被篡改

假设你是一家生产某种产品的商店的老板,你想在一些合作伙伴的网站上宣传你的产品。您使用产品详细信息公开服务,而您的合作伙伴只需使用此数据在其网站上显示您的产品详细信息。每个人都知道你在生产什么产品,所以你不需要隐瞒,但是你对你的竞争对手试图毁掉你心存疑虑,所以你想避免他们截获你的产品 在结果的回复中请求并乘以10的所有价格,只是为了吓跑潜在的买家

上面的数字(3)虽然使用签名部分作为证明调用方身份的方法,但也确保请求未被篡改(如果签名不匹配,服务器将拒绝请求)。因此,如果您需要确保原始响应,您也可以在响应上签名

为此,服务可以向客户端提供一个API密钥和两个密钥。客户机使用一个密钥对其请求进行签名,而客户机使用第二个密钥验证响应的签名(对服务器使用唯一密钥并不完全安全,因此服务器会发出特定于每个客户机的服务器密钥)

但这有一个弱点:你需要相信你的合作伙伴,他们确实会在网站上显示信息之前验证响应签名,而不是直接显示。虽然你是个偏执狂,但你想防范这种情况,为此你需要HTTPS

正如@SilverlightFox提到的,这证明了响应的有效性。由于数据已加密,因此未对其进行处理。客户端不需要额外的步骤来验证响应签名,因为该验证已经在较低的(传输)级别完成

(5)安全服务。现在,我们进入最后一种类型的服务,数据实际上是安全的