繁体   English   中英

Pymongo MongoDB SSL 证书过期错误

[英]Pymongo MongoDB SSL Certificate Expired Error

我正在构建一个应用程序,使用 MongoDB Atlas 作为数据库,在后端使用 Django REST Framework。

我正在尝试启动两者之间的连接,但是,我不断收到此错误:

Error connecting to MongoDB: 'ag-lfgx9hg-shard-00-02.glqs5bt.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:992),'ag-lfgx9hg-shard-00-02.glqs5bt.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:992),'ag-lfgx9hg-shard-00-02.glqs5bt.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:992), Timeout: 
30s, Topology Description: <TopologyDescription id: 63d06b0f8f66929906b7c17a, topology_type: ReplicaSetNoPrimary, servers: [<ServerDescription (''ag-lfgx9hg-shard-00-02.glqs5bt.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect(''ag-lfgx9hg-shard-00-02.glqs5bt.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:992)')>, <ServerDescription ('ag-lfgx9hg-shard-00-02.glqs5bt.mongodb.net, 27017) server_type: Unknown, rtt: None, error=AutoReconnect(''ag-lfgx9hg-shard-00-02.glqs5bt.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:992)')>, <ServerDescription (''ag-lfgx9hg-shard-00-02.glqs5bt.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('ag-lfgx9hg-shard-00-02.glqs5bt.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:992)')>]> 

我不明白这个问题是如何产生的,因为 MongoDB Atlas 应该处理颁发 SSL 证书的问题,而且我看过多个视频,它们似乎在做同样的事情。 这是我的代码:

import pymongo

conn_str = "mongodb+srv://<username>:<password>@cluster0.mongodb.net/<database>?retryWrites=true&w=majority"


# set a 5-second connection timeout
client = pymongo.MongoClient(conn_str)

try:
    print(client.server_info())
except Exception:
    print("Unable to connect to the server.")

为了安全起见,我已将实际连接字符串替换为通用连接字符串,因此假设这是正确的

任何帮助将不胜感激

为了解决这个问题,我按照本文中概述的以下步骤操作: https://www.linkedin.com/pulse/ssl-certificateverifyfailed-while-python-tried-retrieve-sanjeev-kumar

步骤 1. 从此链接下载 Pem 文件https://letsencrypt.org/certs/lets-encrypt-r3.pem

步骤 2. 将文件从 .pem 重命名为 .cer

第 3 步。 并将证书文件安装到 python 程序执行的计算机上。

步骤 4. 如果需要重新启动机器并重新运行您的程序。

它将解决 SSL 问题。

注意 - 这篇文章的评论说它不适用于 Mac,我无法确认这一点,因为我使用的是 Windows,但 Mac 用户应该牢记

尝试将这些参数之一添加到 conn 字符串:

ssl=false
tlsAllowInvalidCertificates=true

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM