【问题标题】:Telegram Bot API Webhooks Self-signed Certificate issueTelegram Bot API Webhooks 自签名证书问题
【发布时间】:2016-02-29 03:47:24
【问题描述】:

我正在开发一个 Ruby 语言服务器来通过 setwebhooks 管理多个 Telegram 机器人

顺便说一句,我将在BOTServer 以开源形式提供服务器

问题

我无法从 Telegram Bot API Server 接收 webhook 更新。我已经设置了一个 webhook 令牌(电报回复“成功”),但我没有收到任何关于成功配置的 webhook 的更新。

我认为问题可能与self-signed Certificate 的谜团有关。查看旧的reddit question 和答案。

我有类似的问题,我公平地说,是在发送 HTTPS webhook 更新的 Telegram Bot API 服务器和接收 webhook 的机器人服务器之间存在一些“误解”(我使用 nginx 作为代理/https SSL 证书处理程序)。

似乎有人解决了使用证书“链”配置 nginx 的问题;我对证书技巧很无知,所以我问:

问题

可能有人可以发布信息,以配置 nginx(任何 ssl Web 服务器!)为傻瓜提供详细设置/分步说明,展示如何从此处描述的 .key 和 .pem 文件传递​​:https://core.telegram.org/bots/self-signed设置证书“链”在 nginx 配置中配置,被 Telegram Bot API 服务器“接受”?

顺便说一句,我现在的 nginx 配置:

upstream backend {
  server 127.0.0.1:3000;
}

#
# HTTPS server
#
server {
  listen 8443 ssl;
  server_name myhost.com;

  ssl on;
  ssl_certificate /mypath/ssl/PUBLIC.pem;
  ssl_certificate_key /mypath/ssl/PRIVATE.key;

  ssl_session_timeout 5m;

  ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
  ssl_prefer_server_ciphers on;

  location @backend {
    proxy_pass http://backend;
  }

  location / {
    try_files $uri @backend;
  }
}

其中 PRIVATE.key + PUBLIC.pem 文件是生成以下指南的文件:Using self-signed certificates:

openssl req -newkey rsa:2048 -sha256 -nodes -keyout PRIVATE.key -x509 -days 365 -out PUBLIC.pem -subj "/C=US/ST=New York/L=Brooklyn/O=Example Brooklyn Company/CN=YOURDOMAIN.EXAMPLE"

谢谢

乔治

【问题讨论】:

    标签: ssl nginx https ssl-certificate telegram-bot


    【解决方案1】:

    我自己回答,分享在这里找到的解决方案: https://stackoverflow.com/a/33260827/1786393

    重点不是提到的nginx配置,而是PEM文件:

    openssl req -newkey rsa:2048 -sha256 -nodes -keyout YOURPRIVATE.key -x509 -days 365 -out YOURPUBLIC.pem -subj "/C=US/ST=New York/L=Brooklyn/O=Example Brooklyn Company/CN=YOURDOMAIN.EXAMPLE"
    

    YOURDOMAIN.EXAMPLE 在 openssl 的 subj 字符串中必须是接收 webhook 的服务器的真实主机名

    【讨论】:

    • 嗯,我不明白!如您所说,生成证书real hostname,但仍然没有成功。我正在使用子域。这有什么不同吗?
    • 我在 domain.subdomain.com 上取得了成功。证书生成后你设置了 webhook 吗?请参阅我的项目 www.github.com/solyaris/BOTServer 中的分步教程
    • 我做了所有事情,但我仍然没有收到电报的请求。我确实用我的公钥设置了 webhook,我可以自己从浏览器调用 webhook(它可以工作),但电报没有任何内容。
    • 在您的网络服务器中正确配置了 SSL 设置?阿帕奇? Nginx ?其他 ?见:github.com/solyaris/BOTServer
    【解决方案2】:

    适合我的解决方案:

    我生成了密钥对:openssl genrsa -out webhook_pkey.pem 2048openssl req -new -x509 -days 3650 -key webhook_pkey.pem -out webhook_cert.pem

    不要忘记提供 FQDN 名称。至少给你主机的 ip

    将其添加到 nginx 配置中

    server {
        listen      8443 ssl;
        server_name MY_IP;
        charset     utf-8;
        client_max_body_size 75M;
        ssl_certificate /var/www/myproject/tg_keys/webhook_cert.pem;
        ssl_certificate_key /var/www/myproject/tg_keys/webhook_pkey.pem;
    
        location / { try_files $uri @yourapplication; }
        location @yourapplication {
            include uwsgi_params;
            uwsgi_pass unix:/var/www/myproject/hb.sock;
        }
    }
    

    【讨论】:

      【解决方案3】:

      cURL 选项:

      CURLOPT_SSL_VERIFYPEER = 假 CURLOPT_SSL_VERIFYHOST = 假

      【讨论】:

        猜你喜欢
        • 2021-04-11
        • 2014-12-25
        • 1970-01-01
        • 2016-03-12
        • 2018-04-24
        • 1970-01-01
        • 1970-01-01
        • 2016-10-19
        • 2020-09-20
        相关资源
        最近更新 更多