我有专有的 Web 应用程序,该应用程序以 sha1$79b2c$b3704ec5703ef28ded379cf6c6de4c4160aa029b 的形式存储用户密码。这是一个加盐的 sha1 哈希。
我也想将此预保存的信息用于 freeradius。Crypt-Password 属性在 radius 中定义,但据我所知,它只是密码的 md5 哈希值。我试过了,但没有按我预期的那样工作。如何在 freeradius 中使用相同的证书进行用户验证?是否可以运行一些脚本并根据其返回值接受?
如果我更改专有 Web 应用程序以在另一种形式上保存用户凭据,我应该选择什么才能与 Freeradius 兼容?除了 Cleartext 和 MD5。
答案1
我已经找到了如何回答问题 B 部分的方法:
形式 sha1$79b2c$b3704ec5703ef28ded379cf6c6de4c4160aa029b 包含以下部分:sha1$SALT$SALTEDPASSWORD
在 Radius 中,这被命名为 SSHA-Password Ref:http://www.packtpub.com/article/freeradius-authentication-storing-passwords 参考:http://freeradius.org/radiusd/man/rlm_pap.txt
1- 使用 Ref1 中的脚本创建 Salted SHA1 哈希。prop-to-ssha.pl UserClearPass SALT
输出可分配给属性
SSHA 密码 := OUTPUTOFPERLSCRIPT
这很有效。我可以自动化我的专有应用程序,并在创建用户时创建 radius 密码条目。
对于问题的第一部分,我还没有答案。
答案2
这在 Java 中有效
// Salted SHA1 with a random salt appended
String salt = UUID.randomUUID().toString().replaceAll("-", "");
hashPass = Base64.encodeBase64String(ArrayUtils.addAll(
DigestUtils.sha1(currPass.concat(salt)),
salt.getBytes()));
您现在可以在 RadCheck 表中添加具有“SSHA-Password”属性的“hashPass”。 Base64和摘要工具来自 Apache Commons。