2017-05-15 11 views
1

私は、特にこのレベルでsysadminの仕事の奥深さを初めて知り、PHPアプリケーションとMySQL間のプロセス間通信を認証する業界標準の方法を確立することを任されていますデータベースサーバ。PHP Mysqlプロセス間通信TLS

mysqlまたはPHPのマニュアルで参照が見つからないようです。私は、暗号化の目的でPHPとMysqlの間の標準TLSに関する圧倒的な情報量を見出しましたが、相互認証(Mysql内のPHPアプリケーションの認証)に関しては何もありません。これはカスタムプラグインでも、カスタムプラグインなしでも可能ですか?

+0

実際には、MySQLでユーザーとパスワードの組み合わせが設定され、そのユーザーに特定の役割が許可されている通常の認証では、MySQLの保存からPHPアプリケーションを認証するユーザーは誰もいません。 MySQLはそれを "認識"していません。もう一つの同様の質問があります:http:// stackoverflow。com/questions/40881874/how-to-encrypt-connection-php-and-mysql-using-mutual-certificate-authenticate –

答えて

2

TLSは、パケットスニッフィングツールを使用して、ユーザーが「オフラインで」資格情報を削除できないようにします。これは、MySQLに接続するデバイスまたはアプリケーションの識別を保証するものではありません。

SSHのような追加の層、あるいはいくつかの種類のプロキシチャンネル経由でMySQLへの接続を許可する前に検証を行うカスタムアプリケーションが必要です。それは複雑な作業であり、それは確かにではなく、の業界標準です。

現在の標準は非常に単純です:

  • は、マシンが積極的なファイアウォールルールを通して、あなたのMySQLサーバへのアクセス権を持っている制限します。ポート3306はにはなりません。は一般のインターネットに公開してください。最低でも、社内のプライベートネットワークの一部には、ホワイトリストに載っているIPや、192.168.x.0/24のようなネットワークブロックのほんの一部に固定する必要があります。
  • MySQLサーバとアプリケーション間の接続が安全でないことを確認できない場合は、TLSまたはSSHトンネリングを使用してください。サーバーが物理的に異なる場所にあり、接続が安全であることを確認できない場合は、これが重要です。
  • ユーザー名とパスワードの資格情報を合理的に複雑にし、強引にするのは難しいです。これらはアプリケーションレベルで設定されているため、60文字以上のパスワードは問題になりません。それらを大きくて完全にランダムにする。手で入力する必要はありません。設定ファイルまたはパスワードマネージャを使用します。

追加の懸念がある場合監査はあなたの戦略が健全であることを確認するために評判の良いセキュリティ企業によってを成し遂げる

0

一般的に使用される2つのアプローチがあります。まず、PHPアプリケーションがmysqlサーバの証明書を適切にチェックすると、mysqlサーバは誰であるかが分かります。これはPHPへのmysqlを認証します。次に、データベースパスワードを送信すると、PHPアプリケーションをmysqlサーバに認証したことになります。あなたはそれぞれの方向で異なるアプローチを使用しましたが、相互認証を達成しました。これまでのところ最も一般的なアプローチであり、相互認証の定義を満たしています。

あまり一般的でないアプローチは、client certificatesを使用することです。 「クライアント証明書の使用を要求する」というテキストを参照してください。 mysqlのコマンドライン(およびphpの同様の接続引数)に--ssl-certおよび--ssl-key引数を使用すると、クライアント証明書をサーバに提供できます。サーバーの証明書は、サーバーをphpに認証するために使用され、クライアント証明書はサーバーに対してphpを認証するために使用されます。