環境說明
- Mongodb 3.4 docker容器
配置步驟
服務器端證書配置
服務器端證書配置
服務器端需兩個文件: ca.pem
、server.pem
生成ca.pem
$ openssl req -out ca.pem -new -x509 -days 3650
# 此處會要求配置ca.pem密碼,後續將會用到
參數說明
-x509: 用於生成自簽證書,如果不是自簽證書則不需要此項
-days: 證書的有效期限,默認是365天
生成server.pem
# 生成服務器端私鑰
$ openssl genrsa -out server.key 2048
# 生成服務器端申請文件
$ openssl req -key server.key -new -out server.req
# 生成服務器端證書
$ openssl x509 -req -in server.req -CA ca.pem -CAkey privkey.pem -CAcreateserial -out server.crt -days 3650
# 合併服務器端私鑰和服務器端證書,生成server.pem
$ cat server.key server.crt > server.pem
# 校驗服務器端pem文件
$ openssl verify -CAfile ca.pem server.pem
server.pem: OK
服務器端配置
修改配置文件
mongodb的ssl配置默認是關閉的,需更改配置文件進行開啓
$ vi mongod.conf
net:
# port: 27017
# bindIp: 127.0.0.1
ssl:
# 必須使用ssl連接
mode: requireSSL
# 必須使用絕對路徑
PEMKeyFile: /etc/server.pem
# 必須使用絕對路徑
CAFile: /etc/ca.pem
# 允許不可用主機名
allowInvalidHostnames: true
# 允許使用自簽證書,如果使用自簽證書必須配置該項,否則會認證失敗
allowInvalidCertificates: true
啓動MongoDB數據庫
$ docker run --name mongo_test -d --restart always \
-p 27018:27017 \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=root \
-v /data/mongo/mongod.conf:/etc/mongod.conf \
-v /data/mongo/ca.pem:/etc/ca.pem \
-v /data/mongo/server.pem:/etc/server.pem \
mongo:3.4 --auth --master --config /etc/mongod.conf
客戶端證書配置
生成client.pem
# 生成客戶端私鑰
$ openssl genrsa -out client.key 2048
# 生成客戶端申請文件
$ openssl req -key client.key -new -out client.req
# 生成客戶端證書
$ openssl x509 -req -in client.req -CA ca.pem -CAkey privkey.pem -CAserial ca.srl -out client.crt -days 3650
# 合併客戶端私鑰和客戶端證書,生成client.pem
$ cat client.key client.crt > client.pem
# 校驗客戶端pem文件
$ openssl verify -CAfile ca.pem client.pem
client.pem: OK
測試連接
將ca.pem
和client.pem
拷貝到客戶端主機,然後用navicat測試連接