我需要能够加密从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是否自动加密流量?
简单地说,最好的方法是什么?
谢谢!
答案 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隧道,因为它们有死亡倾向,你不得不担心维持连接。