node.js - 如何通过将所有选项放在 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`
解决方案
您需要确保服务器和客户端都可以验证彼此的证书。这两个验证是独立的并且使用不同的选项。
服务器端见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* 选项采用文件路径而不是文件内容。
推荐阅读
- git - VimDiff E93:RE 不止一场比赛
- .net - .NET 是否支持 TLS-PSK 密码套件?
- postgresql - PL/pgsql 在查询中动态转换 regclass 的正确方法
- javascript - 使用 Webpack 和 svgr 加载器在 .scss 中加载 SVG
- python - 仅使用一个 Window 函数生成组 ID
- c++ - 如何调用处理程序?
- python - 无效的 HTTP_HOST 标头:'*.*.*.*:8000'。您可能需要将 '*.*.*.*' 添加到 ALLOWED_HOSTS
- intershop - 在 Intershop 7 中处理 pipelets 中的会话参数
- crashlytics - Fabric 初始部署
- google-bigquery - Google BigQuery 的 PostGIS 可用性