Azure Database for MySQLでSSLを無効にする

2022年7月26日

こちらがうまくいかなかった時にやったこと。

SSLを無効にするには、require_secure_transport サーバー パラメーターを OFF に更新します。
サーバーパラメーターは多いのでフィルター使ったほうがいいです。

セキュリティ的にどうなん?という部分について考えたんですが、SSLでなくても大丈夫なんじゃ・・?と思ってます。(もちろん、組織のセキュリティポリシーによりますが)
というのも、パブリック IP アドレスは許可しない設定が既定でされているし、必要であればVNET 統合したFunctionsからのみ接続させるというようなこともできるから。
まあでもあるに越したことはないんでしょうね。SSLについてはタダだし、がんばってもいいかも。

さて、話を戻して、コード部分もssl部分が不要になるはずなので消しておきました。

require_secure_transportについてもう少し深掘り

そもそもなぜDataGripではサーバ証明書がなくても接続できたのか気になります。
おそらくこちらの内容が関係していると思われます。この記事はPostgresqlについての内容ですが、この部分についてはMySQLでも同じことが言えるのではないかという予想で話します。
上記のコードで言うと、以下のように修正すればrequire_secure_transport サーバー パラメーターを Onのままで接続できるようになるはず。(未検証。。。)

ssl:{
   rejectUnauthorized: false
}

Azure PostgreSQLとSSL/TLS接続

Azure上で運用されるPostgreSQLサーバーにrequire_secure_transportONとして設定されている場合、この設定はサーバーがセキュアな通信チャネルを介してのみ接続を受け入れるように強制します。これにより、データのセキュリティを確保し、通信内容が第三者によって読み取られるリスクを低減します。

Node.js pgクライアントのSSL接続

pgクライアントはNode.jsでPostgreSQLサーバーに接続するためのライブラリです。pgクライアントを使用する際、接続パラメータとしてSSL設定を含めることができます。しかし、pgクライアントがデフォルトでどのようなSSLモードを採用しているかは、libpqの挙動に依存しますが、通常はpreferモードが使用されることが多いです。これは、まずSSL接続を試み、その試みが失敗した場合にのみ非SSL接続にフォールバックするという挙動を意味します。

サーバー証明書の検証

pgクライアントを使用する際、サーバー証明書の検証は重要なセキュリティの側面です。デフォルトでは、サーバー証明書の検証を行わない設定もありますが、これでは接続が暗号化されているという保証は得られても、接続先が本当に意図したサーバーであるかの検証は行われません。サーバー証明書の検証を行うには、sslmode=verify-fullを設定し、sslrootcertに適切なルート証明書のパスを指定します。

Azure

Posted by takumioda