java - 客户端和服务器之间的安全连接

标签 java security http encryption man-in-the-middle

我正在开发一个服务器组件,它将为嵌入式客户端的请求提供服务,这也在我的控制之下。

现在一切都是测试版,安全性是这样的:

  1. 客户端通过 https 发送用户名/密码。

  2. 服务器返回访问 token 。

  3. 客户端使用自定义 header 中的访问 token 通过 http 发出进一步请求。

这对于演示来说很好,但在发布之前需要修复一些问题:

  • 任何人都可以复制登录请求,重新发送并获取访问 token 。正如一些用户回答的那样,这不是问题,因为它会发生通过 https。我的错误。

  • 任何人都可以通过检查请求 header 来监听并获取访问 key 。

我可以考虑使用带有时间戳的对称 key 加密,这样我就可以拒绝重复的请求,但我想知道这种情况是否有一些众所周知的良好实践(这似乎很常见)。

非常感谢您的见解。

PS:我使用 Java 作为服务器,客户端使用 C++ 编码,以防万一。

最佳答案

我不明白第一部分,如果登录请求是 https,怎么可能有人复制它?

关于第二部分,这是一个非常标准的 session 劫持场景。请参阅this question 。当然,您在这里没有内置的浏览器选项,但基本思想是相同的 - 要么仅在重要时通过安全连接发送 token ,要么以某种方式将 token 与发送设备相关联。

在浏览器中,基本上您拥有的只是 IP 地址(这不是很好),但在您的情况下,您可能能够表达有关您的设备的特定信息,您可以根据请求进行验证,以确保相同的 token 不存在没有被其他地方使用。

编辑:您可能很幸运,能够排除代理背后的 IP 地址更改,并实际将其用于此目的。

但归根结底,使用来自知名且经过审查的库的 https 比尝试在这里推出自己的库要安全得多。我意识到 https 是一种开销,但是自行推出 https 会带来很大的风险,因为它会遗漏攻击者可以利用的明显内容。

关于java - 客户端和服务器之间的安全连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1888503/

相关文章:

java - 需要敌人管理器在生成敌人之间等待

php - 以编程方式登录 Zimbra

http - 具有无效上下文的已知 HTTP header

http - 当我使用 https 时会发生什么?

java - 如何将 Android Wifi 扫描结果添加到列表中?

java - 如何实现比较器

Java (8) 网络启动 : avoiding security popups

xml - SOAP 请求 - 忽略安全证书

c++ - 对于非管理员用户,localhost 上的 HttpAddUrl 失败

java - Quartz 作业的 Cron 作业语法