如何通过将所有选项放入 node.js 驱动程序 mongodb 的连接字符串中来连接 X509?

How can I connect with X509 by putting all options in the connection string in node.js driver for mongodb?

我正在使用 mongodb docs 中可用的密钥 对于使用 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`

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

对于服务器端,请参阅 https://github.com/mongodb/mongo-ruby-driver/blob/master/.evergreen/run-tests.sh#L74, for client side see 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* 选项采用文件路径而不是文件内容。