2017-09-16 58 views
0

我们的应用程序使用客户端/服务器架构,它在Windows上运行。对https服务器验证用户安全吗?

我们的用户需要通过http(或以后的https)用户/密码登录客户端,然后获取他们的权限。

以前我们使用的是http协议,所以客户端和服务器之间的契约可能已经被一些客户端观察到了。

现在,我们启用了https(使用Let's Encrypt)协议,但我仍然不知道在避免用户黑客身份验证过程方面它是否可靠。

这里是我所看到的潜在方法破解协议通过使用伪造的服务器

  1. 拨打IP到主机(实际主机名)映射hosts文件
  2. 做一个假的http服务器它使用上面的ip,并且与我们的服务器一样提供相同的auth API。

客户端使用cpprestsdk发送http请求。

由于Web服务器是公开的,用户可以很容易地使用Chrome浏览器获取ca,似乎很容易通过wireshark拦截https请求/响应。

我的问题是,我的假设是否有效?如果是这样,我怎么能做出更多的改变,以防止在进一步的版本中。

回答

0

你的问题是有效的,https很容易出现中间人攻击(MITM)。您需要使用HTTP Public-Key-Pins响应标头。它将特定的加密公钥与特定的Web服务器相关联,以降低伪造证书对MITM攻击的风险。如果一个或多个密钥被固定并且服务器不使用任何密钥,则浏览器将不会接受该合法的响应,并且不会显示它。 您可以在这里阅读详细信息 - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Public-Key-Pins

+0

中间人能修改数据吗?由于网站拥有私钥,我认为中间人不能修改数据,对吗? – user1633272

+0

用户的浏览器将数据发送到服务器,但中间人拦截通信并可以查看/修改数据。 – ManishSingh

+0

用户的浏览器将数据发送到服务器,但中间人拦截通信并可以查看/修改数据。中间人代表真实服务器向最终用户出示他们的公共证书,他们创建类似的虚假网站并拦截请求。中间人有他们的证书的私钥,以便他们可以查看数据。中间人使用服务器公共证书将请求转发到真实服务器,并向最终用户转发响应。 – ManishSingh