@einhorn

Как настроить https на Python-сервере, к которому идет обращение по IP?

Есть Python-сервер, который запускается следующим кодом:

//PageHandler3.PageHandlerClass3 содержит логику бекенда
def run(server_class=ThreadingHTTPServer, handler_class=PageHandler3.PageHandlerClass3):
    server_address = ('', PORT)
    httpd = server_class(server_address, handler_class)
    print("Serving at", PORT)
    httpd.serve_forever()
run()


Скрипт хранится и запускается из дроплета на DigitalOcean. У дроплета есть IP, и с http-запросами к серверу с использованием этого IP проблем нет.

Также есть фронтенд (HTML+JS), который хранится на том же дроплете и запускается на Apache. Он делает http-запросы к вышеописанному бекенду.

Также есть домен, который ведет к IP. Пока что его функция - исключительно удобство, чтобы не отпугивать пользователей необходимостью вводить IP для посещения сайта.

Проблемы начались, когда в один момент понадобилась функция записи аудио.
Если на фронтенде нет https, то navigator.mediaDevices возвращает null.
https на фронтенде удалось поставить без проблем (с использованием сертификата для домена, сгенерированного с помощью certbot от Let'sEncrypt), но из https-фронтенда нельзя обратиться к бекенду без https.

Я сгенерировал еще один сертификат (привязанный к домену, тоже с помощью certbot) для бекенда и добавил строку
httpd.socket = ssl.wrap_socket(httpd.socket, server_side=True, certfile='data//keys//new//cert.pem', keyfile='data//keys//new//privkey.pem', ssl_version=ssl.PROTOCOL_SSLv23)

Однако, в браузере, когда я захожу на https://IP:port/api/hi я получаю NET::ERR_CERT_COMMON_NAME_INVALID
Я так понимаю, браузер знает, что сертификат относится к домену, но он видит IP, и даже не проверяет, что домен на самом деле привязан к IP. Но другого способа сделать http-запрос к бекенду, кроме IP, я не знаю. Просто замена IP на домен не работает.

Я погуглил, что возможно получить сертификат для IP (а не для домена), но для этого IP нужен принадлежать мне, а не DigitalOcean.
  • Вопрос задан
  • 83 просмотра
Пригласить эксперта
Ответы на вопрос 2
dimonchik2013
@dimonchik2013
совет, который уже дан - ничего не стоит
никак

леценкрипт не выпускает для IP, только обещают

другие выпускают, но раз не хотите тратиться на домен... сертфикат сильно дороже двух долларров

купите домен - их по 0,99 валом, да и все

самопописать еще можно , но вряд ли сработает
Ответ написан
@einhorn Автор вопроса
купите домен - их по 0,99 валом, да и все

Я уже купил домен.
Проблема, видимо, в том, что я хочу обращаться к IP (я отправляю запрос, в url которого фигурирует IP и порт), а сертификат привязан именно к домену. Браузер видит IP и, зная, что сертификат ассоциирован с доменом, не хочет проверять, что домен ведет на этот же IP.

самопописать еще можно , но вряд ли сработает

Не работает - пробовал
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы