访问Elasticsearch时如何哈希密码

问题描述 投票:0回答:2

我对Elasticsearch有疑问。我使用Search Guard作为传输层安全性,当我想从elasticsearch读取数据时,我必须提供用户名和密码。像这样:

import org.apache.spark.{SparkConf, SparkContext}

import org.elasticsearch.spark._

object ReadDataFromES {
def main(args: Array[String]) {
  val conf = new SparkConf()
  .setAppName("SampleESApp")
  .set("es.index.auto.create", "true")
  .set("es.nodes", "localhost:9200")
  .set("es.net.http.auth.user", "elastic_user")
  .set("es.net.http.auth.pass", "elastic_password")
  val sc = new SparkContext(conf)

  print("Reading data \n\n\n")
  val RDD = sc.esRDD("bank/account")
  println(RDD.first())
  println("\n\n")
  /*
  print("Writing data \n\n\n")
  RDD.saveToEs("bank/spark")
  */
}
}

但问题是我不想在我的代码中将密码(es.net.http.auth.pass参数的值)作为纯文本。有谁知道散列这个密码的方法?

scala elasticsearch elasticsearch-5
2个回答
0
投票

从代码库中分离认证信息有一种共同的模式。您需要将此类信息存储在其他位置,这些信息不受源版本控制系统的控制或忽略。并且您实现了如何在代码中访问它们的方式。

例如,您可以在json文件中存储elasticsearch的用户名和密码,git或您使用的其他VCS会忽略该文件。然后在您的代码中只读取json文件,解析用户名和密码并将它们提供给连接配置。所以用户名和密码只保留在本地。如果你需要在另一个地方运行代码,你只需要创建一个带有适当用户名和密码的json文件。


-1
投票

您可以将密码存储为加密文本,然后在需要时将其解密。例如,请参阅How to encrypt and decrypt String with my passphrase in Java (Pc not mobile platform)?

或者,看到这个答案val encryptedPassword = BCrypt.hashpw(password.trim(),BCrypt.gensalt())

https://stackoverflow.com/questions/43189900/hash-salt-and-save-password-slick

可以从Spring获得BCrypt(例如)

http://docs.spring.io/spring-security/site/docs/current/apidocs/org/springframework/security/crypto/bcrypt/BCrypt.html

© www.soinside.com 2019 - 2024. All rights reserved.