1

ユーザーが入力できるフォームがあり、データは PHP を使用して MySQL データベースに保存されます。Apache サーバーへの接続は HTTPS で暗号化されており、MySQL データベースへの接続を暗号化したいと考えています。Apache と MySQL の両方が同じサーバー マシン上にあります。

Interweb を調べてみたところ、Stunnel が必要なようです。MySQL サーバーへの接続に標準ポートと stunnel ポートを使用するオプションが与えられているため、OpenSSL と SSL がサポートされ、サーバーでアクティブ化されます。ただし、オンラインで見つけたすべての記事は、Stunnel を使用して MySQL クライアントを外部の MySQL サーバーに接続する方法を扱っていますが、PHP を使用してローカルの MySQL サーバーに接続する方法は扱っていません。フォームが https 経由で送信されるからといって、データベースへの接続も暗号化されているとは限らないと思いますか?

MySQL への接続に使用する PHP コードは次のようになります。

$mysqli = new mysqli("ip","user", "password", "database", "standardport");

これは、標準ポートを使用して正常に機能します。ただし、Stunnel ポートに変更すると、接続タイムアウト エラーが発生します。明らかに何かが欠けています。どんな助けやアドバイスも大歓迎です!ありがとう!

4

1 に答える 1

3

HTTPS 接続を使用してクライアント ブラウザと Web サーバー間のトラフィックを暗号化し、Web サーバーと MySQL インスタンスが同じマシン上にあることは既に述べました。

HTTPS 接続が安全であると仮定すると、パブリック ネットワーク上でデータを保護するために必要なのはこれだけであり、ローカル マシンにのみ存在する接続に安全なトンネルを使用すると、不必要な複雑さが増すだけです。

次の例を検討してください。


1 つ目は、安全なトンネルなしで接続がどのように見えるかです。

browser <--HTTPS--> [ webserver <--> mysql ]

したがって、このシナリオでは、Web サーバーと mysql 間の接続は暗号化されていません。マシンにアクセスできる人 (パーミッションに応じて) は、Web サーバー間のすべてのトラフィックを監視したり、ディスクから物理データベースを読み取ったりすることができます。


今、安全なトンネルで

[ webserver <--> stunnel <--ENCRYPTED--> stunnel <--> mysql ]

Web サーバーと 1 つの安全なトンネル エンドポイントとの間の接続、および mysql ともう 1 つのエンドポイントとの間の接続が両方とも暗号化されていないことがわかると思います。このシナリオでは、前とまったく同じように、マシンにアクセスできる誰かがすべてのトラフィックを確認し、ディスクからデータベースを読み取る可能性があります。

追加のセキュリティは達成されていません。


最後に

[ webserver <--> stunnel ] <--ENCRYPTED--> [ stunnel <--> mysql ]

2 つの別個のサーバーを使用している場合、ローカル トラフィックはまだ暗号化されていませんが、stunnelは 2 つのマシン間のストリームを保護します。マシンへのローカル アクセス権を持つユーザーはトラフィックを監視してデータを読み取ることができますが、サーバー間のネットワーク トラフィックを監視するユーザーはできません。


解決策?

とはいえ、PHP と MySQL の間のトラフィックを本当に暗号化したい場合は、同じマシン上であっても、stunnel を使用するよりもわずかに優れたソリューションが存在します。

MySQL はネイティブで SSL をサポートしており、両方がSSL サポート付きでコンパイルされている場合、PHP も同様です。(インストールはすでにこのように構成されている可能性があります。確認するのはあなた次第です)

MySQL のマニュアルには、SSL サポートを使用して MySQL サーバーを構成する方法が詳しく説明されており、PHP は機能を提供します。mysqli_ssl_set

この組み合わせを使用すると、PHP と mysql サーバー間の接続をネイティブに暗号化できます。

[ webserver <--ENCRYPTYED --> mysql ]

ただし、マシンにアクセスできるユーザーは、暗号化されていないデータベースをディスクから読み取ることができ、実行中のプロセスのメモリを観察できる場合があります。

おっしゃる通り、インターネットは危険な場所であり、適切なセキュリティが不可欠です。サーバー自体とそこに含まれるデータが保護されていない場合、データがサーバーに出入りする方法を保護するためにどんな予防措置を講じても、すべてが失われます。

于 2012-07-12T08:59:10.530 に答える