Я использую Java NIO, защищенный SSL для соединения клиента и сервера.Для подключения к серверу пользователю предлагается ввести хост, порт, имя пользователя и пароль.Пока я могу соединить клиент и сервер (они успешно завершили рукопожатие SSL) и теоретически начать отправку данных туда-обратно.Я еще не написал механизм для проверки учетных данных (имя пользователя, пароль).
Сервер может аутентифицировать имя пользователя и пароль, просматривая их в базе данных.Если учетные данные, отправленные клиентом, неверны, соединение будет закрыто.
Вопрос 1: Когда следует проверять учетные данные?Я предполагаю, что это должно произойти после рукопожатия SSL.
Вопрос 2: Как безопасно упаковать учетные данные перед их сериализацией и отправкой на сервер?Я предполагаю, что должен хешировать пароль.Должен ли я тоже хэшировать имя пользователя?
Достаточно ли чего-нибудь такого, как это?
public class LoginCredentials implements Serializable {
private static final long serialVersionUID = 1026410425432118798L;
private final String username;
private final byte[] passwordHash;
public LoginCredentials(String username, byte[] passwordHash) {
this.username = username;
this.passwordHash = passwordHash;
}
public final String getUsername() {
return username;
}
public final byte[] getPasswordHash() {
return passwordHash;
}
}
Вопрос 3: Аутентификация учетных данных должна выполняться один раз за сеанс, правильно?Я прочитал несколько постов, которые, казалось, указывали, что учетные данные должны проверяться для каждого запроса.
Вопрос 4: Какой алгоритм хеширования мне следует использовать?SHA-512, кажется, очень популярен.