传输层加密用于保护客户端与MongoDB服务器之间的通信,防止数据在传输过程中被窃取或篡改。
使用OpenSSL生成自签名证书(生产环境建议使用CA颁发的证书):
sudo mkdir -p /etc/ssl/mongodb
sudo openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 \
-keyout /etc/ssl/mongodb/mongodb-key.pem \
-out /etc/ssl/mongodb/mongodb-cert.pem
按提示输入证书信息(如国家、组织、域名等),生成后会得到mongodb-key.pem(私钥)和mongodb-cert.pem(证书)文件。
编辑MongoDB主配置文件(通常位于/etc/mongod.conf),在net section添加以下内容:
net:
ssl:
mode: requireSSL # 强制要求SSL连接
PEMKeyFile: /etc/ssl/mongodb/mongodb-key.pem # 私钥路径
CAFile: /etc/ssl/mongodb/mongodb-cert.pem # 证书路径(自签名时可不填,CA证书需填写)
应用配置变更:
sudo systemctl restart mongod
使用mongo shell测试SSL连接(需指定证书路径):
mongo --ssl --sslCAFile /etc/ssl/mongodb/mongodb-cert.pem --sslPEMKeyFile /etc/ssl/mongodb/mongodb-key.pem
若连接成功,会进入MongoDB shell提示符,说明SSL配置生效。
存储层加密用于加密MongoDB存储的数据文件,即使物理磁盘被盗,数据也无法直接读取。
创建用于加密的密钥文件(需保证密钥安全,丢失则无法恢复数据):
sudo openssl rand -base64 756 > /etc/mongodb-encryption/encryptionKey.json
sudo chmod 400 /etc/mongodb-encryption/encryptionKey.json # 限制仅root可读
sudo chown mongodb:mongodb /etc/mongodb-encryption/encryptionKey.json # 归属MongoDB用户
编辑/etc/mongod.conf,在security和storage section添加以下配置:
security:
authorization: enabled # 必须启用身份验证
keyFile: /etc/mongodb-encryption/encryptionKey.json # 密钥文件路径
storage:
dbPath: /var/lib/mongodb # 数据目录(默认路径)
engine: wiredTiger # 使用WiredTiger存储引擎(支持TDE)
wiredTiger:
engineConfig:
journalCompressor: snappy
collectionConfig:
blockCompressor: snappy
encryption:
mode: xfs # 加密模式(xfs/ext4)
keyFile: /etc/mongodb-encryption/encryptionKey.json # 密钥文件路径
应用存储层加密配置:
sudo systemctl restart mongod
连接到MongoDB shell,执行以下命令查看加密状态:
mongosh --ssl --sslCAFile /etc/ssl/mongodb/mongodb-cert.pem --sslPEMKeyFile /etc/ssl/mongodb/mongodb-key.pem
在shell中输入:
db.runCommand({ getParameter: 1, encryptionCipherMode: 1 })
若返回结果中encryptionCipherMode显示为xfs(或ext4),说明TDE加密已成功启用。
mongodump的--ssl和--gzip选项结合加密工具)。通过以上步骤,可在Debian系统上为MongoDB实现传输层和存储层的双重加密,提升数据安全性。