Если я сделаю запрос к своему серверу Daphne / Django в Postman или в приложении Android, которое мы разрабатываем, Дафна предоставит сертификат, но он будет отклонен. Если я сначала сделаю простой запрос на получение https://letsencrypt.org/, а затем сделаю запрос на свой сервер, сертификат будет принят.
Как я могу убедиться, что клиент доверяет моему сертификату, даже если этот клиент впервые видит сертификат, выданный этим ЦС?
Все, что указано ниже, может служить историей того, как я изучал проблему.
Оригинальное название: SSL-сертификат работает в браузер, но не может быть проверен почтальоном
У меня есть экземпляр AWS EC2 под управлением Ubuntu 18.04, с python 3, Django, кучей зависимостей проекта, Дафна работает с 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 и использует сертификат, также выданный Давайте зашифруем CA.
Так что, может быть, вопрос должен быть следующим: как настроить мой сервер так, чтобы он вежливо приглашал клиентов добавить CA, выдавший мой сертификат, если они еще этого не сделали? .
Видимо, это то, что делает мой Node.js сервер.