254
我为我的域及其子域购买通配符SSL认证,并将其安装在我的服务器上并绑定到网站(在IIS中)。
它在浏览器中显示绿色安全HTTPS。
我使用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
您如何看待这个问题?
{
"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
。
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
我的错误是什么?
答案 0 :(得分:1)
您不得使用外卡证书。
https://core.telegram.org/bots/webhooks#the-short-version
答案 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-certs与ca-bundle
文件一起添加的问题(对于我来说Namecheap Comodo)在我的SSL配置上,例如以下示例:
ca_certs = "cert/my-service.ca-bundle"
有关更多信息:@martini在此thread和FIX: Telegram Webhooks Not Working网站上提供答案。