ssl - rtm_connect to slackbot 给出 SSL 证书验证错误
问题描述
我的工作区中有一个 slackbot。我正在使用这个python 脚本连接到 slackbot 并处理它收到的聊天消息。下面的行给出了 SSL 错误:
slack_client.rtm_connect(with_team_state=False)
错误:
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/slackclient/client.py", line 52, in rtm_connect
self.server.rtm_connect(use_rtm_start=with_team_state, **kwargs)
File "/usr/lib/python2.7/site-packages/slackclient/server.py", line 147, in rtm_connect
self.connect_slack_websocket(self.ws_url)
File "/usr/lib/python2.7/site-packages/slackclient/server.py", line 186, in connect_slack_websocket
raise SlackConnectionError(message=str(e))
SlackConnectionError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:579)
Connection failed. Exception traceback printed above.
我尝试REQUESTS_CA_BUNDLE
在 python 代码中更新,但没有奏效。
如何安装并使其验证证书?另外,如何跳过证书验证?
任何有关使用 SSL 证书的详细链接表示赞赏。
解决方案
失败的原因来自websocket
它使用的包和 CA 包(不是最新的)。我无法弄清楚实际使用了哪个 CA 包(我尝试更新提供的包以及系统安装的 OpenSSL 包),但它可以在命令行上被覆盖。
所以首先我下载了 DigiCert 证书:
wget https://www.tbs-certificats.com/issuerdata/DigiCertGlobalRootCA.crt
(注意:我在 DigiCert 页面上找不到官方下载链接,不知道他们为什么不提供)
然后设置环境变量:
export WEBSOCKET_CLIENT_CA_BUNDLE=DigiCertGlobalRootCA.crt
这对我有用:
$ python bot.py
Starter Bot connected and running!
推荐阅读
- julia - 如何在 Julia 中编写分段微分方程?
- reactjs - 使用第三方控件在 Jest/Enzyme/ReactTS 中难以模拟单元测试事件
- android - 尝试在空对象引用上调用虚拟方法 尝试在空对象引用上调用虚拟方法 android.widget.EditText.getText()
- typescript - for..in 循环属性在“字符串”类型上不存在
- biopython - SearchIO.parse xml 爆炸和 & 符号 cElementTree.ParseError: not well-formed (invalid token) 错误
- packet - 如何在痘控制器中阻止数据包?
- swift - Xcode/Swift 代码折叠
- ios - 检测 WebView 何时在 Swift4 中完成加载?
- ethereum - 智能合约能否自动向以太坊区块链中的用户地址发送消息
- google-chrome-extension - 仅在重新启动 Chrome 浏览器后:未发送 chrome.runtime.sendMessage() 或未调用 chrome.runtime.onMessage 侦听器函数