Telegram Bot API Webhooks 自签名证书问题
Telegram Bot API Webhooks Self-signed Certificate issue
我正在开发 Ruby 语言服务器以通过 setwebhooks
管理多个 Telegram 机器人
顺便说一句,我将在 BOTServer
以开源方式交付服务器
问题
我无法从 Telegram Bot API 服务器接收 webhook 更新。我已经设置了一个 webhook 令牌(Telegram 回复 "success")但是我没有收到关于成功配置的 webhook 的任何更新。
我认为问题可能出在 self-signed Certificate mysteries. See old reddit question 和答案上。
我有类似的问题,我的观点是在发送 HTTPs webhooks 更新的 Telegram Bot API 服务器和接收 webhooks 的 bot 服务器之间的某些 "misunderstanding"(我使用 nginx 作为 proxy/https SSL 证书处理程序)。
好像有人解决了用证书配置nginx的问题"chain";我对证书技巧一无所知,所以我问:
问题
可能有人可以 post 信息来配置 nginx(任何 ssl 网络服务器!),并为傻瓜提供详细的设置/分步说明,展示如何从此处描述的 .key 和 .pem 文件传递: https://core.telegram.org/bots/self-signed 到 设置证书 "chain" 以在 nginx 配置中配置,由 Telegram Bot API 服务器 "accepted" ?
顺便说一句,我现在的 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"
谢谢
乔治
我自己回答,分享在这里找到的解决方案:
重点不是提到的 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 字符串中的 YOURDOMAIN.EXAMPLE 必须是接收 webhook 的服务器的真实主机名。
适合我的解决方案:
我生成了密钥对:openssl genrsa -out webhook_pkey.pem 2048
和 openssl 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
我正在开发 Ruby 语言服务器以通过 setwebhooks
管理多个 Telegram 机器人顺便说一句,我将在 BOTServer
以开源方式交付服务器问题
我无法从 Telegram Bot API 服务器接收 webhook 更新。我已经设置了一个 webhook 令牌(Telegram 回复 "success")但是我没有收到关于成功配置的 webhook 的任何更新。
我认为问题可能出在 self-signed Certificate mysteries. See old reddit question 和答案上。
我有类似的问题,我的观点是在发送 HTTPs webhooks 更新的 Telegram Bot API 服务器和接收 webhooks 的 bot 服务器之间的某些 "misunderstanding"(我使用 nginx 作为 proxy/https SSL 证书处理程序)。
好像有人解决了用证书配置nginx的问题"chain";我对证书技巧一无所知,所以我问:
问题
可能有人可以 post 信息来配置 nginx(任何 ssl 网络服务器!),并为傻瓜提供详细的设置/分步说明,展示如何从此处描述的 .key 和 .pem 文件传递: https://core.telegram.org/bots/self-signed 到 设置证书 "chain" 以在 nginx 配置中配置,由 Telegram Bot API 服务器 "accepted" ?
顺便说一句,我现在的 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"
谢谢
乔治
我自己回答,分享在这里找到的解决方案:
重点不是提到的 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 字符串中的 YOURDOMAIN.EXAMPLE 必须是接收 webhook 的服务器的真实主机名。
适合我的解决方案:
我生成了密钥对:openssl genrsa -out webhook_pkey.pem 2048
和 openssl 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