【问题标题】:Rest API encryption with SSL使用 SSL 的 Rest API 加密
【发布时间】:2012-07-11 06:42:12
【问题描述】:

我正在设计一个 REST Api,我们正在尝试决定如何进行加密。我们目前对所有请求/响应使用 https,但是各种日志(dns、浏览器……)将记录纯文本 url。当我们在 URL 中发送敏感数据时,这会引发一个问题,例如“www.mysite.com/user/credit-card-number/”。有没有办法利用 SSL/TLS 公钥/私钥来加密路径参数?例如,“www.mysite.com/user/credit-card-number/”变成了“www.mysite.com/encryptedstring”。

【问题讨论】:

  • 是否需要在网址中包含抄送号码?
  • 我不明白你为什么需要它。但是,如果您希望您的客户端使用公钥(来自服务器证书)进行加密,而服务器使用其私钥对其进行解密,那么here's an example in Python
  • python 示例与我想做的类似。这是否被认为足够安全以用于大型项目?
  • @dpayne:v1 填充可能需要替换为 oaep 填充,这取决于整个使用场景。 Read this,它与 aes 有关,但同样的逻辑适用于 rsa。我同意杰里米的观点。可能可以保护 URL 中的数据,但如果您一开始就避免将敏感信息放在那里,那是不值得的......
  • ... RESTful 设计建议您的客户端代码不应更改,即使您用随机 blob 替换您的 url(尽管它使初始实现更加复杂)。

标签: api rest encryption


【解决方案1】:

我强烈建议您不要在 URL 中放置敏感数据。如果您需要识别某些东西,您至少可以使用随机生成的 String/UUID/token/whatever 映射到正在识别的任何内容。

处理手动加密/解密将取决于您使用的语言/框架。例如,如果您使用的是 Java,那么在 JSSE 上进行一些谷歌搜索,这是 Java 的 SSL/TLS 框架。

如果您正在寻找自动为您进行加密/解密的东西,我认为这也取决于您使用的框架。

【讨论】:

  • 我们不想在 url 中放入敏感数据。我知道可以生成一个令牌并在 url 中使用它,但是这需要客户端和开发人员对每个请求都进行工作。我想要的是在我们当前的 REST API 框架中添加一个加密部分,它将在发送请求之前使用 SSL 密钥加密 url。这样加密对客户/开发人员来说是透明的,因为框架正在处理它。
【解决方案2】:

如果我理解正确,您是在询问 url 是否通过 SSL/TLS 通道加密。正如this SO question 指出的那样,答案是肯定的。通过 TLS,客户端和服务器之间的所有内容都被加密,除了目标服务器的 IP 地址和端口。 (这也包括http headers。)

编辑: 再次阅读后,我发现您有兴趣停止正在记录的 URL。我很确定这样做的唯一方法是更改​​服务器上的 url。帮助不大,但我的建议是不要将抄送号码放在 url 中或使用某种派生密钥。

【讨论】:

  • 我知道 TLS 会加密所有内容,但 DNS 日志和浏览器日志(尤其是 GET 请求)将存储未加密的 url。在同一篇文章的后面,Zach Scrivena 提到许多 DNS 服务器日志都是这样做的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-18
  • 1970-01-01
  • 2018-07-19
  • 2010-09-09
  • 1970-01-01
  • 2018-03-20
相关资源
最近更新 更多