2016-10-07 1 views
1

Я пытаюсь подключиться к MongoDB, размещенному на экземпляре AWS с ключевым файлом. Я могу ssh в экземпляр и подключиться к базе данных без проблем. Когда я пытаюсь подключиться к базе данных из удаленного места с помощью pymongo, я получаю эту ошибку: ServerSelectionTimeoutError: SSL handshake failed: EOF occurred in violation of protocolServerSelectionTimeoutError при подключении к aws с pymongo

Порт 27017 открыт, а источник установлен на 0.0.0.0/0.

from pymongo import MongoClient 

client = MongoClient('mongodb://ec2-123-45-678-910.compute-1.amazonaws.com', 
        27017, 
        ssl=True, 
        ssl_keyfile='/path_to/mykey.pem') 

db = client.test 
coll = db.foo 
coll.insert_many(records) 

ServerSelectionTimeoutError: SSL handshake failed: EOF occurred in violation of protocol (_ssl.c:645) 

This вопрос почти идентичен мой, однако ошибка индивидуальна и решение размещено там не относится к моему вопросу.

Адрес и ключ здесь были изменены, я собираюсь в кругах по этому часам без везения, любая помощь будет оценена по достоинству.

+0

ошибка звучит как сервер или клиент не настроен делать SSL, может видеть https://docs.mongodb.com/manual/tutorial/configure-ssl/ – at0mzk

+0

Является ли значение параметра 'ssl_keyfile' значением' pem' для экземпляра машины или для MongoDB? См. [Настройка MongoDB для TLS/SSL] (https://docs.mongodb.com/manual/tutorial/configure-ssl/) –

ответ

1

У меня была та же проблема (SSL-квитирование) с модулем Pymongo для подключения к DocumentDB Azure (база данных).

Ошибка:

ServerSelectionTimeoutError: SSL handshake failed: EOF occurred in violation of protocol (_ssl.c:590)

Я использовал PyMongo == 3.4.0

Чтобы решить эту проблему:

Изменение версии PyMongo путем установки 3.3. 0 версия

pip install pymongo==3.3.0

Try:

import pymongo pymongo.__version__

1

Эта проблема может вызвать из-за следующий вопрос:

1) версия PyMongo (рекомендую использовать 3.3.0, который работал для меня)

2) Это может быть проблема DNS и т. Д., На самом деле вы можете проверить наличие DNS-запроса, используя:

телнет xx.xx.xx.xx порт

3) может быть вопрос брандмауэра

4) Может быть проблема с ключом Ssl. Попробуйте следующее испытание:

импорт зева

импорт PyMongo

импорт Ssl

URL = "URL: порт/дб = Ssl истинный"

клиента = pymongo.MongoClient (URL, ssl_cert_reqs = ssl.CERT_NONE)

db = клиент.get_default_database()

печати дБ

печати db.collection_names()