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 指定的盐在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

在Plesk中为域重新加载Apache配置

在 Apache Spark 中为每行迭代添加范围变量

在 Apache Pig 中为元组创建模式

在 YARN 中为 Apache zeppelin 分配 Spark 内存

如何使用 Apache Camel 在 XSLT 中为每个组申请

[Web Security] JSON Hijacking