邓开表同学实战MongoDB系列文章,非常不错,赞!大力推荐!
本文主要讲述MongoDB的SSL协议加密的使用和配置的实战经验,非常值得一看。
前面系列文章:
MongoDB安全实战之Kerberos认证
MongoDB Compass--MongoDB DBA必备的管理工具
MongoDB安全实战之审计
1
1、前言
加密就是将普通文本——所谓“明文”——转变为无法直接阅读的形式——所谓“密文”的过程。而要实现加密,以下两者缺一不可:加密算法和加密密钥(key)。抽象地说,加密的过程就是以明文作为加密算法的输入,同时结合预先设置的密钥,输出所期待的密文。
2
2 传输层加密
MongoDB支持TLS/SSL(传输层安全性/安全套接字层)协议加密所有的MongoDB的网络通信。TLS/SSL确保了MongoDB的网络通信仅可读由预定的客户端。
2.1
2.1 TLS/SSL协议
在今天SSL协议上,公开密钥和对称密钥加密结合使用。SSL是Internet上数据安全传输事实上的标准加密机制。MongoDB使用OpenSSL库来实现TLS/SSL协议加密。MongoDB的SSL加密,只允许使用强大的SSL密码至少128位密钥长度对应所有连接。
2.2
2.2 证书
证书颁发机构
在生产环境下,MongoDB应使用有效证书的生成和由一个单一的认证机构签名。
生成pem文件
在使用SSL之前,必须有一个包含公钥证书及其相关私钥的PEM文件。
MongoDB可以使用任何有效的SSL证书由证书颁发机构颁发的证书或自签名证书。如果使用自签名证书,虽然通信通道将被加密,但是不会验证服务器标识。虽然这种情况会阻止窃听的连接,它会让容易受到中间人攻击。使用由受信任的证书颁发机构签署的证书将允许MongoDB驱动验证服务器的身份。
2.2.1 生成ca.pem及privkey.pem文件
cd /etc/ssl
openssl req -out ca.pem -new -x509 -days 3650 -subj “/C=CN/ST=/BeiJing/O=bigdata/CN=root/[email protected]”
2.2.2生成服务端PEM文件:
1) 使用RSA加密算法生成一个服务端私钥文件
openssl genrsa -out server.key 2048
2) 根据密钥文件生成一个证书申请文件
openssl req -key server.key -new -out server.req -subj “/C=CN/ST=BeiJing/O=bigdata/CN=server1/CN=localhost/[email protected]”
3) 根据证书申请文件生成CA的服务端证书文件
openssl x509 -req -in server.req -CA ca.pem -CAkey privkey.pem -CAserial file.srl -out server.crt -days 3650
4) 合并证书和私钥成PEM文件
cat server.key server.crt > server.pem
5) 验证服务端证书
Openssl verify -CAfile ca.pem server.pem
2.2.3 生成客户端PEM文件:
1) 使用RSA加密算法生成一个客户端私钥文件
openssl genrsa -out client.key 2048
2) 根据密钥文件生成一个证书申请文件
openssl req -key client.key -new -out client.req -subj "/C=CN/ST=BeiJing/O=bigdata/CN=client1/[email protected]"
3) 根据证书申请文件生成CA的客户端证书文件
openssl x509 -req -in client.req -CA ca.pem -CAkey privkey.pem -CAserial file.srl -out client.crt -days 3650
4) 合并证书及私钥文件成PEM文件
cat client.key client.crt > client.pem
5) 验证客户端证书
openssl verify -CAfile ca.pem client.pem
3
3 设置mongod服务的SSL支持
在MongoDB部署使用SSL时,需要配置以下启动项:
·--sslMode 设置成requiressl。此设置限制每个服务器只使用SSL加密连接。你也可以指定的值allowssl或preferssl建立混合模式使用SSL端口。
·--sslPEMKeyFile 使用包含SSL证书和密钥的PEM文件。
语法格式:
mongod --sslMode requireSSL --sslPEMKeyFile /etc/ssl/mongodb.pem
或者,在配置文件中添加以下配置:
net:
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongodb.pem
连接mongod服务和mongos路由服务器使用SSL,Mongo shell和MongoDB的工具必须包括SSL选项。
4
4 启动mongod服务并连接mongo shell
mongod --config=/etc/mongod.conf
mongo --ssl --host localhost --sslPEMKeyFile /etc/ssl/client.pem --sslCAFile /etc/ssl/ca.pem
上面可以看到,mongo shell连接时,如果不带任何选项,则报了network error网络错误。这说明MongoDB的客户端的网络通信被阻止了。
猜你喜欢
#大数据和云计算机技术社区#博客精选(2017)
NoSQL 还是 SQL ?这一篇讲清楚
阿里的OceanBase解密
#大数据和云计算技术#: "四有"社区介绍
大数据和云计算技术周报(第19期)
新数仓系列:Hbase周边生态梳理(1)
《大数据架构详解》第2次修订说明
云观察系列:漫谈运营商公有云发展史
云观察系列:百度云的一波三折
云观察系列:阿里云战略观察
超融合方案分析系列(7)思科超融合方案分析
加入技术讨论群
《大数据和云计算技术》社区群人数已经2500+,欢迎大家加下面助手微信,拉大家进群,自由交流。
喜欢钉钉扫码下面的群:
喜欢QQ群的,可以扫描下面二维码:
欢迎大家通过二维码打赏支持技术社区(英雄请留名,社区感谢您,打赏次数超过55+):