以下是使用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.crt、server.key、ca.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"
四、安全增强措施
- 禁用不安全的协议和密码套件
编辑/etc/ssl/openssl.cnf,在[system_default_sect]中设置:MinProtocol = TLSv1.2 CipherString = HIGH:!aNULL:!MD5 - 定期更新证书
设置cron任务自动更新证书,避免过期。 - 限制访问权限
使用防火墙(如ufw)限制数据库端口(MySQL:3306,PostgreSQL:5432)的访问范围:sudo ufw allow fromto any port 3306 sudo ufw enable
五、参考来源
- MySQL SSL配置:
- PostgreSQL SSL配置:
- OpenSSL基础操作: