我使用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似乎是非常受欢迎的。