尝试使用 MongoDB 从解析服务器中保存或检索数据时出现“服务器在没有 SSL 支持的情况下启动”错误
Posted
技术标签:
【中文标题】尝试使用 MongoDB 从解析服务器中保存或检索数据时出现“服务器在没有 SSL 支持的情况下启动”错误【英文标题】:"Server is started without SSL support" error when trying to save or retrieve data from parse server with MongoDB 【发布时间】:2019-02-08 00:18:05 【问题描述】:我正在尝试在我的 ios 移动应用程序中使用本地解析(使用 MongoDB)。 我已经安装了节点、mongo、解析、解析仪表板。我为我的 iOS 项目(XCode)创建了一个 pod 文件,并使用它安装了 parse。我把这段代码放到了 AppDelegate 的应用程序 didFinishLaunchingWithOptions 方法中:
import Parse
Parse.enableLocalDatastore()
let parseConfig = ParseClientConfiguration
$0.applicationId = "XXXXXXXXXX"
$0.clientKey = "YYYYYY"
$0.server = "http://(IP addr):(port)/parse"
Parse.initialize(with: parseConfig)
我正在从终端启动 mongoDB 并且
解析服务器也来自终端:
--appId “XXXXXXXXXX” --clientKey "YYYYYY" --masterKey “ZZZZ” --databaseURI mongodb://localhost/parse
在我的 XCode 应用程序的 viewController 的 viewDidLoad 方法中,我输入了以下代码:
import Parse
let gameScore = PFObject(className:"GameScore")
gameScore["score"] = 1337
gameScore["playerName"] = "Sean Plott"
gameScore["cheatMode"] = false
gameScore.saveInBackground
(success: Bool, error: Error?) in
if (success)
else
print("saveInBackground error: ", error!)
当我运行我的 XCode swift 应用程序时,我收到了这个错误:
[Error]: unauthorized (Code: 0, Version: 1.17.2)
error: Error Domain=Parse Code=0 "unauthorized" UserInfo=error=unauthorized, NSLocalizedDescription=unauthorized, temporary=0
此错误来自 saveInBackground Parse 方法。我也尝试从解析服务器检索数据而不是保存,我得到了同样的错误:
let query = PFQuery(className:"GameScore")
query.whereKey("playerName", equalTo: "Michael Yabuti")
do
let scoreArray = try query.findObjects()
print(scoreArray)
catch
print("findObjects error: ", error)
从我的解析仪表板中,我可以看到服务器正在运行,但我的移动应用程序没有保存任何数据
我从来没有做过这样的事情,请有人给我一些指示可能是什么问题。任何帮助将不胜感激
MongoDB 给了我这个错误:
AssertionException handling request, closing client connection: xxx SSL handshake received but server is started without SSL support
2019-02-13... I NETWORK [initandlisten] connection accepted from x.x.x.x:yyyy
【问题讨论】:
您是否使用解析服务器验证了您的客户端密钥? 在本地执行npm start
时是否遇到任何错误?
@CodeChanger,感谢您的帮助 :) 我没有使用 npm start 来启动解析服务器。您可以在我的问题中找到我用来启动解析服务器的命令:“--appId “XXXXXXXXXX”--clientKey “YYYYYY”--masterKey “ZZZZ”--databaseURI mongodb://localhost/parse” 这就是我开始的方式解析服务器:我 cd 进入节点模块的解析服务器文件夹并从那里运行此命令。之后,我用解析服务器仪表板检查它,它工作正常,解析服务器正在运行,它是可访问的。是的,我使用 clientID 启动解析服务器。
对不起,我不得不在上面使用一些大写字母来使我的信息更容易阅读......因为 *** 不允许我们输入我们的信息:(
当我启动解析服务器和解析仪表板时,我没有收到任何错误,一切似乎都是正确的。即使在启动 MongoDB(首先我启动它)之后,我也没有收到任何错误,只有当我运行我的 XCode 项目时
【参考方案1】:
根据错误消息,我假设您必须在 mongod 上启用 SSL。这可以在启动时使用以下参数完成:--sslMode requireSSL
。执行此操作时,您必须提供带有 --sslPEMKeyFile
的 pem 文件或带有 --sslCertificateSelector
的证书选择器
pem 文件更容易设置。为此,请执行以下操作:
// Create a crt and key file
openssl req -newkey rsa:2048 -new -x509 -days 365 -nodes -out mongodb-cert.crt -keyout mongodb-cert.key
// concat both files to get a pem file
cat mongodb-cert.key mongodb-cert.crt > mongodb.pem
现在您可以使用 SSL 支持启动 mongod:
mongod --sslMode requireSSL --sslPEMKeyFile mongodb.pem <plus any other options>
如何使用SSL配置mongodb在官方教程中有说明:https://docs.mongodb.com/manual/tutorial/configure-ssl/
【讨论】:
谢谢@mbuechmann 我试过了,当我在我的 Mac 上运行终端命令时,一切顺利,没有错误 - 你写道。但是,当我开始我的 XCode 项目时,我遇到了与之前类似的错误:nw_socket_handle_socket_event [C1.1:2] Socket SO_ERROR [61: Connection refused] [Error]: authorized (Code: 0, Version: 1.17.2) Error Domain =Parse Code=0 "未授权" UserInfo=error=unauthorized, NSLocalizedDescription=unauthorized,temporary=0 我在 XCode 中的 swift 代码是正确的,我从 Parse 文档网站复制了整个代码:docs.parseplatform.org/ios/guide 有可能,现在一个问题已经解决了,而您正在处理下一个问题。 mongodb中是否还有其他错误消息?现在看起来您必须在连接到解析服务器时从您的 iOS 应用程序发送凭据。 mongoDB 没有错误。一切看起来都很好。我正在从 iOS 应用程序发送我的凭据。这是我在上面的描述中添加的第一个代码(以 import Parse 和 Parse.enableLocalDatastore() 开头的代码 那么这些凭据不正确。错误消息指出您未获得授权 (unauthorized
)。但这是另一个值得提出另一个问题的问题。以上是关于尝试使用 MongoDB 从解析服务器中保存或检索数据时出现“服务器在没有 SSL 支持的情况下启动”错误的主要内容,如果未能解决你的问题,请参考以下文章
我正在尝试使用 nodejs 从 mongodb 集合中检索数据,但我必须请求两次才能获得正确的信息