Webアプリケーションや業務システムでは、データベース(DB)を利用して大量のデータを管理しています。しかし、アプリケーションサーバーとデータベースサーバー間の通信が暗号化されていない場合、ネットワーク上でデータが盗聴されたり、改ざんされたりするリスクがあります。
本記事では、SSL証明書を利用してMySQLおよびPostgreSQLのデータベース接続を安全に暗号化する方法を、初心者向けに分かりやすく解説します。
SSL証明書とは?
SSL(Secure Sockets Layer)証明書は、インターネット上のデータ通信を暗号化する電子証明書です。現在では、SSLの後継規格である**TLS(Transport Layer Security)**が主流ですが、一般的には「SSL証明書」と呼ばれています。
データベース接続時にSSL証明書を設定することで、クライアントとデータベースサーバー間の通信を暗号化し、データの盗聴や改ざんを防止できます。
MySQLでのSSL接続設定
1. SSL証明書の準備
- 証明書ファイル (
server-cert.pem) - 秘密鍵ファイル (
server-key.pem) - 認証局 (CA) 証明書 (
ca-cert.pem)
2. MySQLサーバーに証明書を設定
設定ファイル (my.cnf) の編集
[mysqld]
ssl-ca=/etc/mysql/ssl/ca-cert.pem
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pem
require_secure_transport=ONMySQL サーバーの再起動
sudo systemctl restart mysql3. クライアント側の設定
MySQL クライアントからの接続方法
mysql -h example.com -u user -p --ssl-ca=/etc/mysql/ssl/ca-cert.pem --ssl-mode=VERIFY_CAPHP (PDO) での設定例
$pdo = new PDO('mysql:host=example.com;dbname=testdb;charset=utf8', 'user', 'password', [
PDO::MYSQL_ATTR_SSL_CA => '/etc/mysql/ssl/ca-cert.pem',
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
]);4. 接続確認
SHOW STATUS LIKE 'Ssl_cipher';Ssl_cipherに値が表示されていれば、SSL接続が有効です。
PostgreSQLでのSSL接続設定
1. SSL証明書の準備
- 証明書ファイル (
server.crt) - 秘密鍵ファイル (
server.key) - 認証局 (CA) 証明書 (
root.crt)
2. PostgreSQLサーバーに証明書を設定
設定ファイル (postgresql.conf) の編集
ssl = on
ssl_cert_file = '/etc/ssl/certs/server.crt'
ssl_key_file = '/etc/ssl/private/server.key'
ssl_ca_file = '/etc/ssl/certs/root.crt'クライアント認証設定 (pg_hba.conf)
hostssl all all 0.0.0.0/0 certPostgreSQL サーバーの再起動
sudo systemctl restart postgresql3. クライアント側の設定
psql クライアントからの接続方法
psql "sslmode=verify-ca sslrootcert=/etc/ssl/certs/root.crt host=example.com dbname=testdb user=user"PHP (PDO) での設定例
$pdo = new PDO('pgsql:host=example.com;dbname=testdb', 'user', 'password', [
PDO::ATTR_PERSISTENT => true,
PDO::PGSQL_ATTR_SSL_MODE => 'verify-ca',
PDO::PGSQL_ATTR_SSL_ROOT_CERT => '/etc/ssl/certs/root.crt',
]);4. 接続確認
SHOW ssl;sslがonであれば、SSL接続が有効です。
SSL接続設定時の注意点
- 証明書ファイルのパーミッション管理
- 秘密鍵 (
*.key) は600 (rw——-) のパーミッション設定を推奨
- 秘密鍵 (
- 証明書の有効期限管理
- SSL証明書の有効期限が切れないように注意し、定期的に更新を行います。
- 接続モードの設定
VERIFY_CAやVERIFY_FULLを設定することで、サーバー証明書の検証を強化できます。
- データベースポートのファイアウォール設定
- SSL通信を使用するポート(通常3306 (MySQL)、5432 (PostgreSQL))をファイアウォールで保護します。
まとめ
SSL証明書を使用することで、MySQLやPostgreSQLのデータベース接続を暗号化し、通信の安全性を確保できます。
- MySQL では
require_secure_transport=ONやssl-mode=VERIFY_CAを設定 - PostgreSQL では
ssl = onやsslmode=verify-caを設定
GetSSL.PRO では、データベース接続用のSSL証明書も提供しています。安全なデータベース接続を実現するために、SSL証明書の導入を検討してください。


















