我正在使用 nodejs mongodb 驱动程序连接到自签名的 mongodb 实例。MongoDB 和 Mongo Shell 版本是 4.0.0。以下是启动自签名 mongodb 实例的命令:
mongod --port 27018 --sslMode requireSSL --sslPEMKeyFile mongodb.pem --dbpath data
当我使用 mongo shell 连接到此服务器时,我可以使用以下命令而不使用 pem 文件:
mongo --port 27018 --ssl --sslAllowInvalidCertificates
我想知道 PEM 文件在连接中的用途。
根据此处的 MongoDB 文档,在使用 TLS/SSL 之前,您必须拥有一个包含公钥证书及其关联私钥的 .pem 文件。
MongoDB 可以使用任何由证书颁发机构颁发的有效 TLS/SSL 证书,或自签名证书。如果您使用自签名证书,尽管通信通道将被加密,但不会验证服务器身份。尽管这种情况可以防止窃听连接,但它会使您容易受到中间人攻击。使用由受信任的证书颁发机构签名的证书将允许 MongoDB 驱动程序验证服务器的身份。
通常,除非网络受信任,否则应避免使用自签名证书。
此操作会生成一个新的自签名证书,没有密码,有效期为 365 天。获得证书后,将证书和私钥连接到 .pem 文件,如下例所示:
供您进一步参考
我知道这是一个老问题,但以防万一这有助于其他人偶然发现这个页面寻找像我一样的东西:
PEM 文件是为服务器提供一种方法来为任何请求它的客户端证明其身份的。它将基本上确保任何客户端的安全连接。在生产环境中,会有一个适当的证书,而不是自签名证书。如果您注意到,当您
--sslAllowInvalidCertificates
从连接字符串中删除标志时,您将收到以下自签名证书的错误消息:该
--sslAllowInvalidCertificates
标志是作为测试/开发环境的解决方法给出的。从技术上讲,即使连接到生产环境,客户端也可以使用它。但在这种情况下,丢失的只是客户端,因为流氓元素可能冒充服务器,并且使用此标志,客户端将无法验证服务器的身份。因此,仅当您绝对确定您仅连接到正确的服务器时,才应使用此标志。在您的示例中,您确定。但如果你不是,并且你想确保服务器真的是它所说的那样,那么 PEM 就会出现。