繁体   English   中英

Parse + mongodb + SSL:“没有同行提供的SSL证书”

[英]Parse + mongodb + SSL: “no SSL certificate provided by peer”

在Parse的服务器关闭之前迁移它的过程中,我正在尝试在Digital Ocean上设置一个简单的MongoDB实例。 (我使用它而不是mLab,因为我的需求非常有限 - 几MB存储空间,每周几百个请求 - 而且mLab的成本非常高。)

由于本指南使用了Let's Encrypt,我已经运行了mongod,并且已经使用SSL取得了一些进展,但现在我被卡住了。 Parse的迁移工具说,“没有可达的服务器”,如果我尝试在命令行上连接如下:

mongo --ssl -u editAdmin -p "<password-here>" --host mydb.myhost.com dbname

我收到此错误:

MongoDB shell version: 3.2.7
connecting to: mydb.myhost.com:27017/dbname
2016-07-24T10:31:38.814-0700 E QUERY [thread1] Error: network error while attempting to run command 'isMaster' on host 'mydb.myhost.com:27017' :
connect@src/mongo/shell/mongo.js:231:14
@(connect):1:6

exception: connect failed

服务器日志报告:

2016-07-24T13:32:44.357-0400 I NETWORK [initandlisten] connection accepted from 12.345.67.89:33351 #39 (1 connection now open)
2016-07-24T13:32:44.390-0400 E NETWORK [conn39] no SSL certificate provided by peer; connection rejected
2016-07-24T13:32:44.390-0400 I NETWORK [conn39] end connection 12.345.67.89:33351 (0 connections now open)

因此,这表明客户需要提供证书,但(a)我不知道如何提供证书,而(b)Parse没有提供这样的选项,因此必须有某种方式不这样做。

在此先感谢您的帮助。

关键错误消息是这一个:

no SSL certificate provided by peer; connection rejected

当您在MongoDB上启用TLS / SSL时,MongoDB客户端现在可以通过将MongoDB的TLS / SSL证书(由mongod.conf文件中的PEMKeyFile属性指定)与公共证书颁发机构进行比较来验证MongoDB服务器是否是其声称的身份。您提供给MongoDB客户端以指示您信任的证书颁发机构的证书。

但我刚刚描述的有时称为单向 TLS,而默认情况下,MongoDB支持双向相互TLS身份验证 这背后的想法是,MongoDB可能不想接受任何人的客户(公共网站的方式),但也希望对客户端进行身份验证。

在TLS Mutual Auth中,我上面提到的相同证书颁发机构将颁发客户端证书,MongoDB服务器将检查客户端的证书,以确保它确实是由相关证书颁发机构颁发的,并且它是有效的(例如尚未过期)。

所以这个错误就是说“嘿,我希望我的客户提供TLS证书,但你没有提出任何东西。”

修复它的方法在配置mongod和mongos for TLS / SSL中描述

如果要绕过不提供证书的客户端的验证,请在mongod和mongos中包含allowConnectionsWithoutCertificates运行时选项。 如果客户端未提供证书,则不会进行验证。 这些连接虽然未经过验证,但仍使用SSL加密。

当然,您也可以在mongod.conf文件中指定它: httpsmongod.conf

我首选的解决方案如下:

net:
  port: 27017
  bindIp: 172.0.0.1 # Set this to whatever your private IP address is
  ssl:
     mode: "requireSSL"
     PEMKeyFile: "/path/to/tls/private/key"
     CAFile: "/path/to/ca/public/cert"
     disabledProtocols: "TLS1_0,TLS1_1"
     allowConnectionsWithoutCertificates: true # <-- The line to add to your config

您的命令正在使用SSL选项(我假设Parse正在执行相同操作),因此您尝试使用SSL进行连接。 客户端在使用SSL时必须提供证书。 https://docs.mongodb.com/manual/tutorial/configure-ssl-clients/此链接说明了如何执行此操作并特别提及您的问题

只需按照本教程 ,一切都在那里,我知道我肯定是因为我正在关注它,现在我没有任何先前的知识运行parse-server ...我建议你使用没有SSL证书的MongoDB连接,只允许localhost查询它 - 所以只有在同一台机器上运行的解析服务器才能访问这个数据库......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM