如何生成Solr密码哈希?解析哈希类型及Bash生成方法
Solr BasicAuthPlugin 密码哈希类型及Bash生成方法
哈希类型说明
你提到的特殊哈希是Solr自定义的PBKDF2WithHmacSHA256编码格式,它并非独立的哈希算法,而是将算法参数与生成结果打包后的自定义编码:
- 二进制结构包含三部分:前4字节为固定迭代次数(大端字节序,默认10000)、中间16字节是随机生成的salt值、最后32字节是通过PBKDF2WithHmacSHA256算法生成的密钥(SHA256输出长度固定为32字节)
- 最终将这整段二进制数据做Base64编码,得到你看到的特殊字符串。
Bash生成方法
方法一:使用Solr内置工具(推荐)
部署Solr的环境通常已配置Java,直接用Solr自带的工具类生成最可靠:
- 替换命令中的
/path/to/solr为你的Solr实际安装路径,SolrRocks为目标密码:
PASSWORD="SolrRocks" java -cp "/path/to/solr/server/lib/*:/path/to/solr/server/solr-webapp/webapp/WEB-INF/lib/*" org.apache.solr.security.Sha256Hash "$PASSWORD"
- 执行后会输出类似结果,第二个字段就是
security.json中需要的哈希值:
solr $shapw$10000$a1b2c3d4...$e5f6g7h8...
方法二:手动用OpenSSL实现(不推荐,易出错)
若无法使用Solr类库,可通过OpenSSL命令组合生成,需严格匹配参数:
- 生成16字节随机salt:
SALT=$(openssl rand -hex 16) - 生成PBKDF2密钥(迭代10000次,SHA256算法):
KEY=$(openssl pkcs5 -pbkdf2 -in <(echo -n "SolrRocks") -salt "$SALT" -iter 10000 -sha256 -out - | xxd -p -c 32) - 转换迭代次数为4字节大端二进制:
ITER=$(printf "%08x" 10000 | xxd -r -p) - 拼接二进制数据并Base64编码:
COMBINED="$ITER$(echo -n "$SALT" | xxd -r -p)$(echo -n "$KEY" | xxd -r -p)" HASH=$(echo -n "$COMBINED" | base64) - 最终得到的
HASH值即可用于security.json配置。
内容的提问来源于stack exchange,提问作者HubertNNN
相关产品推荐
相关产品推荐

