在服务器级别和应用级别强制SSL

时间:2016-10-17 19:18:58

标签: security ssl https

我很确定以前曾提出类似的问题,但我没有找到任何问题(也许我使用了错误的条款)。

我有一个不安全的网络应用程序(内置Laravel)。前端和后端之间的所有通信都通过http。现在,我想切换到https。据我所知,有两种方法可以做到这一点。

第一种是配置服务器(托管应用程序的服务器)仅接受https请求。如果我这样做,客户端和服务器之间的通信将被加密,我不需要在我的应用程序中更改任何内容(这是正确的吗?)。

第二种方法是将我的应用配置为仅接受https请求。如果我这样做,我将不得不对我的应用程序代码进行一些更改。

现在我想问一下,两种方式都同样安全吗?首选哪种方式?为什么?

1 个答案:

答案 0 :(得分:0)

恐怕有几件事情在这里混淆了。

您只能在Web服务器上启用SSL(Apache,Nginx等)。您需要服务器证书,并且必须将Web服务器配置为能够接收https(ssl)连接。至于如何做到这一点超出了这个答案的范围,但你可以找到很多教程。你必须先这样做。

当您的Web服务器配置为支持SSL时,您希望您的Web应用程序可以通过HTTPS而不是纯HTTP访问。目的是一方面,不知道差异的用户仍然是安全的,另一方面,攻击者无法将用户连接降级为不安全的普通HTTP。

现在,关于如何为应用程序强制实施HTTPS,您确实有两种选择。您可以让您的Web服务器处理纯HTTP请求并将其重定向到SSL,这在ApacheNginx中都是一种简单的配置。或者,您可以向应用程序添加重定向,以便在通过纯HTTP访问时将处理场景,并将用户使用Location标头重定向到HTTPS。

安全方面,无论是网络服务器还是应用程序进行重定向都无关紧要,从客户端的角度看它是相同的(实际上几乎无法区分)。选择您最喜欢的选项。可能存在例如可维护性原因来选择一个或另一个。 (您希望在应用程序代码中维护重定向,还是让服务器操作添加重定向标头等。)

但请注意,无论哪种方式,您的应用程序仍可能容易受到名为SSL Stripping的攻击,并且为了防止您应该始终发送HSTS response header