gpt4 book ai didi

php - C++ 轻量级 linux web 直通服务器

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:20:57 25 4
gpt4 key购买 nike

我处于一种奇怪的情况,我需要一个移动应用程序以安全的方式与我的网络服务器进行通信,但由于成本和不支持自签名证书这一事实,使用普通 SSL 不是一种选择。我已经尝试实现一个 php 隧道来使用 RSA 加密我的数据,如这里所示 Is a PHP encryption tunnel possible? ,不幸的是,与普通 SSL 相比,此设置的性能非常可笑。

我的其他选择之一是为 PHP 创建 C++ 扩展以尝试加速加密过程,但我仍然不确定它的性能,为 PHP 创建 C++ 扩展的整个过程似乎令人生畏。

我能看到的最后一个选项是将我的网络服务器移动到另一个端口,并有一个面向端口 80 的小型轻量级 C++ 网络服务器解密 HTTP 发布请求,然后将请求转发到本地主机上的普通网络服务器之后它还将加密来自网络服务器的响应。

使我正在考虑的这种内联服务器类型听起来可行吗?我在哪里可以找到任何对我有帮助的信息,例如,我正在努力寻找一个用 C++ 编写的 Linux 小型 Web 服务器示例,我有不知道我应该怎么做才能只加密请求的 POST 内容等。

如果有更简单的解决方案,请提出。

附言。我基本上希望应用程序向例如 http://sub.mysite.com 发出 POST 请求POST 包含参数“request”和“key”。例如,“请求”将是“mypage.php?param=value”,“ key ”将是应用程序的公钥,这两个参数将使用应用程序随附的服务器的公钥进行加密。

PPS。我在 Arch Linux 上使用 Nginx 服务器,如果它有任何不同......

最佳答案

我建议使用广泛使用且经过实战验证的 mcrypt PHP 扩展和 AES 加密:就是这样,请耐心等待,我必须从第一个请求开始。

  • 我假设,您的帐户密码已在您的数据库中加盐和散列:passhash=hash(accountsalt+accountpw)。帐户 salt 和用户名(或 ID)不是 secret 。
  • 当您首先连接到您的 Web 服务时,让服务器返回帐户 salt 和服务器当前的 UTC 时间戳 - 这些都不是 secret ,因此它可以通过简单的 HTTP
  • 在客户端,使用服务器时间戳来计算或验证您的时间偏移并存储它,因此对于 future 的请求,您可以访问与服务器非常接近的客户端 UTC 时间戳。
  • 现在要求您的用户输入密码并在客户端计算passhash=hash(accountsalt+accountpw)
  • 生成一个随机的客户端 session 盐并记住更正后的客户端时间戳。
  • 计算中间值:intermediate=hash(passhash+clientsessionsalt+timestamp)
  • 通过传输客户端 session salt、时间戳和中间值登录到服务器:服务器应检查时间戳以避免重放攻击,然后计算服务器中间值——它必须与客户端中间值匹配。将其存储在您的 session 中。
  • 成功登录后,服务器必须返回服务器端 session 盐(和 session ID)

现在我们一切就绪,可以执行负载请求:我假设负载是一些二进制字符串(例如 JSON)。所以对于所有进一步的请求

  • 记下更正后的客户端时间戳。
  • 在客户端,计算key:key=hash(serversessionsalt+timestamp+intermediate)
  • 使用 key 加密您的负载
  • 传输您的 session ID、时间戳和加密的负载
  • 在服务器端,检查时间戳,然后用它来计算相同的 key
  • 使用此 key 通过 mcrypt 解密负载 - 这应该很快。

一些注意事项:

  • 如果需要,您可以引入请求盐以针对预计算攻击提供额外保护
  • 出于同样的原因,您可以让服务器定期更改 session 盐,但如果您使用异步请求,请小心
  • 时间戳至关重要:对于攻击者来说,他需要接近实时地破解哈希值,这并非微不足道 - 它比最终破解它要难几个数量级
  • 虽然这不会为您提供服务器的身份证明,但它为您提供了保证,即服务器知道传递哈希:假服务器将无法计算 key

关于php - C++ 轻量级 linux web 直通服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21810113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com