1

mysql_connect()呼び出しでのMYSQL_CLIENT_SSLフラグの使用と、SSHトンネルの設定および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のドキュメントはかなり役に立ちます。まず、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

Amazon は、この許可ステートメントを使用して 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 に答える