SleekXMPP:“证书已过期。”

ube*_*k77 3 python encryption ssl python-3.x sleekxmpp

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

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

INFO     Negotiating TLS
INFO     Using SSL version: TLSv1
ERROR    Certificate has expired.
Run Code Online (Sandbox Code Playgroud)

我试图在Ubuntu 16.04,Manjaro GNOME 17和Windows 10上解决此问题,并在每台计算机上重新安装了Python,sleekxmpp和sleekxmpp的所有依赖项。没什么不同。

在我的每台计算机上,我都安装了Let's Encrypt Authority X3证书,但是sleekxmpp仍然认为该证书已过期,即使该证书在2022年之前仍然有效。令人沮丧的是,我能够使用Pidgin登录到我的XMPP帐户, Pidgin自动保存的证书(在Linux中可以在〜/ .purple /下找到)与我直接从Let's Encrypt下载的证书完全相同。

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

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

有什么我可以做的吗?我已经待了好几天了,但在Google上找不到任何有用的解决方案。

感谢您的帮助!

ube*_*k77 5

一个多月后,我能够找到自己的问题的解决方案。

事实证明,此问题是由版本1.3.3中引入的SleekXMPP中的回归引起的:

GitHub:从1.3.1开始回归

它只是在最近才得到解决,但是到目前为止,还没有带有此修复程序的正式版本。解决此问题的短期方法是卸载SleekXMPP,然后重新安装SleekXMPP,指定版本1.3.1:

sudo pip3 uninstall sleekxmpp
sudo pip3 install sleekxmpp==1.3.1
Run Code Online (Sandbox Code Playgroud)

恢复到版本1.3.1为我解决了此问题。在SleekXMPP 1.3.4中,也许不再是问题。