【问题标题】:rtm_connect to slackbot gives SSL certificate validation errorrtm_connect to slackbot 给出 SSL 证书验证错误
【发布时间】:2018-06-28 05:09:17
【问题描述】:

我的工作区中有一个 slackbot。我正在使用这个python script 连接到 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.

我尝试在 python 代码中更新REQUESTS_CA_BUNDLE,但没有成功。

如何安装并使其验证证书?另外,如何跳过证书验证?

感谢任何有关使用 SSL 证书的详细链接。

【问题讨论】:

    标签: ssl slack slack-api


    【解决方案1】:

    失败的原因来自 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!
    

    【讨论】: