Ошибка «Сервер запущен без поддержки SSL» при попытке сохранить или получить данные с сервера разбора с помощью MongoDB - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь использовать синтаксический анализ локально (с MongoDB) с моим мобильным приложением для iOS.Я установил узел, монго, разбор, панель разбора.Я создал файл pod для своего проекта iOS (XCode), установил его разбор.Я вставил этот код в приложение didFinishLaunchingWithOptions метода AppDelegate:

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метод viewDidLoad приложения viewController Я положил этот код:

      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

1 Ответ

0 голосов
/ 15 февраля 2019

Из сообщения об ошибке я бы предположил, что вы должны включить SSL на Mongod.Это можно сделать при запуске со следующим аргументом: --sslMode requireSSL.Когда вы это сделаете, вы должны либо предоставить pem-файл с --sslPEMKeyFile, либо селектор сертификатов с --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

Теперь вы можете запустить mongod с поддержкой SSL:

mongod --sslMode requireSSL --sslPEMKeyFile mongodb.pem <plus any other options>

Как настроить mongodb с SSL, описано в официальном руководстве: https://docs.mongodb.com/manual/tutorial/configure-ssl/

...