@[TOC](mongodb生成自签名证书以及配置SSL(亲测有效) 版本-5.0.6
一直以来都是向大神学习,今天也做回大神分享,哈哈!!几个小时的努力不算白费。
一、自签名证书生成
1、生成根证书ca.pem
1、生成CA私钥(ca.key)(不加密)
openssl genrsa -out ca.key 2048
2、生成CA证书签名请求(ca.csr)
openssl req -new -key ca.key -out ca.csr
![在这里插入图片描述](https://img-blog.csdnimg.cn/601d45357d6e417ab1f903d40eec7111.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASGFwcHlMZWFybmVyTA==,size_16,color_FFFFFF,t_70,g_se,x_16)
3、生成自签名CA证书(ca.pem), 直接100年有效, 免费白嫖
openssl x509 -req -days 36500 -in ca.csr -signkey ca.key -out ca.pem
到此我们的根证书已经生成完成。
2、生成服务器端PEM文件
1、生成server私钥(server.key)(不加密)
openssl genrsa -out server.key 2048
2、生成server证书签名请求(server.csr)
openssl req -new -key server.key -out server.csr
输入内容和上图保持一致
3、使用ca证书签署服务端csr以生成服务端证书(server.cert)
openssl ca -days 36500 -in server.csr -out server.crt -cert ca.pem -keyfile ca.key
出现以下错误时,touch /etc/pki/CA/index.txt
![在这里插入图片描述](https://img-blog.csdnimg.cn/2083151dcc5d419d883affef6b037cae.png)
出现以下错误时执行:touch /etc/pki/CA/serial echo 01 > /etc/pki/CA/serial
![在这里插入图片描述](https://img-blog.csdnimg.cn/c702210f4cf547308ae789d2a5da89ab.png)
解决完错误之后再次对证书进行签名如下图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/51cb49d6aaf2404e86fa1bca015e49f0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASGFwcHlMZWFybmVyTA==,size_20,color_FFFFFF,t_70,g_se,x_16)
4、删掉server.crt中的certificate信息
![在这里插入图片描述](https://img-blog.csdnimg.cn/959752763e254de4b590d71b95dc1a16.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASGFwcHlMZWFybmVyTA==,size_20,color_FFFFFF,t_70,g_se,x_16)
5、合并证书和私钥成PEM文件 ,构建命令如下:
cat server.key server.crt > server.pem
3、验证自签名证书是否成功
1、openssl verify -CAfile ca.pem server.pem
![在这里插入图片描述](https://img-blog.csdnimg.cn/e9d1f59ffa754b61bda79f4d34f71e20.png)
二 、mongodb SSL配置
1、将生成的ca.pem和server.pem放置到mongodb的目录下
![在这里插入图片描述](https://img-blog.csdnimg.cn/38660e5c3c3642c2880edbbaeab77d68.png)
2、mongd.conf ssl 相关配置
![在这里插入图片描述](https://img-blog.csdnimg.cn/606a56f0940c4d8da3c577a02195a78b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASGFwcHlMZWFybmVyTA==,size_14,color_FFFFFF,t_70,g_se,x_16)
3、重新启动mongo服务
/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongod.conf![在这里插入图片描述](https://img-blog.csdnimg.cn/1886b3cd2f844338aab13024f63229ed.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASGFwcHlMZWFybmVyTA==,size_20,color_FFFFFF,t_70,g_se,x_16)
出现以上警告,不想改可忽略,主要是说配置中使用的变量不要用了,mongo高版本不适用这些参数
可进行修改,修改方法如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/8fced858b12743f7ae98e3fe6b706cf9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASGFwcHlMZWFybmVyTA==,size_13,color_FFFFFF,t_70,g_se,x_16)
改完重新启动服务,先杀掉原先服务再启动
![在这里插入图片描述](https://img-blog.csdnimg.cn/87f5edebd2f04b0181f5a21460b87971.png)
如下图启动服务成功:
![在这里插入图片描述](https://img-blog.csdnimg.cn/cada5121c7764e3eb7f44bb6112a131b.png)
三、通过客户端连接服务器
1、连接命令如下:
./mongo --tls --tlsAllowInvalidCertificates --host 127.0.0.1 --port 28017![在这里插入图片描述](https://img-blog.csdnimg.cn/de7f5c9b65494954a2b5de1f088c0697.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASGFwcHlMZWFybmVyTA==,size_20,color_FFFFFF,t_70,g_se,x_16)
2、数据库初始化,设置为主模式
rs.initiate()
![在这里插入图片描述](https://img-blog.csdnimg.cn/bc675ed3bd114ac29c597488f8d7ef6d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASGFwcHlMZWFybmVyTA==,size_18,color_FFFFFF,t_70,g_se,x_16)
退出mongo服务可以使用 exit 命令
致此,mongo数据库ssl配置成功。
四、mongodb 数据库集群搭建
1、制作cluster证书:如上述制作server证书一样
最终命名为cluster.pem
2、复制mongo文件两份,分别为mongodb1、mongodb2
![在这里插入图片描述](https://img-blog.csdnimg.cn/ac71b28fc9f049f2bccf97cb0dd38bb3.png)
3、按下图分别修改配置文件
/usr/local/mongodb/conf/mongod.conf
/usr/local/mongodb1/conf/mongod.conf
/usr/local/mongodb2/conf/mongod.conf
由于只有一台设备:使用三个端口:28017、28018、28019
![在这里插入图片描述](https://img-blog.csdnimg.cn/aa4c3ebb5d3e41bc8f5099d5dd87cbd1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASGFwcHlMZWFybmVyTA==,size_15,color_FFFFFF,t_70,g_se,x_16)
4、启动mongo,mongo1 和mongo2服务
**注意:第三步骤完成之后,需要将mongo服务全部杀掉, 执行
rm -rf /usr/local/mongo/data/*
rm -rf /usr/local/mongo1/data/*
rm -rf /usr/local/mongo2/data/* **
**作用:清除之前数据,为集群起动做准备,不清除数据会导致集群添加失败。**
起动mongo三个服务
![在这里插入图片描述](https://img-blog.csdnimg.cn/0b88612eee3b42ec975063dc5c5a5fbb.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASGFwcHlMZWFybmVyTA==,size_20,color_FFFFFF,t_70,g_se,x_16)
服务启动完成,如下图
![在这里插入图片描述](https://img-blog.csdnimg.cn/950a1cb67ace4b8f8096d676853546ea.png)
4、将mongodb1和mongodb2加入集群
![在这里插入图片描述](https://img-blog.csdnimg.cn/85c9f22a06a44d65a30e67860f57a849.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASGFwcHlMZWFybmVyTA==,size_20,color_FFFFFF,t_70,g_se,x_16)
执行结果如下图所示:
连接主节点mongodb, 进入/usr/local/mongodb/bin目录, 执行
./mongo --tls --tlsAllowInvalidCertificates --host 127.0.0.1 --port 28017
rs.initiate() ,
rs.add(“”)
![在这里插入图片描述](https://img-blog.csdnimg.cn/a804204715b944019c0a03b1dd92be96.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASGFwcHlMZWFybmVyTA==,size_19,color_FFFFFF,t_70,g_se,x_16)
5、查看集群信息
rs.status() //用于查看集群信息
![在这里插入图片描述](https://img-blog.csdnimg.cn/1a0b1cccf20946c9b06f67643712f088.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASGFwcHlMZWFybmVyTA==,size_20,color_FFFFFF,t_70,g_se,x_16)
五、配置mongo数据库授权用户
参看如下链接:
mongoDB创建用户名密码登录和其他一些设置
mongodb用户权限管理最全攻略:用户的创建、查看、删除与修改,mongodb入坑之旅
六,验证复制集
1、主节点写入,从节点读
使用db.test.find() 从节点读数据时会报错如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/d330e8c18c134847a89066f4f54f641e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASGFwcHlMZWFybmVyTA==,size_17,color_FFFFFF,t_70,g_se,x_16)
**解决办法:**执行 rs.slaveOk() (高版本被丢弃),或者执行 rs.secondaryOk(), 意思是允许从节点读
2、主节点写入数据
db.test.insert({“a”:“2”})
主节点写入数据成功
![在这里插入图片描述](https://img-blog.csdnimg.cn/54f1b2f6a85341bebdd79a0fed06b847.png)
db.test.find()
从节点读取数据成功
![在这里插入图片描述](https://img-blog.csdnimg.cn/481c1e50b939414896f62b0c144bd941.png)
将命令行转换成配置文件命令
例子: ./mongod --tlsCRLFile TT --outputConfig
![在这里插入图片描述](https://img-blog.csdnimg.cn/30e4c12e791a442ca6671c40a6b21955.png)
Mongodb 参考手册
mongodb英文参考手册
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)