Dav*_*man 8 ssl mongodb parse-platform
在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
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
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
Run Code Online (Sandbox Code Playgroud)
服务器日志报告:
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)
Run Code Online (Sandbox Code Playgroud)
因此,这表明客户需要提供证书,但(a)我不知道如何提供证书,而(b)Parse没有提供这样的选项,因此必须有某种方式不这样做.
在此先感谢您的帮助.
关键错误消息是这一个:
no SSL certificate provided by peer; connection rejected
Run Code Online (Sandbox Code Playgroud)
当您在MongoDB上启用TLS/SSL时,MongoDB客户端现在可以通过将MongoDB的TLS/SSL证书(由文件中的PEMKeyFile属性指定mongod.conf)与您提供的公共证书颁发机构证书进行比较来验证MongoDB服务器是否声称是谁.到MongoDB客户端以指示您信任的证书颁发机构.
但我刚才描述的是有时称为单向 TLS,而默认情况下,MongoDB支持双向或相互TLS身份验证.这背后的想法是,MongoDB可能不想接受任何人的客户(公共网站的方式),但也希望对客户端进行身份验证.
在TLS Mutual Auth中,我上面提到的相同证书颁发机构将颁发客户端证书,MongoDB服务器将检查客户端的证书,以确保它确实是由相关证书颁发机构颁发的,并且它是有效的(例如尚未过期).
所以这个错误就是说"嘿,我希望我的客户提供TLS证书,但你没有提出任何东西."
修复它的方法在配置mongod和mongos for TLS/SSL中描述:
如果要绕过不提供证书的客户端的验证,请包含
allowConnectionsWithoutCertificatesmongod和mongos 的运行时选项.如果客户端未提供证书,则不会进行验证.这些连接虽然未经过验证,但仍使用SSL加密.
当然,您也可以在mongod.conf文件中指定:https://docs.mongodb.com/manual/reference/configuration-options/#net.ssl.allowConnectionsWithoutCertificates
我首选的解决方案如下:
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
Run Code Online (Sandbox Code Playgroud)
Exo*_*imp -1
您的命令正在使用 SSL 选项(我假设 Parse 也在做同样的事情),因此您尝试使用 SSL 进行连接。使用 SSL 时客户端必须提供证书。https://docs.mongodb.com/manual/tutorial/configure-ssl-clients/此链接解释了如何执行此操作,还特别提到了您的问题
| 归档时间: |
|
| 查看次数: |
4295 次 |
| 最近记录: |