Telegram Bot API Webhooks自签名证书问题

时间:2015-11-26 06:35:13

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

我正在使用Ruby语言服务器通过setwebhooks

管理多个Telegram Bots

顺便说一句,我将在BOTServer

将服务器作为开源提供

问题

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

我认为这个问题可能是self-signed Certificate个问题。查看旧的reddit question和答案。

我有类似的问题,我认为重点在于发送HTTPs webhooks更新的Telegram Bot API服务器和接收webhooks的bot服务器之间的一些“误解”(我使用nginx作为代理/ https SSL证书处理程序)。

似乎有人解决了使用证书“chain”配置nginx的问题;我在证书技巧方面非常狡猾,所以我问:

问题

可能有人可以发布信息,配置nginx(任何ssl web服务器!),其中包含详细设置/傻瓜步骤,显示如何从此处描述的.key和.pem文件传递:https://core.telegram.org/bots/self-signed 设置证书“chain”在nginx配置中配置,由Telegram Bot API服务器“接受”?

BTW,我的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"

感谢

乔治

3 个答案:

答案 0 :(得分:5)

我自己回答,分享这里找到的解决方案: 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"
openssl的subj strig中的

YOURDOMAIN.EXAMPLE 必须是接收webhook的服务器的真实主机名

答案 1 :(得分:1)

适合我的解决方案:

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

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

将其添加到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;
    }
}

答案 2 :(得分:0)

cURL选项:


    CURLOPT_SSL_VERIFYPEER = false
    CURLOPT_SSL_VERIFYHOST = false