我正在尝试在本地实现Apache Solr的基本身份验证。在屏幕截图中,Apache Solr Sample security.json(来源:https://lucene.apache.org/solr/guide/7_2/basic-authentication-plugin.html#basic-认证插件(,在3
中,给出了A user called 'solr', with a password 'SolrRocks' has been defined.
。此外,还假定密码是以sha256(密码+salt(散列的形式添加的。但盐在任何地方都没有具体说明(据我所查(。
我需要salt来创建security.json的新密码。salt在哪里指定?我试着在谷歌上搜索答案,但什么也找不到。如果你能帮我就太好了。谢谢。
我可能遗漏了一些东西,因为我不是密码学专家。我所知道的是,salts是与密码连接的随机位,这样拥有相同密码的人就不会得到相同的散列(如果这些人的salts不同的话(。
更新
在这个链接中,作者描述了在Apache Solr文档中找不到加密方法的问题。他查看了Solr代码,发现Sha256AuthenticationProvider.java中的sha256((是实际计算哈希的函数。
链接中还提供了一个可下载的jar文件,该文件可用于生成Apache Solr所需的密码。
但我仍然对Solr如何匹配密码感到困惑。给定的jar文件在不同的运行中为相同的密码字符串提供不同的哈希(因为它随机生成salt(。如果我将密码设置为fQfWaUyrgXoHPT9OiubY5zh8A4fL0D+r8592Eo1+Gbo= M7Vz0pRkjliKbPKHfP0qcMiALD16ujPQYPOu7SVG6Z8=
(我从一次运行jar文件中获得的"SolrRocks"的加密版本(,然后,我尝试发送一个带有密码的curl请求;SolrRocks";,Solr怎么知道是同一个密码?
如果有人能解释一下就太好了。谢谢
空格前的部分是散列密码,空格后的部分是salt:
System.out.println(Base64.encodeBase64String(btPass) + " " +
Base64.encodeBase64String(salt));
这意味着Solr可以从后一部分提取salt,将其添加到引用中算法中给定的过程中,并将结果与存储在哈希部分中的部分进行比较。
此工具可用于为solr生成包含salt的密码哈希:https://github.com/ansgarwiechers/solrpasswordhash
请注意,Solr中的文档是不准确的-他们声称它是sha256(password + salt)
,但事实上是sha256(sha256(salt || password))
(其中salt首先是Base64解码的,密码转换为UTF-8字节,||
表示字节串联(。在MatsLindh的回答中,这就是btPass
的值。