首页 > 解决方案 > 如何通过将所有选项放在 mongodb 的 node.js 驱动程序中的连接字符串中来连接 X509?

问题描述

我正在使用mongodb 文档中可用的密钥来获取 使用 X509 身份验证和 Node.js 驱动程序的自签名证书。

尝试连接数据库时出现以下错误:

MongoNetworkError: failed to connect to server [pedro.com:57040] on first connect [MongoNetworkError: unable to verify the first certificate]

尽管有这个错误,但我确信连接在我使用 Studio 3T 时可以正常工作,并且使用相同的证书可以正常运行。

所以我的问题是......如何通过在连接字符串中写入所有选项以编程方式使用 x509 证书连接到数据库?也许我给的钥匙是错的?还是有些遗漏了?

db: `mongodb://CN=pedro.com,OU=IT,O=Polygon,L=Setubal,ST=Setubal,C=PT@pedro.com:57040,pedro.com:57041
,pedro.com:57042/testBO?
ssl=true&authMechanism=MONGODB-X509
&sslPEMKeyFile=${fs.readFileSync(
        `${Helpers.appRoot(Env.get('DB_SSL_CERT'))}`
      )}
&sslCAFile=${fs.readFileSync(
        `${Helpers.appRoot(Env.get('DB_SSL_CA'))}`
      )}&replicaSet=testReplica`

标签: node.jsmongodbconnection-stringx509adonis.js

解决方案


您需要确保服务器和客户端都可以验证彼此的证书。这两个验证是独立的并且使用不同的选项。

服务器端见https://github.com/mongodb/mongo-ruby-driver/blob/master/.evergreen/run-tests.sh#L74,客户端见https://github.com/mongodb/mongo -ruby-driver/blob/master/.evergreen/run-tests.sh#L91。URI 选项是跨驱动程序标准化的。

另请参阅https://github.com/mongodb/mongo-ruby-driver/blob/master/spec/README.md#x509-authentication

sslPEMKeyFile是遗留节点驱动程序选项(假设它有效),tls* 选项采用文件路径而不是文件内容。


推荐阅读