https://docs.mongodb.com/manual/core/security-transport-encryption/
关于MongoDB 的SSL 配置, 官方文档挺齐全的
win10 64位 安装 OpenSSL-Win64 的安装版, 添加环境变量path
由于文档提供的基本是Linux 的, 网上搜索到的也是Linux 这样的, 自己改成了 windows 的
G:
cd G:\ca
openssl req -newkey rsa:2048 -new -x509 -days 365 -nodes -out mongodb-cert.crt -keyout mongodb-cert.key
copy /b /y mongodb-cert.key+mongodb-cert.crt mongodb.pem
这个是直接使用了CA根证书, 和由key+证书组成的CA服务器证书(mongodb 要求key+cert 合成的pem)
配置文件
net:
port: 27000
bindIp: 127.0.0.1
ssl:
mode: requireSSL
PEMKeyFile: G:\ca\mongodb.pem
CAFile: G:\ca\mongodb-cert.crt
allowInvalidHostnames: true
如果有集群, 加上
security:
authorization: enabled
clusterAuthMode: x509
启动MongoDB 后, 用mongo 客户端连接, 因为是自己建的证书, 所以--sslAllowInvalidCertificates 是必要的
mongo localhost:27000 --ssl --sslPEMKeyFile "G:\ca\mongodb.pem" --sslAllowInvalidCertificates --sslAllowInvalidHostnames
CA证书文本如下,
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCYEWg25ldKZ5Tp
...........省略
eBIOjsRGtKjZPq8DaG5KHw==
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIDVDCCAjygAwIBAgIJALM8IRVGE0GmMA0GCSqGSIb3DQEBCwUAMD8xCzAJBgNV
...........省略
OPmFbgHKYak2prMTuuIDy+xga99usbRnJ7LHOJ6pEQeSHnUYgneEvQ==
-----END CERTIFICATE-----
如果CA证书是这样多了一些其余的文本, 将会报"InvalidSSLConfiguration: CryptDecodeObjectEx failed to get size of object: ASN1", 解决办法就是把所有密钥的密码去掉, 具体方法我另外的博客有写.
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,A81673BE6BAEA8EF
L/MXfOZgse4+D4BmUaI2bGbGf998qF/ijbSm1NklqB7AG1xltyb8SAN1TSX0yZS+
56H9DKIKMuowbXyWAjlaROPrRqQlLIrz+R5PTGzUJuXuD0KmHYe8bZQtnTDEyj3s
使用MongoDB 自带的工具MongoDB Compass 的话, 你只能登陆admin 数据库中的用户, 无法切换到其他数据库, 所以如果使用SSL 的话, 那么Compass 就鸡肋了