SSL モードで PostgreSQL に接続する
Shihab Sikder
2023年10月12日
Postgres は、データベースに接続しようとしているときに、SSL を使用して接続のセキュリティを確認します。HTTP ではデフォルトで無効になっていますが、HTTPS では、Postgres データベースで操作を実行するために接続の SSL モードが必要です。
接続がプライベートでない場合、複数の攻撃パラメータが存在する可能性があります。誰でも簡単にデータベースの request-response を介してスニッフィングツールを使用できます。
PostgreSQL の SSL モードとは
Postgres は、さまざまなタイプの SSL モードを提供します。まず、Postgres の一般的な接続文字列を見てみましょう。
const connectionString =
'postgres://<database_username>:<database_userpassword>@<hostaddress>:<port_no>/<database_name>'
これで、次のようにパラメータ sslmode
を追加できます。
const connectionString =
'postgres://<database_username>:<database_userpassword>@<hostaddress>:<port_no>/<database_name>?sslmode=<ssl_mode>'
Postgres が提供する SSL モードのリストは次のとおりです。
sslmode |
盗聴防止 | MITM 保護 | 説明 |
---|---|---|---|
disable |
いいえ | いいえ | セキュリティについては気にしません。データは暗号化されません。 |
allow |
多分 | いいえ | セキュリティを気にせず、接続を暗号化します。 |
prefer |
多分 | いいえ | 暗号化の使用を強制することはありません。サーバーが暗号化のオーバーヘッドをサポートしている場合、サーバーは暗号化します。 |
require |
はい | いいえ | データを暗号化すると、暗号化のオーバーヘッドが発生し、ネットワークはユーザーが接続したい正しいサーバーを保証します。 |
verify-ca |
はい | CA ポリシーに依存します | データ、暗号化のオーバーヘッドを暗号化し、常に信頼できるサーバーに接続します。 |
verify-full |
はい | はい | データは暗号化され、ユーザーはオーバーヘッドを受け入れ、ネットワークとサーバーの両方が信頼され、要求された特定のサーバーにのみ接続します。 |
このフラグは環境変数に設定することもできます。
PGSSLMODE=verify-full PGSSLROOTCERT=ca.pem
ここでは、ca.pem
が鍵となります。CA から収集する必要があります。CA は証明書機関の略です。
Postgres SSL モードでサーバーを完全に構成するには、このブログの手順に従ってください。
これは、SSL モードに関する Postgres の公式ドキュメントからのメモです。
Using NULL-SHA or NULL-MD5 ciphers, authentication can be done without any encryption overhead. A man-in-the-middle, on the other hand, might read and pass communications between the client and the server. In addition, as compared to the overhead of authentication, encryption has a low overhead. NULL ciphers are not recommended for these reasons.
また、公式ドキュメントこちらをご覧ください。彼らは、SSL モードを使用しながら証明書に自己署名する方法を示しました。
著者: Shihab Sikder