SleekXMPP:"Certificate has expired."

SleekXMPP: "Certificate has expired."

我目前正在尝试使用 Python3.5 中的 sleekxmpp 模块连接到 jabber.at,一种 XMPP 服务。 Jabber.at 的 SSL 证书由 Let's Encrypt 颁发。

我遇到的问题是,当我尝试使用 sleekxmpp 登录我的 jabber.at 帐户时,出现以下错误:

INFO     Negotiating TLS
INFO     Using SSL version: TLSv1
ERROR    Certificate has expired.

我已尝试在 Ubuntu 16.04、Manjaro GNOME 17 和 Windows 10 上解决此问题,方法是全新安装 Python、sleekxmpp 和所有 sleekxmpp在每台机器上的依赖项。没什么区别。

在我的每台机器上,我都安装了 Let's Encrypt Authority X3 certificate,但 sleekxmpp 仍然认为证书已过期,即使证书有效期到 2022 年。令人沮丧的是,我能够登录到我的使用Pidgin的XMPP账号,Pidgin自动保存的证书(可以在Linux中的~/.purple/下找到)和我直接从Let's Encrypt.

下载的完全一样

我曾尝试手动将 sleekxmpp.xmlstream.xmlstream.py:125 中的 ssl 版本更改为 ssl.PROTOCOL_SSLv23,但这也没有用。我也尝试过在 sleekxmpp.xmlstream.xmlstream.py:140 中手动指定 Let's Encrypt .crt 文件的路径,但我仍然遇到同样的问题。

请注意,我在每台机器上都安装了 dnspythonpyasn1pyasn1_modules。虽然我 可以 通过卸载 pyasn1 或通过将 sleekxmpp.xmlstream.xmlstream.py:140 设置为 None 来显式忽略证书来成功登录我的 jabber.at 帐户,这不是我的解决方案 - 我必须加密我的连接。

有什么我可以做的吗?我已经这样做了好几天了,但我一直无法在 Google.

上找到任何有用的解决方案

感谢任何帮助!

一个多月后,我找到了解决自己问题的方法。

原来这个问题是由版本 1.3.3 中引入的 SleekXMPP 中的回归引起的:

GitHub: Regression from 1.3.1

这个问题最近才得到解决,但截至目前,还没有包含修复程序的正式版本。此问题的短期解决方案是卸载 SleekXMPP,然后重新安装 SleekXMPP,指定版本 1.3.1:

sudo pip3 uninstall sleekxmpp
sudo pip3 install sleekxmpp==1.3.1

恢复到版本 1.3.1 为我解决了这个问题。也许这在 SleekXMPP 1.3.4 中将不再是一个问题。