电报webhook:为什么我得到ssl3_get_server_certificate:证书验证失败当我调用GetWebhookInfo API命令时出错?

时间:2017-03-09 15:06:13

标签: ssl openssl telegram telegram-bot

254

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

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

enter image description here

我使用Telegram Server: Win Server 2012 Web server: IIS 8.5 Project: Asp.Net MVC 和我的webhook网址(如下所示:SetWebhook

但是当我运行电报 https://webhook.example.com/api/WebhookAction/ 时,它会返回GetWebhookInfo错误:

certificate verify failed

您如何看待这个问题?

  • 我应该将Webhook Url更改为无子域地址,如下所示:{ "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 } }
  • 我的https://mydomain:8443/api/WebhookAction有任何问题(例如应该是无通配符SSL )吗?

修改

我也试过了:

自签名证书方式

A) 我通过以下SSL命令而不是通配符SSL创建自签名证书

OpenSSL

B) 然后我通过此命令从输出文件中创建了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"

PFX

C) 然后我在服务器上安装了openssl pkcs12 -export -out MyDomain.pfx -inkey MyDomain_private.key -in MyDomain_public.pem -certfile MyDomain_public.pem 并将其绑定到MyDomain.pfx

enter image description here

d) 我还使用Https://webhook.mydomain.com命令中的MyDomain_public.pem文件作为认证文件(同时包含第三个库和SetWebhook命令)。

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 API命令时,会返回此错误:

GetWebhookInfo

我的错误是什么?

2 个答案:

答案 0 :(得分:1)

您不得使用外卡证书。

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

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

答案 1 :(得分:0)

您的getWebHookInfo中的错误:

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

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

如何检查证书:

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

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

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

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

如何解决此问题:

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

我不知道您使用的是哪种服务,但是以gunicorn为例,我解决了将SSL证书提供者发送的ca-certsca-bundle文件一起添加的问题(对于我来说Namecheap Comodo)在我的SSL配置上,例如以下示例:

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

有关更多信息:@martini在此threadFIX: Telegram Webhooks Not Working网站上提供答案。