データベース接続文字列のSSL / TLS設定

データベース接続文字列にSSL/TLS暗号化を追加する方法。PostgreSQLのsslmode、MongoDBのtls、Redisのrediss://、MSSQLのencryptを解説します。

Best Practices

詳細な説明

SSL/TLSが重要な理由

データベース接続を暗号化することで、ネットワーク上を移動する認証情報やクエリデータの盗聴を防ぎます。これはパブリックインターネットを経由するクラウドホスティングデータベースでは不可欠であり、プライベートネットワーク内でもベストプラクティスです。

データベース別のSSL設定

PostgreSQL

PostgreSQLはsslmodeパラメータを使用します:

postgresql://user:pass@host:5432/db?sslmode=require

利用可能なモード(セキュリティの低い順から高い順):

モード 暗号化 証明書チェック
disable なし なし
allow オプション なし
prefer 優先 なし
require あり なし
verify-ca あり CAのみ
verify-full あり CA + ホスト名

本番環境では可能な限りverify-fullを使用してください。AWS RDSやSupabaseなどのクラウドプロバイダーはダウンロード可能なCA証明書を提供しています。

MySQL

MySQLはsslまたはsslmodeパラメータを使用します:

mysql://user:pass@host:3306/db?ssl=true

またはKey-Value形式で証明書パスを指定:

SslMode=Required
SslCa=/path/to/ca.pem
SslCert=/path/to/client-cert.pem
SslKey=/path/to/client-key.pem

MongoDB

MongoDBはtlsパラメータを使用します(非推奨のsslパラメータに代わるもの):

mongodb://user:pass@host:27017/db?tls=true&tlsCAFile=/path/to/ca.pem

MongoDB Atlas接続(mongodb+srv://)はデフォルトでTLSが有効です。

Redis

Redisはrediss://プロトコル('s'が2つ)をTLS用に使用します:

rediss://user:pass@host:6380/0

MSSQL

SQL Serverはencryptパラメータを使用します:

sqlserver://user:pass@host:1433;database=db;encrypt=true;trustServerCertificate=false

証明書ファイル

多くのSSL設定では証明書ファイルの指定が必要です。データベース共通のパラメータにはCA証明書、クライアント証明書、クライアントキーのパスがあります。これらのファイルは安全に保存し、パスをハードコードするのではなく環境変数で参照してください。

ユースケース

本番環境でのデータベース接続のセキュリティ確保、コンプライアンス要件(SOC 2、HIPAA、PCI-DSS)の対応、暗号化接続を義務付けるクラウドホスティングデータベースへの接続。

試してみる — Connection String Builder

フルツールを開く