1

我发现很多关于使用 MYSQL_CLIENT_SSL 标志与 mysql_connect() 调用、设置和 SSH 隧道的相互冲突的信息...... MYSQL_CLIENT_SSL 可以接受吗?官方文档似乎表明是的,但是堆栈和其他地方的许多帖子都说隧道更好,但没有解释。

如果我使用 MYSQL_CLIENT_SSL,如何验证我实际上获得了加密连接?我已将它添加到我的 mysql_connect() 调用中,它不会引发任何错误,我认为它正在工作,但我怎么能确定呢?

4

2 回答 2

2

您可以使用以下方法检查它:

$connection = mysql_connect([host], [username], [password], false, MYSQL_CLIENT_SSL)
    or die(mysql_error());
$res = mysql_query("SHOW STATUS LIKE 'ssl_cipher';", $connection);
print_r(mysql_fetch_row($res));

输出应如下所示

Array
(
    [0] => Ssl_cipher
    [1] => xxx-xxx-xxxxxx-xxx
)
于 2011-10-04T20:39:17.557 回答
1

我知道这是一个老问题,但我也遇到了这个问题并解决了它,所以我想我会为后代分享我的答案。

亚马逊的文档很有帮助。首先,您需要从 Amazon 下载 mysql-ssl-ca-cert.pem 文件(请参阅链接)。然后尝试使用该文件从终端连接。

mysql --host=mydb.c83ks9ckdk39.us-east-1.rds.amazonaws.com --user=myuser -p --ssl_ca=mysql-ssl-ca-cert.pem

亚马逊表示您可以使用此授权语句来限制与 SSL 的连接,因此请在连接时运行此语句。

GRANT USAGE ON *.* TO 'myuser'@'%' REQUIRE SSL

现在断开连接并尝试在没有“--ssl_ca=mysql-ssl-ca-cert.pem”标志的情况下再次连接。如果您被拒绝,那么您知道该用户现在需要 SSL 连接。现在您只需要正确设置 php。像这样的东西:

$link = mysqli_init();
mysqli_options($link, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true);
$link->ssl_set(NULL,NULL,"mysql-ssl-ca-cert.pem",NULL,NULL); 
$ok = $link->real_connect($MYSQL['host'], $MYSQL['user'], $MYSQL['pass'], $MYSQL['db'], 3306, NULL, MYSQLI_CLIENT_SSL);

如果您可以连接,那么您已使用 SSL 连接,您可以运行 Tom 的查询来确认是否需要。

$rs = $link->query("SHOW STATUS LIKE 'ssl_cipher'");
print_r($rs->fetch_assoc());
于 2014-06-05T15:34:20.067 回答