現在の位置: ホーム> 最新記事一覧> SSL_SET関数を使用してSSLを設定した後、なぜ暗号化されていないように見えるのですか?考えられる理由は何ですか?

SSL_SET関数を使用してSSLを設定した後、なぜ暗号化されていないように見えるのですか?考えられる理由は何ですか?

M66 2025-06-23

1。SSL_SET ()の順序は正しくありません

mysqli :: ssl_set()関数は、 mysqli :: real_connect()を呼び出す前に呼び出す必要があります。そうしないと、設定は有効になりません。間違った順序は、最も一般的な監視の1つです。

エラー例:

$conn = new mysqli(); $conn->real_connect('db.m66.net', 'user', 'pass', 'database'); $conn->ssl_set('/path/client-key.pem', '/path/client-cert.pem', '/path/ca.pem', NULL, NULL);

正しい例:

$conn = new mysqli(); $conn->ssl_set('/path/client-key.pem', '/path/client-cert.pem', '/path/ca.pem', NULL, NULL); $conn->real_connect('db.m66.net', 'user', 'pass', 'database');

2。mysqli_client_sslフラグは有効になりません

real_connect()接続を使用する場合、 mysqli_client_sslフラグが渡されない場合、 ssl_set()が呼び出されても、接続はSSLを有効にしない場合があります。

$conn->real_connect('db.m66.net', 'user', 'pass', 'database', null, null, MYSQLI_CLIENT_SSL);

3。OpenSSLサポートは、クライアントでは有効になりません

PHPがOpenSSL拡張機能を有効にしているかどうかを確認することが重要です。 php -m |を実行することで確認できますgrepは、 phpinfo()またはコマンドラインを介してopensslをopensslします。有効になっていない場合、PHPはSSL暗号化された接続を確立できません。

4。SSLはMySQLサーバーで有効になっていないか、完全に構成されていません

また、サーバーはSSLを有効にし、法的証明書とCAファイルを提供する必要があります。次のSQLステートメントで確認できます。

SHOW VARIABLES LIKE '%ssl%';

結果がHAS_SSL無効になっていることを示している場合、SSLはクライアントの設定に関係なく有効になりません。

5.SSLをサポートしていないライブラリまたはドライバーが使用されます

PHPまたはlibmysqlclient接続ライブラリのいくつかの古いバージョンは、SSLをサポートしていないか、サポートするために特定のコンピレーションオプションが必要になる場合があります。 SSLをネイティブにサポートし、より近代的であるため、 MySQLNDドライバーを使用することをお勧めします。

6.暗号化のために接続が有効になっていることを確認します

すべてが正しく構成されていても、接続が有効になっていることを確認する必要があります。次のステートメントで実際の暗号化ステータスを表示できます。

$result = $conn->query("SHOW STATUS LIKE 'Ssl_cipher'"); $row = $result->fetch_assoc(); if (!empty($row['Value'])) { echo "SSL 启用,加密算法为: " . $row['Value']; } else { echo "SSL 未启用"; }

リターンが空の場合、SSLは実際には有効になりません。

7.ドメイン名またはIPアドレスによって引き起こされる暗黙のリターン

一部の環境では、 LocalHostを使用すると、接続がUnixソケットに戻り、ネットワークレイヤーSSLをバイパスすることがあります。たとえば、明示的なホスト名またはIPアドレスを使用することをお勧めします。

$conn->real_connect('db.m66.net', 'user', 'pass', 'database');