Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php C++;轻量级linux web直通服务器_Php_C++_Linux_Ssl_Encryption - Fatal编程技术网

Php C++;轻量级linux web直通服务器

Php C++;轻量级linux web直通服务器,php,c++,linux,ssl,encryption,Php,C++,Linux,Ssl,Encryption,我遇到了一个奇怪的情况,我需要一个移动应用程序以安全的方式与我的web服务器通信,但由于成本和不支持自签名证书的事实,使用普通SSL不是一个选项。我已经尝试过实现一个php隧道来用RSA加密我的数据,如图所示,不幸的是,与普通SSL相比,这种设置的性能是荒谬的 我的另一个选择是创建一个PHP的C++扩展来尝试和加速加密过程,但是我仍然不确定它的性能,并且为PHP创建一个C++扩展的整个过程看起来令人难以置信的令人畏惧。 最后一个选项是,我可以将Web服务器移动到另一个端口,并有一个面向端口80的

我遇到了一个奇怪的情况,我需要一个移动应用程序以安全的方式与我的web服务器通信,但由于成本和不支持自签名证书的事实,使用普通SSL不是一个选项。我已经尝试过实现一个php隧道来用RSA加密我的数据,如图所示,不幸的是,与普通SSL相比,这种设置的性能是荒谬的

我的另一个选择是创建一个PHP的C++扩展来尝试和加速加密过程,但是我仍然不确定它的性能,并且为PHP创建一个C++扩展的整个过程看起来令人难以置信的令人畏惧。

最后一个选项是,我可以将Web服务器移动到另一个端口,并有一个面向端口80的轻量级C++ Web服务器,解密HTTP POST请求,然后将请求转发到本地主机上的正常Web服务器,在那里,它也将加密来自Web服务器的响应。 <> P> >我想让这个在线服务器类型的东西听起来可行,我在哪里可以找到任何能帮助我的信息,例如我努力寻找一个C++编写的Linux小型Web服务器,我不知道我应该做什么来加密请求的帖子内容等等。 如果有更简单的解决方案,请提及

顺便说一句,我基本上想让应用程序做一个POST请求,例如使用包含参数“request”和“key”的POST。例如,“Request”将是“mypage.php?param=value”,而“key”将是应用程序的公钥,这两个参数都将使用应用程序附带的服务器公钥进行加密


PPS。我正在Arch Linux上使用Nginx服务器,如果有什么不同的话…

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

  • 我假设,您的帐户密码在数据库中进行了加密和哈希处理:
    passhash=hash(accountsalt+accountpw)
    。帐号和用户名(或id)不是秘密
  • 当您首先连接到web服务时,让服务器返回帐户salt和服务器当前的UTC时间戳—所有这些都不是秘密,因此它可以通过简单的HTTP
  • 在客户端,使用服务器时间戳来计算或验证您的时间偏移并将其存储,因此对于将来的请求,您可以访问客户端UTC时间戳,该时间戳非常接近服务器的时间戳
  • 现在要求用户输入密码,并在客户端计算
    passhash=hash(accountsalt+accountpw)
  • 生成一个随机的客户端会话salt并记住正确的客户端时间戳
  • 计算中间值:
    intermediate=hash(passhash+clientsessionsalt+timestamp)
  • 通过传输客户端会话salt、时间戳和中间层登录到服务器:服务器应检查时间戳以避免重播攻击,然后计算服务器中间层-它必须与客户端中间层匹配。将其存储在会话中
  • 成功登录后,服务器必须返回服务器端会话salt(和会话ID)
现在我们已经准备好了所有东西,可以执行有效负载请求:我假设有效负载是一些二进制字符串(例如JSON)。因此,对于所有进一步的请求

  • 请注意已更正的客户端时间戳
  • 在客户端上,计算密钥:
    key=hash(serversessionsalt+timestamp+intermediate)
  • 使用密钥加密有效负载
  • 传输会话ID、时间戳和加密负载
  • 在服务器端,检查时间戳,然后使用它计算相同的密钥
  • 使用此密钥使用
    mcrypt
    解密有效负载-这应该很快
一些注意事项:

  • 如果需要,您可以引入请求salt,以获得针对预计算攻击的额外保护
  • 出于同样的理由,您可以让服务器定期更改会话,但如果使用异步请求,请小心
  • 时间戳是至关重要的:对于攻击者来说,他需要在接近实时的情况下破解散列,这并不是一件小事——破解散列比最终破解散列要困难好几个数量级
  • 虽然这并不能为您提供服务器的身份证明,但它为您提供了服务器知道pass散列的保证:假服务器将无法计算密钥

你的应用程序是否使用登录名?拒绝投票给人一种使用SSL的感觉,但实际上并不正确。@Eugenrick是的,不支持不使用SSLThanks,这似乎很复杂,但我希望最好使用公钥加密来加密服务器和客户端之间的所有通信,以防我的应用程序被反编译(我被迫制作一个Android版本…@Gerhman-这里面没有任何东西是关于应用程序中嵌入的密钥的!我们对所有有效负载进行加密,没有任何秘密会泄露出去。让我重复并强调一下:有人对你的应用程序进行反编译是最接近入侵的。