security.json 中为 Apache Solr 指定的盐在哪里?
Posted
技术标签:
【中文标题】security.json 中为 Apache Solr 指定的盐在哪里?【英文标题】:Where is the salt specified in security.json for Apache Solr? 【发布时间】:2020-10-28 19:17:10 【问题描述】:我正在尝试在本地为 Apache Solr 实施基本身份验证。在屏幕截图Apache Solr Sample security.json(来源: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.
。此外,密码被添加为 sha256(password+salt) 散列。但是盐没有在任何地方指定(据我检查)。
我需要 salt 才能为 security.json 创建新密码。盐在哪里指定?我尝试用谷歌搜索答案,但找不到任何东西。如果你能帮助我,那就太好了。谢谢。
由于我不是密码学专家,因此我可能会遗漏一些东西。我所知道的是盐是与密码连接的随机位,因此具有相同密码的人最终不会得到相同的哈希(如果这些人的盐不同)。
更新
在这个link中,作者描述了在Apache Solr docs中找不到加密方法的问题。他查看了Solr代码,发现Sha256AuthenticationProvider.java中的sha256()是真正计算hash的函数。
链接中还提供了一个可下载的 jar 文件,可用于生成 Apache Solr 所需的密码。
但我仍然对 Solr 如何匹配密码感到困惑。给定的 jar 文件在不同的运行中为相同的密码字符串提供不同的哈希值(因为它随机生成盐)。如果我将密码设置为fQfWaUyrgXoHPT9OiubY5zh8A4fL0D+r8592Eo1+Gbo= M7Vz0pRkjliKbPKHfP0qcMiALD16ujPQYPOu7SVG6Z8=
(我从一次运行 jar 文件中获得的“SolrRocks”的加密版本),然后我尝试使用密码“SolrRocks”发送 curl 请求,Solr 如何知道它是密码一样吗?
如果有人能解释一下,那就太好了。谢谢。
【问题讨论】:
【参考方案1】:空格前的部分是哈希密码,空格后的部分是盐:
System.out.println(Base64.encodeBase64String(btPass) + " " +
Base64.encodeBase64String(salt));
这意味着 Solr 可以从后面部分提取盐,将其添加到参考中算法中给出的 pass,并将结果与存储在哈希部分中的部分进行比较。
【讨论】:
【参考方案2】:请注意,Solr 中的文档不准确 - 他们声称它是 sha256(password + salt)
,但实际上它是 sha256(sha256(salt || password))
(其中 salt 首先是 Base64 解码,密码转换为 UTF-8 字节,||
表示字节级联)。在 MatsLindh 的回答中,这就是 btPass
的值。
【讨论】:
【参考方案3】:此工具可用于为 solr 生成包含盐的密码哈希: https://github.com/ansgarwiechers/solrpasswordhash
【讨论】:
以上是关于security.json 中为 Apache Solr 指定的盐在哪里?的主要内容,如果未能解决你的问题,请参考以下文章
在 YARN 中为 Apache zeppelin 分配 Spark 内存