MongoDB(75)如何配置TLS/SSL加密?

配置 MongoDB 的 TLS/SSL 加密可以提高数据传输的安全性,防止数据在传输过程中被截获和篡改。以下是详细的步骤,展示如何在 MongoDB 中配置 TLS/SSL 加密。

步骤 1:生成 TLS/SSL 证书

1.1 生成自签名证书

首先,使用 OpenSSL 生成一个自签名的 TLS/SSL 证书。

bash 复制代码
# 创建一个私钥
openssl genrsa -out mongodb-key.pem 2048

# 创建一个证书签名请求 (CSR)
openssl req -new -key mongodb-key.pem -out mongodb.csr

# 生成自签名的证书,有效期为 365 天
openssl x509 -req -in mongodb.csr -signkey mongodb-key.pem -out mongodb-cert.pem -days 365

# 合并私钥和证书到一个文件中
cat mongodb-key.pem mongodb-cert.pem > mongodb.pem

# 清理中间文件
rm mongodb-key.pem mongodb.csr mongodb-cert.pem

这将在当前目录生成一个 mongodb.pem 文件,其中包含私钥和自签名证书。

1.2 使用证书颁发机构(CA)签名的证书

如果你有权访问 CA,可以使用以下命令生成 CSR 并提交给 CA:

bash 复制代码
# 生成私钥
openssl genrsa -out mongodb-key.pem 2048

# 生成证书签名请求 (CSR)
openssl req -new -key mongodb-key.pem -out mongodb.csr

# 提交 CSR 给 CA 并获取签名证书 (mongodb-cert.pem)

将私钥和 CA 签名的证书合并到一个文件中:

bash 复制代码
cat mongodb-key.pem mongodb-cert.pem > mongodb.pem

步骤 2:配置 MongoDB 使用 TLS/SSL

编辑 MongoDB 的配置文件 mongod.conf,添加 TLS/SSL 配置项:

yaml 复制代码
net:
  port: 27017
  tls:
    mode: requireTLS
    certificateKeyFile: /path/to/mongodb.pem
    CAFile: /path/to/ca.pem  # 如果使用自签名证书,此项可能不需要

将 /path/to/mongodb.pem 替换为实际的证书文件路径。如果使用 CA 签名的证书,需要提供 CA 的证书文件路径。

重启 MongoDB 服务以应用配置更改:

bash 复制代码
sudo systemctl restart mongod

步骤 3:配置 MongoDB 客户端使用 TLS/SSL

3.1 使用 MongoDB Shell 连接

使用 mongo 客户端连接时,需要指定 --tls 相关的参数:

bash 复制代码
mongo --host <hostname> --port 27017 --tls --tlsCertificateKeyFile /path/to/mongodb.pem

如果使用 CA 签名的证书,还需要指定 CA 文件:

bash 复制代码
mongo --host <hostname> --port 27017 --tls --tlsCertificateKeyFile /path/to/mongodb.pem --tlsCAFile /path/to/ca.pem
3.2 使用 MongoDB 驱动连接

在 MongoDB 驱动中,TLS/SSL 配置通常是作为连接字符串的选项提供的。例如,在 Python 的 PyMongo 驱动中,可以这样配置:

python 复制代码
from pymongo import MongoClient

client = MongoClient(
    'mongodb://<hostname>:27017/',
    tls=True,
    tlsCertificateKeyFile='/path/to/mongodb.pem',
    tlsCAFile='/path/to/ca.pem'  # 如果使用 CA 签名的证书
)

在 Node.js 的 MongoDB 驱动中,可以这样配置:

javascript 复制代码
const { MongoClient } = require('mongodb');

const client = new MongoClient('mongodb://<hostname>:27017', {
  tls: true,
  tlsCertificateKeyFile: '/path/to/mongodb.pem',
  tlsCAFile: '/path/to/ca.pem'  // 如果使用 CA 签名的证书
});

client.connect(err => {
  if (err) {
    console.error('Failed to connect to MongoDB:', err);
  } else {
    console.log('Connected to MongoDB');
  }
});

完整示例脚本

以下是一个完整的示例脚本,展示了如何生成证书、配置 MongoDB 和客户端连接:

bash 复制代码
#!/bin/bash

# 生成自签名证书
openssl genrsa -out mongodb-key.pem 2048
openssl req -new -key mongodb-key.pem -out mongodb.csr
openssl x509 -req -in mongodb.csr -signkey mongodb-key.pem -out mongodb-cert.pem -days 365
cat mongodb-key.pem mongodb-cert.pem > mongodb.pem

# 移动证书文件到适当位置
sudo mv mongodb.pem /etc/ssl/mongodb.pem

# 编辑 MongoDB 配置文件
sudo tee -a /etc/mongod.conf > /dev/null <<EOT
net:
  port: 27017
  tls:
    mode: requireTLS
    certificateKeyFile: /etc/ssl/mongodb.pem
EOT

# 重启 MongoDB 服务
sudo systemctl restart mongod

# 客户端连接示例
mongo --host localhost --port 27017 --tls --tlsCertificateKeyFile /etc/ssl/mongodb.pem

总结

通过上述步骤,可以在 MongoDB 中配置 TLS/SSL 加密,确保数据在传输过程中得到了加密保护。这个配置包括生成证书、配置 MongoDB 使用 TLS/SSL 以及客户端连接配置。注意,建议在生产环境中使用由受信任的 CA 签名的证书,以确保更高的安全性和兼容性。

相关推荐
ClickHouseDB6 小时前
ClickHouse Cloud 与 Snowflake 实时性价比对比:CostBench 测试中的 412 倍差距来
运维·数据库·系统架构
m0_639906946 小时前
Redis入门|五种数据结构、使用场景、持久化RDB&AOF
数据结构·数据库·redis
时间售卖铺7 小时前
触发器与函数实战:MySQL高效编程秘诀
运维·数据库·mysql·云原生
qetfw7 小时前
UOS MariaDB 数据库:安装、最小权限与备份验证
linux·数据库·mariadb·uos
数智园区合作社8 小时前
问数平台怎么把同一个指标锁成一个数
大数据·数据库·人工智能·ai
lbb 小魔仙9 小时前
Windows搭建PaddleOCR+飞书Webhook自动打卡通知机器人:识别、推送与远程触发完整教程
数据库·人工智能·prometheus·时序数据库
captain37610 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis
心中有你021410 小时前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法
龙亘川10 小时前
综合素质评价业务建模:从过程性评价到成长档案全链路闭环
数据库·智慧城市·数据可视化
数据库小组11 小时前
NineData 实战教程:MySQL 5.5 数据迁移同步到 MySQL 8.0(跨版本升级)
数据库·mysql·mysql优化·数据库开发·数据库迁移·版本升级·数据复制