在security.json中为Apache Solr指定的salt在哪里?

vjrehmav  于 2022-11-05  发布在  Solr
关注(0)|答案(3)|浏览(141)

我正在尝试在本地实现Apache Solr的基本身份验证。https://lucene.apache.org/solr/guide/7_2/basic-authentication-plugin.html#basic-authentication-plugin),在3中,它被指定为A user called 'solr', with a password 'SolrRocks' has been defined.。同时,它被指定为密码被添加为sha 256(密码+盐)散列。但是盐没有被指定在任何地方(据我所检查的)。
我需要salt才能为security.json创建新密码。salt指定在哪里?我尝试在Google上搜索答案,但什么也找不到。如果您能帮助我,那就太好了。谢谢。
我可能遗漏了一些东西,因为我不是密码学Maven。我所知道的是,盐是与密码连接的随机位,这样使用相同密码的人就不会得到相同的哈希值(如果这些人的盐不同)。

更新

在这个link中,作者描述了在Apache Solr文档中找不到加密方法的问题。他仔细查看了Solr代码,发现www.example.com中的sha 256()Sha256AuthenticationProvider.java是实际计算哈希值的函数。
链接中还提供了一个可下载的jar文件,可用于生成Apache Solr所需的密码。
但是我仍然对Solr是如何匹配密码感到困惑。(因为它随机生成salt)。如果我将密码设置为fQfWaUyrgXoHPT9OiubY5zh8A4fL0D+r8592Eo1+Gbo= M7Vz0pRkjliKbPKHfP0qcMiALD16ujPQYPOu7SVG6Z8=(“SolrRocks”的加密版本,这是我在一次运行中运行jar文件得到的),之后,我尝试发送一个带有密码“SolrRocks”的curl请求,Solr怎么知道是同一个密码
如果有人能解释一下就好了。谢谢。

xoshrz7s

xoshrz7s1#

空格前的部分是散列密码,空格后的部分是salt:

System.out.println(Base64.encodeBase64String(btPass) + " " +
    Base64.encodeBase64String(salt));

这意味着Solr可以从后一部分中提取salt,按照参考文献中的算法将其添加到pass中,并将结果与存储在hash部分中的部分进行比较。

ffx8fchx

ffx8fchx2#

此工具可用于为solr生成包含salt的密码哈希:https://github.com/ansgarwiechers/solrpasswordhash

llew8vvj

llew8vvj3#

请注意Solr中的文档是不准确的-他们声称它是sha256(password + salt),但实际上它是sha256(sha256(salt || password))(其中salt首先被Base64解码,password被转换为UTF-8字节,||表示字节连接)。

相关问题