【问题标题】:Telegram webhook: Why i get ssl3_get_server_certificate:certificate verify failed Error when i call GetWebhookInfo API command?Telegram webhook:为什么我在调用 GetWebhookInfo API 命令时收到 ssl3_get_server_certificate:certificate verify failed 错误?
【发布时间】:2020-11-23 22:35:19
【问题描述】:
Server: Win Server 2012
Web server: IIS 8.5
Project: Asp.Net MVC

我为我的域及其子域购买了通配符 SSL 证书,并将其安装在我的服务器上并绑定到网站(在 IIS 中)。

它在浏览器中显示绿色安全 HTTPS。

我使用 Telegram SetWebhook 和我的 webhook URL(类似这样:https://webhook.example.com/api/WebhookAction/

但是当我运行 Telegram GetWebhookInfo 它返回 certificate verify failed 错误:

{  
   "ok":true,
   "result":{  
      "url":"https://webhook.example.com/api/WebhookAction/",
      "has_custom_certificate":false,
      "pending_update_count":1,
      "last_error_date":1489066503,
      "last_error_message":"SSL error {336134278, error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed}",
      "max_connections":40
   }
}

您如何看待这个问题?

  • 我是否应该将 Webhook Url 更改为 None-SubDomain 地址,如下所示:https://mydomain:8443/api/WebhookAction
  • 我的SSL 有什么问题吗(例如应该是None-Wildcard SSL)?

编辑

我也试过了:

自签名证书方式

一) 我通过以下 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.example.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.example.com/api/Webhookaction/" -F "certificate=C:\path\mydomain_public.pem" https://api.telegram.org/bot[TOKEN]/setWebhook

但是当我调用GetWebhookInfo API 命令时,它返回这个错误:

{  
   "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
   }
}

我的错误是什么?

【问题讨论】:

标签: ssl openssl telegram telegram-bot


【解决方案1】:

您不能使用通配符证书。

https://core.telegram.org/bots/webhooks#the-short-version

  1. 提供受支持的、非通配符、经过验证或自签名的证书。
  2. 使用与您在设置时提供的域相匹配的 CN 或 SAN。
  3. 提供所有中间证书以完成验证链。

【讨论】:

  • 谢谢查尔斯,我尝试创建和使用自签名证书,我写了一些关于步骤的描述并添加到问题中。你能帮帮我吗?为什么我也会出错?我的错误是什么?
  • @RAM 你能使用自签名吗?
  • 我使用 pfx 文件的方式与此主题类似:https://www.sslshopper.com/article-how-to-create-a-self-signed-certificate-in-iis-7.html 然后我使用在 IIS 中添加站点绑定将其绑定到子域。
  • Supplies all intermediate certificates to complete a verification chain. 你能告诉我如何在 apache 中做到这一点吗?
【解决方案2】:

您的 getWebHookInfo 中的错误:

"last_error_message":"SSL error {337047686, error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed}"

Telegram 是否说它需要整个证书链(也称为 CA Bundle 或全链证书)。

如何检查您的证书:

您可以使用 SSL Labs SSL Server Test 服务来检查您的证书:

只需像以下示例一样传递您的 URL,将 coderade.github.io 替换为您的主机:

https://www.ssllabs.com/ssltest/analyze.html?d=coderade.github.io&hideResults=on&latest

如果您看到“链问题:不完整”,则表示您没有提供完整的链式证书。

如何解决:

为您的 SSL 证书提供商下载完整的链式证书并将其安装在您的网络服务器上。

我不知道您使用的是哪种服务,但对于我的示例,使用gunicorn 我解决了添加ca-certs 和我的SSL 证书提供程序(在我的情况下为Namecheap Comodo)发送的ca-bundle 文件我的 SSL 配置,如下例:

ca_certs = "cert/my-service.ca-bundle"

欲了解更多信息:@martini 在此 threadFIX: Telegram Webhooks Not Working 网站上回答。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2019-09-01
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    相关资源
    最近更新 更多