为什么即使使用SSL也要签署REST查询?

时间:2013-10-24 21:12:01

标签: rest ssl digital-signature restful-authentication

我刚读过这篇非常有趣的文章:Principles for Standardized REST Authentication我想知道为什么即使使用SSL也应该签署REST查询。根据我的理解,签署REST查询可以让服务器确保来自可信客户端的请求。

话虽如此,考虑到SSL还能防范中间人攻击,签名真的很有必要吗?

2 个答案:

答案 0 :(得分:1)

正如Wikipedia article for HTTPS所述:

  

[...] HTTPS提供与正在通信的网站和相关网络服务器的身份验证,以防止中间人攻击。另外,它提供客户端和服务器之间的通信的双向加密,这防止窃听和篡改和/或伪造通信内容。实际上,这提供了一个合理的保证,即一个人正在与一个打算与之通信的网站(而不是冒名顶替者)进行通信,并确保用户和网站之间的通信内容无法被读取或伪造任何第三方。 [...]

这就是为什么你需要HTTPS,以便客户“确定”它的请求被发送到正确的目的地。您链接的文章也说明了这一点:

  

如果您没有验证服务器的SSL证书,则不知道谁在接收您的REST查询。

但是,除非您将服务器配置为从客户端请求证书以执行mutual authentication,否则HTTPS通常不会对客户端进行身份验证。如果你阅读了你链接的帖子中的评论,你会看到有人提到这个:

  

如果您要使用https,为什么不完全使用它,并要求提供客户端证书?然后,您将获得完全RESTful身份验证方法,因为客户端和服务器在连接层进行身份验证,并且无需将身份验证纳入URI级别。

但是,使用客户端证书的HTTPS更加昂贵和复杂,因此大多数API提供商保持“正常”的HTTPS来识别服务器并使用更轻的机制来识别客户端:API密钥。 API密钥基本上由公共名称(例如“Johnny”)和私有密钥组成 - 例如一长串随机生成的字符。

当您向服务器发出请求时,您在URL中包含名称“Johnny”,以便服务器知道谁发送了请求。但是服务器不只是盲目地相信你是“Johnny”,你必须通过使用密钥签署请求来证明它,因为它是私有的,只有真正的“Johnny”知道。

答案 1 :(得分:1)

数字签名具有法律含义,例如不可否认性,任何价值交易都应该要求。这不仅仅是身份验证问题。实际交易中的数字签名在法庭上是一个更强大的证据,而不是“通过SSL进行相互认证的对话,因此它一定是被告的荣誉”。