# 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服務器上了,如下圖所示: