Java验证密码

Java验证密码,java,security,passwords,Java,Security,Passwords,可能重复: 我有一个应用程序的中央admin实例,其中创建了judge帐户。要使用此judge帐户,来自另一台计算机的应用程序的judge实例需要通过中央管理员的身份验证。应用程序的用户实例将向管理员发送一些内容,管理员将把它推给其中一位评委 法官需要能够登录和验证管理员。主要的问题是,由于每个人都在同一个网络上,并且没有SSL(我对此没有控制权),因此有人可以嗅探法官发送给管理员的任何信息,然后自己发送数据并作为法官进行身份验证。显然,使用SSL是正确的方法 如果这不是一个选项,您可以自己加

可能重复:

我有一个应用程序的中央
admin
实例,其中创建了
judge
帐户。要使用此judge帐户,来自另一台计算机的应用程序的
judge
实例需要通过中央
管理员的身份验证。应用程序的
用户
实例将向
管理员
发送一些内容,管理员将把它推给其中一位评委


法官需要能够登录和验证管理员。主要的问题是,由于每个人都在同一个网络上,并且没有SSL(我对此没有控制权),因此有人可以嗅探法官发送给管理员的任何信息,然后自己发送数据并作为法官进行身份验证。

显然,使用SSL是正确的方法

如果这不是一个选项,您可以自己加密请求的内容,并确保它只能使用一次

您需要:

  • 生成包含用户名、密码和时间戳/随机值的加密令牌。有一些关于stackoverflow上的crypt/decrypt字符串操作的好例子
  • 您的服务器必须确保每个令牌只能使用一次(例如,保留地图)
  • 代币在有限的小间隔后过期

这不是不可缓存的,但会阻止常规嗅探器重复使用凭据。

为什么不能使用SSL,当您同时控制服务器和客户端时,自签名证书可以正常工作。@ScottChamberlain我不能使用SSL,因为此应用程序的用户不允许使用SSL。这不是我能控制的。@ScottChamberlain自签名证书不安全。攻击者可以创建相同的证书。@siebz0r是的,自签名证书是不可信任的,但是由于您同时控制客户端和服务器,因此您创建了自己的CA,以确保私钥的安全,然后将CA的公共证书放入应用程序和服务器的密钥库中,然后为服务器创建自己的私人CA签名证书(据我所知,OP不需要客户端身份验证,因此客户端只需要CA的公共证书)谢谢。如果SSL是正确的方法,有没有一种方法可以在最终用户不必手动执行任何操作的情况下使用它?我使用的是Java的基于套接字的通信。当您使用根证书时,最终用户将不必执行任何操作…这只是一个金钱问题。如上所述,您可以使用自签名证书,只需稍微阅读一下即可关于java、套接字、ssl、密钥库……由于您的问题主题是“java验证密码”,因此最好不要在此处继续讨论ssl详细信息。。。