【问题标题】:Submit Form Data through Web Server to MySQL Server using Stunnel?使用 Stunnel 通过 Web 服务器向 MySQL 服务器提交表单数据?
【发布时间】:2012-07-11 21:51:31
【问题描述】:

我有一个用户可以填写的表格,数据将使用 PHP 存储到 MySQL 数据库中。到 Apache 服务器的连接是通过 HTTPS 加密的,我想加密到 MySQL 数据库的连接。 Apache 和 MySQL 都在同一台服务器机器上。

我在 Internet 上进行了挖掘,而 Stunnel 似乎正是我所需要的。在服务器上支持并激活 OpenSSL 和 SSL,因为我们可以选择使用标准端口和 stunnel 端口连接到 MySQL 服务器。但是,我在网上找到的所有文章都涉及使用 Stunnel 将 MySQL 客户端连接到外部 MySQL 服务器,而不是如何使用 PHP 连接到本地 MySQL 服务器。我可以假设仅仅因为表单是通过https传输的,并不意味着与数据库的连接也被加密了吗?

我用来连接MySQL的PHP​​代码是这样的:

$mysqli = new mysqli("ip","user", "password", "database", "standardport");

使用标准端口可以正常工作。但是,如果我将其更改为 Stunnel 端口,则会出现连接超时错误。显然我错过了一些东西;任何帮助和建议表示赞赏!谢谢!

【问题讨论】:

  • 您的数据库是否以某种方式加密?您似乎要付出很多努力来保护流式传输的数据,但是如果 DBMS + web 服务器在同一台机器上,并且数据库没有加密,那么有人可以直接从磁盘读取它。 (我并不是说这是一个坏问题,只是我认为如果您的 DBMS 连接在同一台机器上,那么 SSL 隧道连接是矫枉过正的)
  • 不,数据库没有加密,我同意你的观点,屏蔽连接有点偏执。但是,我的大学却坚持:(
  • 在同一台机器上没有意义,也许你也可以说服你的大学。 STunnel 用于端点之间、服务器 A 和服务器 B 之间的加密,无论它们之间存在什么基础设施。如果您的大学担心有人在嗅探webserver <-> mysql 的连接,那么请在 服务器之间使用 STunnel。我现在要嗅探的是webserver <-> stunnel-endpoint,直到数据已经在隧道中(即stunnel-endpoint <-> stunnel-endpoint)之后,数据仍然没有加密,即使stunnel-endpoint <-> mysql 是未加密的
  • 所以 STunnel 可能在一定程度上有助于两台服务器之间的连接,但仍然不是 100% 安全吗?嗯,互联网真的是一个危险的地方:(但即使这是一个不必要的练习,使用 mysqli 建立 SSL 连接的正确语法是什么?

标签: php mysql encryption ssl stunnel


【解决方案1】:

您已经声明您使用 HTTPS 连接来加密客户端浏览器和网络服务器之间的流量,并且网络服务器和 MySQL 实例位于同一台计算机上。

假设 HTTPS 连接是安全的,这应该是您在公共网络上保护您的数据所需要的全部内容,并且为仅存在于本地计算机上的连接使用安全隧道只会增加不必要的复杂性。

考虑以下示例。


首先是在没有安全隧道的情况下连接的外观。

browser <--HTTPS--> [ webserver <--> mysql ]

所以在这种情况下,webserver 和 mysql 之间的连接是未加密的。有权访问机器的人(取决于权限)将能够观察网络服务器之间的所有流量和/或从磁盘本身读取物理数据库。


现在,有了一个安全的隧道

[ webserver <--> stunnel <--ENCRYPTED--> stunnel <--> mysql ]

我希望你能看到 webserver 和一个安全隧道端点之间的连接,以及 mysql 和另一个端点之间的连接都是未加密的。在这种情况下,与以前完全相同,有权访问机器的人可能会看到所有流量并从磁盘读取数据库。

没有实现额外的安全性。


最后

[ webserver <--> stunnel ] <--ENCRYPTED--> [ stunnel <--> mysql ]

当您使用两台单独的服务器时,本地流量仍然未加密,但是 stunnel 保护两台机器之间的流。对机器具有本地访问权限的人可能仍然能够观察流量和读取数据,但观察服务器之间的网络流量的人则不能。


解决方案?

综上所述,如果你真的想加密 PHP 和 MySQL 之间的流量,即使在同一台机器上,也存在比使用 stunnel 更好的解决方案。

MySQL 本身支持 SSL,就像 PHP 一样,编译时支持 SSL。 (您的安装可能已经以这种方式配置,由您来检查它们)

MySQL手册详解how to configure your MySQL server with SSL support和PHP提供函数mysqli_ssl_set

使用这种组合,您可以对 PHP 和 mysql 服务器之间的连接进行原生加密。

[ webserver <--ENCRYPTYED --> mysql ]

但是有权访问机器的人可能仍然能够从磁盘读取未加密数据库,并且可能能够观察正在运行的进程的内存。

您说的很对,互联网是一个危险的地方,适当的安全性至关重要。如果您的服务器本身及其包含的数据不安全,那么无论您采取何种预防措施来保护数据进入和离开的方式,一切都会丢失。

【讨论】:

  • 这是一个很好的解释,Leigh,谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-17
  • 2016-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多