我使用受SSL保护的Java NIO连接客户端和服务器。要连接到服务器,系统将提示用户输入主机,端口,用户名和密码。到目前为止,我可以连接客户端和服务器(它们成功完成了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似乎很受欢迎。
答案 0 :(得分:0)