MongoDB安全实战之SSL协议加密

邓开表同学实战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

640?wx_fmt=png

4) 合并证书和私钥成PEM文件

cat server.key server.crt > server.pem

5) 验证服务端证书

Openssl verify -CAfile ca.pem server.pem

640?wx_fmt=png


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

640?wx_fmt=png


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选项。

MongoDB安全实战之SSL协议加密_第1张图片


4

4 启动mongod服务并连接mongo shell

mongod --config=/etc/mongod.conf

mongo --ssl --host localhost --sslPEMKeyFile /etc/ssl/client.pem --sslCAFile /etc/ssl/ca.pem

MongoDB安全实战之SSL协议加密_第2张图片

上面可以看到,mongo shell连接时,如果不带任何选项,则报了network error网络错误。这说明MongoDB的客户端的网络通信被阻止了。


猜你喜欢




#大数据和云计算机技术社区#博客精选(2017)

NoSQL 还是 SQL ?这一篇讲清楚

阿里的OceanBase解密

#大数据和云计算技术#: "四有"社区介绍

大数据和云计算技术周报(第19期)

新数仓系列:Hbase周边生态梳理(1)

《大数据架构详解》第2次修订说明

云观察系列:漫谈运营商公有云发展史

云观察系列:百度云的一波三折

云观察系列:阿里云战略观察

超融合方案分析系列(7)思科超融合方案分析

加入技术讨论群




《大数据和云计算技术》社区群人数已经2500+,欢迎大家加下面助手微信,拉大家进群,自由交流。

640?wx_fmt=jpeg

喜欢钉钉扫码下面的群:

640?wx_fmt=jpeg

喜欢QQ群的,可以扫描下面二维码:

640?wx_fmt=jpeg

欢迎大家通过二维码打赏支持技术社区(英雄请留名,社区感谢您,打赏次数超过55+):

640?wx_fmt=jpeg


你可能感兴趣的:(MongoDB安全实战之SSL协议加密)