在 Debian 上给 MongoDB 加密,通常分为 三个层面:
1️⃣ 传输加密(TLS/SSL)
2️⃣ 静态加密(Encrypted Storage Engine)
3️⃣ 客户端/应用层加密(字段级)
下面按 生产环境常用方式 给你一个完整说明。
防止数据在网络中被窃听。
sudo apt install openssl
创建 CA 和服务器证书(示例):
# CA
openssl genrsa -out ca.key 2048
openssl req -new -x509 -key ca.key -out ca.crt -days 3650
# 服务器证书
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650
# 合并
cat server.crt server.key > server.pem
编辑 /etc/mongod.conf:
net:
tls:
mode: requireTLS
certificateKeyFile: /etc/ssl/mongo/server.pem
CAFile: /etc/ssl/mongo/ca.crt
重启:
sudo systemctl restart mongod
mongosh --tls --tlsCAFile ca.crt
Enterprise 版支持 WiredTiger 加密。
security:
enableEncryption: true
encryptionKeyFile: /etc/mongod/keyfile
密钥文件权限:
chmod 400 /etc/mongod/keyfile
⚠️ 社区版不支持原生静态加密
# 安装
sudo apt install cryptsetup
# 加密磁盘
cryptsetup luksFormat /dev/sdb
cryptsetup open /dev/sdb mongo_encrypted
mkfs.ext4 /dev/mapper/mongo_encrypted
然后挂载 MongoDB 数据目录。
✅ 优点:简单、安全
❌ 缺点:不能只加密 MongoDB
sudo apt install fscrypt
fscrypt setup
fscrypt encrypt /var/lib/mongodb
适合云服务器。
MongoDB 4.2+ 支持 CSFLE(客户端字段级加密)
示例(Node.js):
const client = new MongoClient(uri, {
autoEncryption: {
kmsProviders: { local: { key: masterKey } },
schemaMap
}
});
✅ 适合金融、医疗、隐私数据
❌ 实现复杂
| 场景 | 推荐方案 |
|---|---|
| 普通业务 | TLS + LUKS |
| 云服务 | TLS + fscrypt |
| 敏感数据 | TLS + 字段级加密 |
| 企业 | Enterprise + TLS |
❌ 社区版不能用 enableEncryption
❌ TLS 证书权限不对会导致 MongoDB 起不来
❌ Keyfile 权限必须是 400 或 600
你可以告诉我:
我可以给你 精确的一步到位配置方案。