Как создать полностью безопасный вход в систему: нужен ли SSL? - PullRequest
0 голосов
/ 30 мая 2020

context

Я создаю проект, чтобы лучше понять логин / безопасность, и SSL действительно сбивает меня с толку. Пока у меня есть интерфейс (vue. js), API (node ​​/ express) и DB (postgreSQL).

Это общий поток аутентификации:

  • Когда пользователь входит в систему, он отправляет электронное письмо и пароль (через Ax ios) API.
  • API запрашивает в базе данных подходящее имя пользователя, а затем, используя bcrypt.compare, проверяет пароль, хешированный в базе данных.
  • В случае успеха API подписывает JWT и отправляет его клиенту.
  • Затем клиент сохраняет JWT в локальном хранилище и используется для будущих запросов.

вопрос (ы)

Пока я думаю, что все вышеперечисленное это лучшая практика, ЗА ИСКЛЮЧЕНИЕМ первого шага. Судя по чтению, я сделал до сих пор, что клиенту нужен SSL для безопасной отправки пароля к API. Так ли это? Должен ли мой сервер также быть SSL или просто клиент / хост?

В конечном итоге я попытаюсь использовать хостинг firebase (который автоматически SSL) для внешнего интерфейса и heroku для API и базы данных. Если есть более безопасные варианты, я открыт для предложений.

Кроме того, в целом, я новичок во всех этих вещах, связанных с безопасностью - если мне что-то не хватает или что-то еще небезопасно, Буду рад совету!

1 Ответ

2 голосов
/ 30 мая 2020

SSL создает безопасное соединение между двумя точками. В нашем сценарии между клиентом и сервером. После некоторого начального согласования клиент шифрует свои сообщения так, чтобы их мог расшифровать только сервер. И сервер делает то же самое со своими ответами или собственными вопросами. Используя SSL между этими двумя конечными точками, никто, кроме клиента и сервера, не может читать сообщения.

Это важно, поскольку сообщение, отправленное между клиентом и сервером, фактически просматривается гораздо большим количеством машин / процессов между ними. Таким образом, десятки других процессов могут видеть сообщение, и если сообщение не зашифровано, это означает, что все эти процессы могут точно знать, что находится в сообщении. Когда клиент и сервер обмениваются данными через SSL, другие процессы по-прежнему видят сообщения, но не могут их расшифровать.

На ваши конкретные вопросы: клиент открывает безопасное соединение с сервером. И клиент, и сервер должны поддерживать это. Если вы пишете собственный сервер, это означает, что вам нужно убедиться, что он имеет сертификат SSL. В наши дни очень распространенное место, где можно получить их бесплатно, - это letsencrypt.org .

...