1

我有一个用户可以填写的表格,数据将使用 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 端口,则会出现连接超时错误。显然我错过了一些东西;任何帮助和建议表示赞赏!谢谢!

4

1 回答 1

3

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

Assmuning 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 手册详细介绍了如何使用 SSL 支持配置 MySQL 服务器, PHP 提供了该功能mysqli_ssl_set

使用这种组合,您可以本地加密 PHP 和 mysql 服务器之间的连接。

[ webserver <--ENCRYPTYED --> mysql ]

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

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

于 2012-07-12T08:59:10.530 回答