SSL モードで PostgreSQL に接続する

Shihab Sikder 2023年10月12日
SSL モードで PostgreSQL に接続する

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
Shihab Sikder avatar Shihab Sikder avatar

I'm Shihab Sikder, a professional Backend Developer with experience in problem-solving and content writing. Building secure, scalable, and reliable backend architecture is my motive. I'm working with two companies as a part-time backend engineer.

LinkedIn Website