Если я сделаю запрос к своему серверу Daphne / Django в Postman или в приложении для Android, которое мы разрабатываем, Дафна выдает сертификат, но он отклоняется. Если я сначала сделаю простой запрос на получение на https://letsencrypt.org/, а затем сделаю запрос на свой сервер , сертификат принят.
Как я могу убедиться, что клиент доверяет моему сертификату, даже если этот клиент впервые видит сертификат, выданный этим ЦС?
Все, что описано ниже, может служить историей того, как я изучал проблему.
Оригинальное название: SSL-сертификат работает в браузере, но не может быть проверен почтальоном
У меня есть экземпляр AWS EC2, работающий под управлением Ubuntu 18.04, с python 3, Django, набором зависимостей проекта, Daphne, работающим с ASGI, с сертификатом Let's Encrypt. Дафна использует порт 8000 для HTTP и por 4430 для HTTPS, iptables настроен на перенаправление запросов с порта 80 на 8000 и с порта 443 на 4430. Django настроен для обеспечения безопасных соединений с SECURE_SSL_REDIRECT = True в файле settings.py.
Обслуживается временная страница «Сайт в разработке», и она должным образом доступна из любого браузера и со всех устройств, которые я тестировал до сих пор. Если я введу явно http, я буду перенаправлен на https, и сертификат будет принят. Все браузеры, которые я тестировал (Firefox, Brave, Chrome, Chrome для Android), говорят, что сертификат хорош.
Curl выводит содержимое HTML, возвращаемое с сервера. Я не знаю, принимает ли он сертификат или игнорирует его.
Проблема
Почтальон, однако, сообщает: «Ошибка: невозможно проверить первый сертификат». Работает только тогда, когда я отключу «Проверка сертификата SSL», что не отвечает на мой вопрос: почему Postman не может проверить мой сертификат Let's Encrypt?
Я создаю API, который работает на том же сервере, в том же домене и предназначен для использования мобильным приложением. В настоящее время приложение для Android выдает ошибку «Ошибка типа: сбой сетевого запроса», которая, как я подозреваю, может быть вызвана тем же, на что жалуется Почтальон.
Когда я раскручиваю сервер локально и настраиваю 1) приложение для использования http://localhost:8000 и 2) сервера чтобы не применять SSL, он работает в браузерах, Postman и в приложении для Android.
Я искал ответы во многих местах в течение нескольких дней, так что любая подсказка будет очень кстати.
РЕДАКТИРОВАТЬ
Интересная подсказка:
Если я делаю запрос на свой сервер Daphne / Django, он отправляет сертификат, который отклоняется. Но если я сначала сделаю запрос к https://letsencrypt.org/, а затем сделаю запрос своему серверу, оно работает!
Эта закономерность верна как в Postman, так и в нашем приложении для Android.
Это также происходит, когда я впервые делаю запрос к https://alloy.city (вместо letsencrypt.org), который обслуживается приложением Node.js и использует сертификат, также выданный центром сертификации Let's Encrypt.
Так что, возможно, возникает вопрос: как настроить мой сервер так, чтобы он вежливо приглашал клиентов добавить ЦС, выдавший мой сертификат, если они еще этого не сделали?.
Видимо, это то, что делает мой сервер Node.js.