我刚读过这篇非常有趣的文章:Principles for Standardized REST Authentication我想知道为什么即使使用SSL也应该签署REST查询。根据我的理解,签署REST查询可以让服务器确保来自可信客户端的请求。
话虽如此,考虑到SSL还能防范中间人攻击,签名真的很有必要吗?
答案 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进行相互认证的对话,因此它一定是被告的荣誉”。