我有一个静态 IP 地址,我想将其用作 Telegram bot webhook。换句话说,我的机器人应用程序在我的本地系统上运行,并且我配置了我的调制解调器以将请求从该 IP 地址转发到我的本地服务器:端口。此方法适用于在我的本地系统上运行的其他应用程序,但我在使用 ssl 时遇到问题。
为了设置 webhook,我首先以这种方式生成一个自签名证书:
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=<MY_IP:PORT> OR <MY_IP>"
这会生成 PUBLIC.pem
文件,然后我将其发送到 setWebhook
api。结果没问题,但我总是从 getWebhookInfo
方法得到以下结果:
{
"ok":true,
"result":{
"url":".../bot/receive",
"has_custom_certificate": true,
"pending_update_count":15,
"last_error_date":1609911454,
"last_error_message":"SSL error {error:14095044:SSL routines:ssl3_read_n:internal error}",
"max_connections":40,
"ip_address":"..."
}
}
同样在我的应用程序中,我启用了具有 .p12
等价于 .pem
证书的 ssl 支持,但不起作用。有没有办法做到这一点?提前致谢。
答案 0 :(得分:1)
您的问题在于您的自签名证书:
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=<MY_IP:PORT> OR <MY_IP>"
... 更具体地说是 -subj
开关。当然,您提供的是 CSR 信息,但如果您仔细观察,您会在声明 IP 时使用 or
运算符。此外,您最后的初始化只是普通的 IP 地址。为了进一步阅读有关如何创建自签名 SSL 证书的内容,我建议您使用以下资源:
对于一个 DNS 名称,您的证书应如下所示:
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=<MY_IP:PORT>
而 MY_IP
显然是您自己服务器的 IP 地址(您从中调用 webhook)。
为了完整起见,我建议您使用诸如 NGNIX 之类的反向代理 - 它会让您免于在请求容器中的 SSL 证书方面遇到许多麻烦。如果你问我,一旦建立就更容易维护。 虽然这只是一个替代选项。