Telegram Bot - ошибка SSL в Webhook с сертификатом letsencrypt - PullRequest
0 голосов
/ 30 апреля 2020

Я пытался исправить эту ошибку в течение двух дней и до сих пор не нашел ни одной, которая работает ... Так что вот моя проблема:

У меня ранее была установка Telegram Bot с Certbot (letsencrypt) на Raspberry Pi, и он работал отлично. Теперь я хотел построить то же самое на моем новом HomeServer (A Manjaro Linux Machine).

Итак, я установил Apache и Certbot, и он отлично работает с любым браузер для доступа к моему сайту с https://<mydomain>. Но ... когда я устанавливаю Webhook бота Telegram с сертификатом, вы должны передать его так:

curl -F "url=https://mrmobi.ddns.net/botTelegram/index.php" -F "certificate=@/etc/letsencrypt/live/mrmobi.ddns.net/fullchain.pem" https://api.telegram.org/bot723985628:AAHiEXNJgXZ-mGprEhGNc1QxiVpGfhxK_9A/setWebhook

он всегда возвращает мне ту же ошибку :

{
    "ok": true,
    "result": {
        "url": "<myDomain>",
        "has_custom_certificate": true,
        "pending_update_count": 1,
        "last_error_date": 1588255882,
        "last_error_message": "SSL error {error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed}",
        "max_connections": 40
    }
}

Итак, я искал решения, и все продолжали говорить, что вы должны попытаться протестировать свой сайт с помощью https://www.ssllabs.com/ssltest/analyze.html?d=<mydomain>&hideResults=on, а затем проверить, что в разделе «Цепочка» выдается что-то еще, кроме «None», и в в этом случае вам нужно будет предоставить серверу «полную цепочку сертификатов». Итак, я запустил этот тест, но там было написано «Нет», потому что я уже дал Apache сертификат fullchain.pem.

Снимок экрана "Проблемы с цепочкой"

Поскольку Certbot создал несколько сертификатов: я также пытался передать chain.pem и cert.pem в / setWebhook запрос, но там возникает та же ошибка.

Вот как я их создал:

certbot certonly --webroot /srv/http -d <myfirstdomain> -d <myseconddomain>

Так что теперь я действительно не знаю, как это исправить потому что SSL работает для браузера, только не для Telegram Webhook ...

На случай, если это часть моего /etc/httpd/conf/extra/httpd-ssl.conf:

#   SSL Engine Switch:
#   Enable/Disable SSL for this virtual host.
SSLEngine on

#   Server Certificate:
#   Point SSLCertificateFile at a PEM encoded certificate.  If
#   the certificate is encrypted, then you will be prompted for a
#   pass phrase.  Note that a kill -HUP will prompt again.  Keep
#   in mind that if you have both an RSA and a DSA certificate you
#   can configure both in parallel (to also allow the use of DSA
#   ciphers, etc.)
#   Some ECC cipher suites (http://www.ietf.org/rfc/rfc4492.txt)
#   require an ECC certificate which can also be configured in
#   parallel.
SSLCertificateFile "/etc/letsencrypt/live/mrmobi.ddns.net/fullchain.pem"
#SSLCertificateFile "/etc/httpd/conf/server-dsa.crt"
#SSLCertificateFile "/etc/httpd/conf/server-ecc.crt"

#   Server Private Key:
#   If the key is not combined with the certificate, use this
#   directive to point at the key file.  Keep in mind that if
#   you've both a RSA and a DSA private key you can configure
#   both in parallel (to also allow the use of DSA ciphers, etc.)
#   ECC keys, when in use, can also be configured in parallel
SSLCertificateKeyFile "/etc/letsencrypt/live/mrmobi.ddns.net/privkey.pem"
#SSLCertificateKeyFile "/etc/httpd/conf/server.key"
#SSLCertificateKeyFile "/etc/httpd/conf/server-dsa.key"
#SSLCertificateKeyFile "/etc/httpd/conf/server-ecc.key"

#   Server Certificate Chain:
#   Point SSLCertificateChainFile at a file containing the
#   concatenation of PEM encoded CA certificates which form the
#   certificate chain for the server certificate. Alternatively
#   the referenced file can be the same as SSLCertificateFile
#   when the CA certificates are directly appended to the server
#   certificate for convenience.
#SSLCertificateChainFile "/etc/letsencrypt/live/mrmobi.ddns.net/fullchain.pem"

#   Certificate Authority (CA):
#   Set the CA certificate verification path where to find CA
#   certificates for client authentication or alternatively one
#   huge file containing all of them (file must be PEM encoded)
#   Note: Inside SSLCACertificatePath you need hash symlinks
#         to point to the certificate files. Use the provided
#         Makefile to update the hash symlinks after changes.
#SSLCACertificatePath "/etc/httpd/conf/ssl.crt"
#SSLCACertificateFile "/etc/httpd/conf/ssl.crt/ca-bundle.crt"

Ну тогда, я надеюсь, что кто-то может помочь мне с этим, потому что я действительно понятия не имею, что здесь не так ...

РЕДАКТИРОВАТЬ:

Теперь я удалил сертификаты и воссоздал их с Certbot, но с опцией - apache, как этот certbot --apache -d <myfirstdomain> -d <myseconddomain>, но она все еще не работает, я все еще получаю ту же ошибку ...

Вот новый конфиг, созданный Certbot в /etc/letsencrypt/options-ssl-apache.conf и связаны в конфигурации Apache:


# Intermediate configuration, tweak to your needs
SSLProtocol             all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384>SSLHonorCipherOrder     on

SSLOptions +StrictRequire

# Add vhost name to log entries:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" vhost_combined
LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common```

1 Ответ

0 голосов
/ 01 мая 2020

Чтобы это исправить, мне просто нужно было сделать запрос .../setWebhook без прохождения сертификата и поставить https:// перед URL.

Поскольку я думал, что сертификаты Certbots являются «Самоподписанными», но они, очевидно, нет, о чем я думал? Я не могу поверить, что это было так просто, что я упустил из виду ...

Ну, тогда я надеюсь, что это кому-нибудь поможет, может быть, такая же глупая проблема. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...