ssl - telegram bot webhook 自签名证书问题
问题描述
我有一个静态 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 支持,但无法正常工作。有没有办法做到这一点?提前致谢。
解决方案
您的问题在于您的自签名证书:
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 信息,但如果仔细观察,您or
在声明 IP 时使用的是运算符。此外,您最后的初始化只是普通的 IP 地址。为了进一步阅读如何创建自签名 SSL 证书,我建议您使用以下资源:
- 如何使用 OpenSSL 创建自签名证书
- OpenSSL 快速参考指南
- 如果您想为您的证书设置一个替代(或多个)DNS 名称,这个线程也非常有用。
对于一个 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 证书方面的许多麻烦。如果你问我,一旦建立起来就更容易维护。虽然这只是一个替代选择。
推荐阅读
- python - 当我更改权限文件 ir.model.access.csv 并升级模块时,我有一个问题缺少字段“对象”(model_id) 的必需值
- pyiron - 在 HPC 集群中运行 Vasp 作业
- numpy - 如何将形状(4、1、1)的numpy数组重塑为(4、2、1)?
- ios - 使用 SwiftUI 为 UINavigationBar 自定义背景颜色
- macos - 如何通过命令行 mac os 更改 nginx.conf 上的端口?
- laravel - laravel-ffmpeg - fopen(/tmp/laravel-ffmpegi340VY.mkv):无法打开流:没有这样的文件或目录
- react-native - React Native 高重渲染时间成本
- django - 在 django 的一个模板目录中可以有多个 html 文件吗?
- c - C 可以假设我想存储我的字符的数组吗?
- laravel - Laravel Vuetify - 将所有 CSS 内联