使用pymongo连接到aws时的ServerSelectionTimeoutError

时间:2016-10-07 23:19:20

标签: python mongodb amazon-web-services ssl pymongo

我正在尝试使用密钥文件连接到AWS实例上托管的MongoDB。我能够ssh到实例并连接到数据库没有问题。当我尝试使用pymongo从远程位置连接到数据库时,我收到此错误:  ServerSelectionTimeoutError: SSL handshake failed: EOF occurred in violation of protocol

端口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问题几乎与我的问题完全相同,但错误不同,此处发布的解决方案不适用于我的问题。

这里的地址和密钥已经更改,我已经在这里圈了几个小时没有运气,任何帮助都将不胜感激。

5 个答案:

答案 0 :(得分:3)

由于以下问题,此问题可能会导致:

1)pymongo的版本(建议使用3.3.0,这对我有用)

2)它可能是DNS问题等,实际上您可以使用以下方法检查DNS问题:

telnet xx.xx.xx.xx port

3)可能是防火墙问题

4)ssl key可能存在问题。请尝试以下方法进行测试:

导入os

导入pymongo

导入ssl

URL = “URL:端口/分贝SSL =真”

client = pymongo.MongoClient(URL,ssl_cert_reqs = ssl.CERT_NONE)

db = client.get_default_database()

打印数据库

print db.collection_names()

答案 1 :(得分:2)

我与Pymongo模块有相同的问题(SSL握手)连接到DocumentDB Azure(数据库)。

错误:

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

我使用的是pymongo == 3.4.0

解决此问题:

通过安装3.3.0版本

更改pymongo的版本

pip install pymongo==3.3.0

<强>尝试:

import pymongo pymongo.__version__

答案 2 :(得分:1)

对我来说,问题是我的Python设置只支持TLS 1.0 - 而不是TLS 1.1或更高版本。

您可以这样检查:

Python 3

> from urllib.request import urlopen
> urlopen('https://www.howsmyssl.com/a/check').read()

Python 2

> from urllib2 import urlopen
> urlopen('https://www.howsmyssl.com/a/check').read()

检查键tls_version的输出。如果它显示TLS 1.0而不是TLS 1.1TLS 1.2可能是问题。

如果你正在使用virtualenv,请务必在里面运行命令。

解决方案:使用较新版本的OpenSSL

安装Python

为了支持TLS 1.1或更高版本,您可能需要安装较新版本的OpenSSL,然后再安装Python。这应该会给你一个支持TLS 1.1的Python。

此过程取决于您的操作系统 - 这里是OS X的指南。

virtualenv用户
对我来说,我的virtualenv之外的Python有TLS 1.2支持,所以我删除了我的旧virtualenv,并创建了一个具有相同包的新的,然后它工作。容易腻!

另见:

    PyMongo文档中的Python 3部分中的
  • The warning about TLS 1.0。虽然它在Python 3部分下,但它也适用于Python 2

答案 3 :(得分:0)

我遇到了同样的问题,并与部署在AWS上的Mongo Atlas支持进行了30分钟的交谈。我运行下一个终端命令:

/Applications/Python\ 3.6/Install\ Certificates.command

答案 4 :(得分:0)

我有同样的问题。请检查您是否通过VPN连接。当我断开连接时,它解决了我的问题。