在脚本中加密MySQL流量

时间:2009-11-22 15:11:26

标签: php mysql ssl

我需要能够加密从Web服务器到数据库服务器的MySQL流量。我知道如何根据my.cnf中的服务器和客户端设置将MySQL设置为使用SSL,但是,这需要使用PHP中的mysql_connect()来完成。这可能是一个2部分的问题。

1)mysql_connect()是否使用my.cnf中设置的MySQL客户端设置?

如果没有......

我已经读过你可以使用MYSQL_CLIENT_SSL但是从哪里获得的SSL数据?在mysql_connect函数中使用MYSQL_CLIENT_SSL是否自动加密流量?

简单地说,最好的方法是什么?

谢谢!

4 个答案:

答案 0 :(得分:4)

如果使用SSL连接到MySQL,则SSL客户端和服务器之间的所有流量都将被加密。

MYSQL_CLIENT_SSL已过时。如果您需要使用SSL,请使用mysqli

$db = mysqli_init(); 
$db->ssl_set(null, null,'cacert.pem',NULL,NULL); 
$db->real_connect('host','user','pass','db'); 

答案 1 :(得分:2)

作为替代解决方案,您还可以使用SSH tunnels来完成压缩和加密。

答案 2 :(得分:1)

MYSQL_CLIENT_SSL已从PHP中删除,无法使用。

您有几个选择:第一个是如果您的Web服务器也是您的数据库服务器,则不需要加密,因为连接永远不会离开您的盒子:它只使用localhost

第二个选项是使用Pablo上面提到的内容并利用SSH隧道。 SSH隧道基本上与SSL连接做同样的事情,除了它需要一个“额外步骤”来实现它。

这似乎是一个相当不错的教程,可以帮助您入门:

http://www.revsys.com/writings/quicktips/ssh-tunnel.html

希望这有帮助!

答案 3 :(得分:1)

根据http://www.php.net/manual/en/mysql.constants.php#mysql.client-flags MYSQL_CLIENT_SSL仍然是PHP 4和5的一部分。您需要预先设置SSL连接。您将不得不生成证书和一堆其他麻烦(http://www.madirish.net/?article=244),但它会加密您的Web服务器和数据库主机之间的流量。

如上所述,如果您的Web服务器与数据库服务器位于同一主机上,则此加密是不必要的,因为数据通过本地套接字传输并且不会暴露给网络。 SSL加密仅加密网络上的流量。

我会警告不要使用SSH隧道,因为它们有死亡倾向,你不得不担心维持连接。

相关问题