Я бэкенд-инженер-самоучка, так что изучаю все это по ходу дела. Долгое время я использовал базовую аутентификацию для своих пользователей.
Многие разработчики не рекомендуют этот подход, поскольку каждый запрос будет содержать имя пользователя и пароль в виде открытого текста. Любой, кто обладает необходимыми навыками, может обнюхать соединение между моим приложением iOS и моим сервером Django / Gunicorn и получить свой пароль.
Я бы не хотел подвергать риску свои учетные данные пользователя, поэтому я хотел бы реализовать более безопасный способ аутентификации.
SSL кажется наиболее приемлемым вариантом. Мой сервер не обслуживает статический контент или что-нибудь в этом роде. Все, что сервер делает, - это отправляет и получает ответы в формате json от моего приложения iOS и обратно. Вот моя текущая топология.
Приложение iOS ------> Amazon Elastic Load Balancer -------> Экземпляры EC2 с HTTP Gunicorn.
Gunicorn работает на порту 8000. У меня есть запись CNAME от GoDaddy для DNS Amazon Elastic Load Balancer.
Поэтому вместо использования длинного DNS для запросов я просто использую server.example.com.
Для взаимодействия с моими серверами я отправляю и получаю запросы на server.example.com:8000/
Эта установка работает и была надежной. Однако мне нужен более безопасный способ. Я хочу настроить SSL между моим приложением iOS и моим Elastic Load Balancer. Как я могу это сделать?
Поскольку я отправляю только ответы в формате json на свое приложение, действительно ли мне нужно покупать сертификат в ЦС или я могу создать свой собственный? (поскольку браузеры не будут взаимодействовать с моими серверами. Мои серверы предназначены только для отправки ответов json моему приложению iOS).
Ваш ELB может прослушивать любой порт, который вы указываете, и настраивать любой порт на вашем сервере. Для обратной совместимости я бы предложил использовать другой порт (например, 8001) в качестве безопасного порта и общаться через безопасное соединение в новой версии вашего приложения. Вы добавляете слушателя в свой балансировщик нагрузки, загружаете сертификат для server.example.com (через веб-интерфейс) и вуаля, теперь вы можете использовать безопасное соединение между вашими пользователями и вашим ELB. Вы даже можете использовать тот же порт для запроса вашего внутреннего сервера из ELB.
Как разработчик, я также хотел бы предложить еще больше повысить безопасность, например, используя аутентификацию на основе сеанса вместо повторной отправки имени пользователя и пароля при каждом запросе.