为 Telegram Webhook 创建和使用自签名证书的简单方法是什么?
What is easy way to create and use a Self-Signed Certification for a Telegram Webhook?
系统信息:
Server Win Server 2012
Web Server: IIS 8.5
Project platform: ASP.NET MVC
Webhook Path: https://webhook.MYDOMAIN.com/api/webhookaction
// I use my domain name instead of MYDOMAIN
我使用以下方式创建了一个 自签名证书 用于 Telegram Webhook 但最终 telegram return SSL 错误,你知道更简单的成功方法吗?
A)
我通过以下 OpenSSL
命令而不是通配符 SSL
创建了一个 自签名证书
openssl req -newkey rsa:2048 -sha256 -nodes -keyout MyDomain_private_key.key -x509 -days 365 -out MyDomain_public.pem -subj "/C=US/ST=New York/L=MyDomain/O=MyDomain/CN=webhook.MyDomain.com"
B)
然后我通过以下命令从输出文件创建了一个 PFX
:
openssl pkcs12 -export -out MyDomain.pfx -inkey MyDomain_private.key -in MyDomain_public.pem -certfile MyDomain_public.pem
C)
然后我在服务器上安装了 MyDomain.pfx
并将其绑定到 Https://webhook.mydomain.com
.
D)
我还使用 SetWebhook
命令中的 MyDomain_public.pem
文件作为认证文件(同时使用第三个库和 Curl
命令)。
Curl
命令:
curl -F "url=https://webhook.MyDomain.com/api/Webhookaction/" -F "certificate=C:\path\mydomain_public.pem" https://api.telegram.org/bot[TOKEN]/setWebhook
但是当我调用GetWebhookInfo
API命令时,它return这个错误:
{
"ok":true,
"result":{
"url":"https://api.telegram.org/bot[token]/setWebhook?url=https://webhook.mydomain.com/api/webhookaction/",
"has_custom_certificate":true,
"pending_update_count":1,
"last_error_date":1489126755,
"last_error_message":"SSL error {336134278, error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed}",
"max_connections":40
}
}
我使用这种快速简便的方法为 Telegram 设置自签名 webhook(在 Windows 上,但它应该也适用于其他 OS)
使用 openSSL 创建您的证书
openssl req -newkey rsa:2048 -sha256 -nodes -keyout PRIVATE.key -x509 -days 365 -out PUBLIC.pem -subj "/C=NG/ST=Lagos/L=Lagos/O=YOUR_NAME_OR_COMPANY_NAME/CN=SERVER_NAME_OR_IP"
接下来使用这个简单的方法在电报上设置 webhook:
你应该得到这样的结果:
{"ok":true,"result":true,"description":"Webhook was set"}
- 检查 webhook 是否在 Telegram 上正确设置:
https://api.telegram.org/bot[token]/getWebhookinfo
{
ok: true,
result: {
url: "[SERVER_NAME_OR_IP]:[PORT]/[YOUR_BOT_TOKEN]",
has_custom_certificate: true,
pending_update_count: 0,
max_connections: 30
}
}
我个人 不为我的机器人使用 IIS。我使用一个非常轻量级的网络服务器(elli)作为我在 Elixir 中构建的 bot 服务器的一部分,该服务器的证书设置就像指向配置文件中 public 和私钥的路径一样简单.
对于 IIS this will direct you
系统信息:
Server Win Server 2012
Web Server: IIS 8.5
Project platform: ASP.NET MVC
Webhook Path: https://webhook.MYDOMAIN.com/api/webhookaction
// I use my domain name instead of MYDOMAIN
我使用以下方式创建了一个 自签名证书 用于 Telegram Webhook 但最终 telegram return SSL 错误,你知道更简单的成功方法吗?
A)
我通过以下 OpenSSL
命令而不是通配符 SSL
openssl req -newkey rsa:2048 -sha256 -nodes -keyout MyDomain_private_key.key -x509 -days 365 -out MyDomain_public.pem -subj "/C=US/ST=New York/L=MyDomain/O=MyDomain/CN=webhook.MyDomain.com"
B)
然后我通过以下命令从输出文件创建了一个 PFX
:
openssl pkcs12 -export -out MyDomain.pfx -inkey MyDomain_private.key -in MyDomain_public.pem -certfile MyDomain_public.pem
C)
然后我在服务器上安装了 MyDomain.pfx
并将其绑定到 Https://webhook.mydomain.com
.
D)
我还使用 SetWebhook
命令中的 MyDomain_public.pem
文件作为认证文件(同时使用第三个库和 Curl
命令)。
Curl
命令:
curl -F "url=https://webhook.MyDomain.com/api/Webhookaction/" -F "certificate=C:\path\mydomain_public.pem" https://api.telegram.org/bot[TOKEN]/setWebhook
但是当我调用GetWebhookInfo
API命令时,它return这个错误:
{
"ok":true,
"result":{
"url":"https://api.telegram.org/bot[token]/setWebhook?url=https://webhook.mydomain.com/api/webhookaction/",
"has_custom_certificate":true,
"pending_update_count":1,
"last_error_date":1489126755,
"last_error_message":"SSL error {336134278, error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed}",
"max_connections":40
}
}
我使用这种快速简便的方法为 Telegram 设置自签名 webhook(在 Windows 上,但它应该也适用于其他 OS)
使用 openSSL 创建您的证书
openssl req -newkey rsa:2048 -sha256 -nodes -keyout PRIVATE.key -x509 -days 365 -out PUBLIC.pem -subj "/C=NG/ST=Lagos/L=Lagos/O=YOUR_NAME_OR_COMPANY_NAME/CN=SERVER_NAME_OR_IP"
接下来使用这个简单的方法在电报上设置 webhook:
{"ok":true,"result":true,"description":"Webhook was set"}
- 检查 webhook 是否在 Telegram 上正确设置: https://api.telegram.org/bot[token]/getWebhookinfo
{
ok: true,
result: {
url: "[SERVER_NAME_OR_IP]:[PORT]/[YOUR_BOT_TOKEN]",
has_custom_certificate: true,
pending_update_count: 0,
max_connections: 30
}
}
我个人 不为我的机器人使用 IIS。我使用一个非常轻量级的网络服务器(elli)作为我在 Elixir 中构建的 bot 服务器的一部分,该服务器的证书设置就像指向配置文件中 public 和私钥的路径一样简单.
对于 IIS this will direct you