Найти - Пользователи
Полная версия: Не работает WebHook c самописным сертификатом на raspberry pi
Начало » Python для экспертов » Не работает WebHook c самописным сертификатом на raspberry pi
1
Jeck290
Привет пишу сюда в последнюю очередь, перепробовал уже все что можно. Проблема при подключении вебхука к моему серверу в консоли появляется ошибка “TLSV1_ALERT_UNKNOWN_CA] tlsv1 alert unknown ca”,
ругается на корневой сертификат и естественно запрос не доходит на сервер. Думал что сертификат делаю не так хотя пример был взят из оф документации.
Взял бота на Go запустил его с этими сертификатами и все заработало. Скорее всего ошибка в питоновских библиотеках для ssl, поделитесь мыслями кто что думает ?

py.user.next
Jeck290
поделитесь мыслями кто что думает ?
Есть такая мысль, что ошибка у тебя в коде какая-то. Раз ты его не привёл, значит не понимаешь, что код приводить надо. А если не понимаешь, что код приводить надо, значит не очень шаришь в программировании. ;)
doza_and
Jeck290
Скорее всего ошибка в питоновских библиотеках для ssl, поделитесь мыслями кто что думает ?
:) Это знакомая гипотеза. Думаю отношение вероятности нахождения ошибки в стандартных библиотеках по сравнению с ошибкой в своем новом коде для опытного разработчика порядка 1/1000. Я не имею ввиду конечно начальную фазу когда код пишется и свои ошибки идут валом. Имею ввиду на фазе эксплуатации кода.
Jeck290
Да нет с программированием у меня все хорошо ) ну или я так думаю
вот код он в скриншотах, могу конечно архив скинуть но там нужно то всего подключить сертификаты к вебсерверу тобиш включить ssl. Я пробую сделать это на tornado,
настройки подключения сертификата в tornado



обработчик post запроса, если приходит пост то в консоли должен быть принт



урлы



ну и код для включения вебхука, посылаем урл и сам сертификат, все как написано в офф документации



Сервер находится на raspberry pi , dns в данном случае идет от сервисов микротика. По сути нужно настроить ssl на веб сервере и сделать обработчик для post запроса, когда ты активируешь вебхук то и пишешь боту то на сервер начинают приходить post запросы но в логах появляется ошибка ((( Точно такой же бот только для go таких ошибок с сертификатом не имеет, просто мне интресно почему ssl выдает ошибку, поискал в гугле решение проблемы но так и ничего не нашел ….
py.user.next
Jeck290
вот код он в скриншотах, могу конечно архив скинуть
Конечно надо скидывать архив. Ты же не в курсе, что скинутый код ещё и запускается обычно, чтобы ошибку воспроизвести. Да и чтобы просто процитировать кусок из этого кода, никто не будет сидеть и набирать его. Потому и выводы такие, что не очень-то ты с кодом много работаешь, раз таких вещей не знаешь.

Вот там в коде CERT_PATH, предлагаешь догадаться, что это, откуда и чему равно?
Jeck290
# -*- coding: utf-8 -*-
from tornado.ioloop import IOLoop
from tornado.web import RequestHandler, Application
from tornado.httpserver import HTTPServer
class MainHandler(RequestHandler):
    def get(self):
        print "GET"
        self.write("GET")
    def post(self, *args, **kwargs):
        print "POST"
        self.write('POST')
application = Application([
    (r"/", MainHandler),
])
http_server = HTTPServer(application, ssl_options={'certfile': 'webhook_cert.pem', 'keyfile': 'webhook_pkey.pem'})
if __name__ == "__main__":
    http_server.listen(8443, address='0.0.0.0')
    IOLoop.instance().start()

генерация сертификата openssl req -newkey rsa:2048 -sha256 -nodes -keyout YOURPRIVATE.key -x509 -days 365 -out YOURPUBLIC.pem -subj “/C=US/ST=New York/L=Brooklyn/O=Example Brooklyn Company/CN=YOURDOMAIN.EXAMPLE”
тут заменить на свой домен YOURDOMAIN.EXAMPLE

отсылаем сертификат ,ссылку и активируем хук
def set_webhook():
    data = {'url': 'https://DOMENNAME:8443/', 'certificate': open('key/webhook_cert.pem', 'r')}
    r = requests.post('https://api.telegram.org/bot(TOKEN)/setWebhook',data = data)
    print r.text

после этого должны приходить запросы и п логах торнадо должна появляться ошибка.
Поставил на виртуалку Арч , установил торнадо но ошибка все равно появляется …. он где то ищет сертификаты и не может их найти как я понимаю. Развернул nginx сделал прокси на торнадо, теперь запросы вообще не приходят (
Jeck290
GO bot
если берем этого бота(echo) и подсовываем сертификаты все сразу работает и ошибок не выдает…
py.user.next
Напиши везде полные, абсолютные пути к сертификатам. Сами сертификаты на время положи в папку, доступную для всех приложений (например /tmp).

Jeck290
http_server = HTTPServer(application, ssl_options={'certfile': 'webhook_cert.pem', 'keyfile': 'webhook_pkey.pem'})
Во всех таких местах полные пути к файлам должны стоять.
Jeck290
Я смотрел код сервера там были строки существуют ли ключ и сертификат по указанному пути если нет то ошибка. Попробовал как ты сказал, абсолютные пути + общедоступные папки например /tmp , неа все тоже самое (((
py.user.next
По этой документации попробуй.
Там нужно создать контекст, заполнить его и передать.
ssl_ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
ssl_ctx.load_cert_chain(os.path.join(data_dir, "mydomain.crt"),
                        os.path.join(data_dir, "mydomain.key"))
HTTPServer(applicaton, ssl_options=ssl_ctx)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB