温馨提示×

OpenSSL如何配置Ubuntu数据库安全

小樊
58
2025-08-20 02:12:38
栏目: 云计算

以下是使用OpenSSL配置Ubuntu数据库安全的步骤,以MySQL和PostgreSQL为例:

一、安装OpenSSL

sudo apt update && sudo apt install openssl

二、生成SSL证书和密钥(自签名,测试环境使用)

1. 生成CA证书

openssl genrsa -out ca-key.pem 2048
openssl req -new -x509 -days 3650 -key ca-key.pem -out ca-cert.pem

2. 生成服务器证书

openssl req -newkey rsa:2048 -nodes -keyout server-key.pem -out server-req.pem
openssl x509 -req -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem

3. 生成客户端证书(可选,双向认证需配置)

openssl req -newkey rsa:2048 -nodes -keyout client-key.pem -out client-req.pem
openssl x509 -req -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem

三、配置数据库服务

1. MySQL配置

  • 移动证书到安全目录
    sudo mkdir -p /etc/mysql/ssl
    sudo mv ca-cert.pem server-cert.pem server-key.pem /etc/mysql/ssl/
    sudo chown -R mysql:mysql /etc/mysql/ssl
    sudo chmod 600 /etc/mysql/ssl/*.pem
    
  • 修改配置文件
    编辑 /etc/mysql/my.cnf,在 [mysqld] 部分添加:
    [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  # 强制使用SSL连接
    
  • 重启服务
    sudo systemctl restart mysql
    
  • 验证SSL状态
    mysql -u root -p --ssl-ca=/etc/mysql/ssl/ca-cert.pem -e "SHOW VARIABLES LIKE 'have_ssl';"
    

2. PostgreSQL配置

  • 移动证书到数据目录
    将证书文件(server.crtserver.keyca.crt)放置到 /var/lib/postgresql/data/ 或指定路径。
  • 修改配置文件
    编辑 postgresql.conf
    ssl = on
    ssl_cert_file = '/path/to/server.crt'
    ssl_key_file = '/path/to/server.key'
    ssl_ca_file = '/path/to/ca.crt'  # 可选,双向认证需配置
    
    编辑 pg_hba.conf,添加SSL连接规则:
    # 允许SSL连接
    hostssl all all 0.0.0.0/0 md5
    # 或双向认证(需客户端提供证书)
    # hostssl all all 0.0.0.0/0 cert clientcert=1
    
  • 重启服务
    sudo systemctl restart postgresql
    
  • 验证SSL连接
    使用 psql 命令行工具:
    psql "host=localhost port=5432 dbname=postgres user=postgres sslmode=require"
    

四、安全增强措施

  1. 禁用不安全的协议和密码套件
    编辑 /etc/ssl/openssl.cnf,在 [system_default_sect] 中设置:
    MinProtocol = TLSv1.2
    CipherString = HIGH:!aNULL:!MD5
    
  2. 定期更新证书
    设置cron任务自动更新证书,避免过期。
  3. 限制访问权限
    使用防火墙(如 ufw)限制数据库端口(MySQL:3306,PostgreSQL:5432)的访问范围:
    sudo ufw allow from <trusted_ip> to any port 3306
    sudo ufw enable
    

五、参考来源

  • MySQL SSL配置:
  • PostgreSQL SSL配置:
  • OpenSSL基础操作:

0