我目前正在尝试使用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的加密下载的证书完全相同。
我已尝试手动将sleekxmpp.xmlstream.xmlstream.py:125
中的ssl版本更改为ssl.PROTOCOL_SSLv23
,但这也不起作用。我还尝试在sleekxmpp.xmlstream.xmlstream.py:140
中手动指定Let的加密.crt文件的路径,但我仍然遇到同样的问题。
我应该注意,我确实在每台计算机上安装了dnspython
,pyasn1
和pyasn1_modules
。虽然我可以通过卸载pyasn1
成功登录我的jabber.at帐户,或者通过将sleekxmpp.xmlstream.xmlstream.py:140
设置为None
来明确忽略证书,但这不是
我能做些什么吗?我已经在这几天了,而且我还没能在谷歌上找到任何有用的解决方案。
我感谢任何帮助!
答案 0 :(得分:4)
经过一个多月,我找到了解决自己问题的方法。
事实证明,这个问题是由版本1.3.3中引入的SleekXMPP中的回归引起的:
最近才解决,但截至目前,该修复程序尚未正式发布。这个问题的短期解决方案是卸载SleekXMPP,并重新安装SleekXMPP,指定版本1.3.1:
sudo pip3 uninstall sleekxmpp
sudo pip3 install sleekxmpp==1.3.1
恢复版本1.3.1为我解决了这个问题。也许这将不再是SleekXMPP 1.3.4中的问题。