SSL証明書を使ったデータベース接続の暗号化 (MySQL, PostgreSQL)

SSL記事

Webアプリケーションや業務システムでは、データベース(DB)を利用して大量のデータを管理しています。しかし、アプリケーションサーバーとデータベースサーバー間の通信が暗号化されていない場合、ネットワーク上でデータが盗聴されたり、改ざんされたりするリスクがあります。

本記事では、SSL証明書を利用してMySQLおよびPostgreSQLのデータベース接続を安全に暗号化する方法を、初心者向けに分かりやすく解説します。


NordVPN

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=ON

MySQL サーバーの再起動

sudo systemctl restart mysql

3. クライアント側の設定

MySQL クライアントからの接続方法

mysql -h example.com -u user -p --ssl-ca=/etc/mysql/ssl/ca-cert.pem --ssl-mode=VERIFY_CA

PHP (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 cert

PostgreSQL サーバーの再起動

sudo systemctl restart postgresql

3. クライアント側の設定

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;
  • sslon であれば、SSL接続が有効です。

SSL接続設定時の注意点

  1. 証明書ファイルのパーミッション管理
    • 秘密鍵 (*.key) は600 (rw——-) のパーミッション設定を推奨
  2. 証明書の有効期限管理
    • SSL証明書の有効期限が切れないように注意し、定期的に更新を行います。
  3. 接続モードの設定
    • VERIFY_CAVERIFY_FULL を設定することで、サーバー証明書の検証を強化できます。
  4. データベースポートのファイアウォール設定
    • SSL通信を使用するポート(通常3306 (MySQL)、5432 (PostgreSQL))をファイアウォールで保護します。

まとめ

SSL証明書を使用することで、MySQLやPostgreSQLのデータベース接続を暗号化し、通信の安全性を確保できます。

  • MySQL では require_secure_transport=ONssl-mode=VERIFY_CA を設定
  • PostgreSQL では ssl = onsslmode=verify-ca を設定

GetSSL.PRO では、データベース接続用のSSL証明書も提供しています。安全なデータベース接続を実現するために、SSL証明書の導入を検討してください。

タイトルとURLをコピーしました