データベース接続文字列のSSL / TLS設定
データベース接続文字列にSSL/TLS暗号化を追加する方法。PostgreSQLのsslmode、MongoDBのtls、Redisのrediss://、MSSQLのencryptを解説します。
詳細な説明
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)の対応、暗号化接続を義務付けるクラウドホスティングデータベースへの接続。