mongodb 设置 ssl
# mongodb ssl详细配置
准备:确保openssl可用;
1. #### 生成根证书
```
openssl req -out ca.pem -new -x509 -days 3650 -subj "/C=CN/ST=BeiJing/O=bigdata/CN=root/emailAddress=156*******9@163.com"
#生成需要设置密码
参数说明
-new:表示生成一个新证书签署请求
-x509:专用于CA生成自签证书,如果不是自签证书则不需要此项
-out:证书的保存路径
-days:证书的有效期限,单位是day(天),默认是365天
```
2. #### 生成服务端pem文件
1. 使用rsa加密算法生成一个服务端私钥文件
```
openssl genrsa -out server.key 2048
参数说明
genrsa —— 使用RSA算法产生私钥
out——输出文件的路径
2048——指定私钥长度
```
2. 根据密钥文件生成一个证书申请文件(req)
```
openssl req -key server.key -new -out server.req -subj "/C=CN/ST=BeiJing/O=bigdata/CN=server1/CN=localhost/emailAddress=15617165229@163.com"
参数说明
req——执行证书签发命令
-new——新证书签发请求
-key——指定私钥路径
-out——输出的csr文件的路径
-subj——证书相关的用户信息(subject的缩写)
```
3. 根据证书申请文件生成CA的服务器端证书文件
```
openssl x509 -req -in server.req -CA ca.pem -CAkey privkey.pem -out server.crt -days 3650
参数说明
-CA——指定CA证书的路径
-CAkey——指定CA证书的私钥路径
-CAcreateserial——表示创建证书序列号文件,创建的序列号文件默认名称为-CA,指定的证书名称后加上.srl后缀
#加上 -CAcreateserial file.srl 老报错,所以去掉了
```
4. 合并证书和私钥组成pem文件
```
cat server.key server.crt > server.pem
```
5. 验证服务器端证书,此处可能需要输入密码
```
Openssl verify -CAfile ca.pem server.pem
输出ok即可
```
3. #### 生成客户端pem文件
1. 使用RSA加密算法生成一个客户端私钥文件
```
openssl genrsa -out client.key 2048
```
2. 根据密钥文件生成一个证书申请文件(req)
```
openssl req -key client.key -new -out client.req -subj "/C=CN/ST=BeiJing/O=bigdata/CN=client1/emailAddress=15617165229@163.com"
```
3. 根据证书申请文件生成CA的客户端证书文件:
```
openssl x509 -req -in client.req -CA ca.pem -CAkey privkey.pem -out client.crt -days 3650
```
4. 合并证书及私钥文件成PEM文件
```
cat client.key client.crt > client.pem
```
5. 验证客户端证书
```
openssl verify -CAfile ca.pem client.pem
输出ok即可
```
截止,完成了证书的创建过程
4. #### 配置mongodb的ssl支持
1. 首先需要对mongodb服务器进行设置,这些设置可以在调用mongod启动mongodb服务器时,通过命令行参数进行指定,也可以通过配置文件进行指定,配置文件的默认位置是/usr/local/etc/目录下的mongod.conf。配置内容如下:
```
net:
bindIp: 127.0.0.1
net:
ssl:
mode: requireSSL
PEMKeyFile: /data/mongo_ssl/server.pem
CAFile: /data/mongo_ssl/ca.pem
allowInvalidHostnames: true
```
**注意**
这里PEMKeyFile和CAFile中的文件路径,一定指向我们在上面步骤中生成的文件。
这时我们就可以通过如下命令,启动mongodb:
```
mongod --config /usr/local/etc/mongod.conf
或者
systemctl start mongod
```
2. 设置pem文件所在路径的 mongod 权限
3. 在启动完mongodb数据库后,可以通过如下命令,使用mongo shell连接mongodb数据库:
```
mongo --sslAllowInvalidCertificates --sslAllowInvalidHostnames --ssl --sslPEMKeyFile /data/mongo_ssl/client.pem --sslCAFile /data/mongo_ssl/ca.pem
```
这样我们就可以通过mongo shell连接到本地的mongodb服务器上了,如下图所示: