Telegram Bot API Webhooks自签名证书问题

我正在一个Ruby语言服务器上通过setwebhook来pipe理多个Telegram Bots

顺便说一下,我将在BOTServer作为开源提供服务器

问题

我有麻烦从Telegram Bot API服务器接收webhook更新。 我已经设置了一个webhook标记(电报回复“成功”),但我没有收到任何更新成功的webhook。

我认为这个问题可能是围绕自签证书的奥秘。 看到旧的reddit问题和答案。

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

似乎有人解决了用证书“链”configurationnginx的问题; 我在证书技巧方面很漂亮,所以我问:

有人可以发布信息,configurationnginx(任何ssl web服务器!)具有详细设置/一步一步的傻瓜,显示如何传递.key和.pem文件在这里描述: https : //core.telegram.org /僵尸/自签名 设置证书“链”在nginxconfiguration中configuration,被Telegram Bot API Server“接受”?

顺便说一句,我的nginxconfiguration现在:

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文件是根据以下原则生成的文件: 使用自签名证书 :

 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" 

谢谢

乔治

我回答自己,分享解决方案在这里找到: 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必须是接收webhooks的服务器的真实主机名

适合我的解决方案:

我生成了密钥对: 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; } } 

cURL选项:


     CURLOPT_SSL_VERIFYPEER = false
     CURLOPT_SSL_VERIFYHOST = false