加密数据库密码MongoDb

时间:2015-11-25 18:55:26

标签: java mongodb jax-rs

我们有一个休息api,需要与Mongodb(现在是postgres)交谈,现在在api的property / config文件中我们正在硬编码数据库密码。我们使用JDBC连接到postgres,我们需要决定是否使用相同的JDBC或Mongoclient连接到MongoDB。

所以问题是

  • 有没有办法加密数据库密码并发送到网络并连接到Mongo Db,而不是在属性文件中硬编码密码。 或
  • 使用SSL从rest api连接到MongoDB,以便密码甚至可以是属性文件中的纯文本。

以上哪一个是避免安全威胁的最佳方式......我们在AWS中同时拥有api和数据库......

3 个答案:

答案 0 :(得分:1)

无法单独加密Mongo密码,您需要使用SSL加密整个连接。

如果您要管理自己的mongodb实例,则需要查看此文档:https://docs.mongodb.org/manual/tutorial/configure-ssl/

如果您正在招聘一些mongodb提供商(例如mongolab),他们通常会提供一种在您的连接中启用SSL的方法(但他们通常会将此功能限制为付费方案)。

存储数据库密码的常用方法是通过环境变量。这样您就不会将这些值保存到git中,您可以直接在服务器上配置这些值。

要在UNIX中配置环境变量,您需要像这样导出:

export MONGODB_DB_URL_ADMIN=mongodb://myuser:mypassword@ds01345.mongolab.com:35123/my_database_name

并在代码中使用它(NodeJS + mongoose示例):

var mongoDbURL = process.env.MONGODB_DB_URL_ADMIN || "mongodb://127.0.0.1/myLocalDB";
var db = mongoose.createConnection(mongoDbURL);
db.model("MyModel", mySchema, "myCollectionName");

如果您使用的是PaaS(如Heroku),它们通常会提供一种使用其界面设置环境变量的方法。这样,在您使用的每个实例中都会配置此变量。如果要设置自己的Linux实例,则需要将这些值放在启动脚本(.bashrc)或其他方法(例如/ etc / environment)下

答案 1 :(得分:0)

您可以使用SSL连接,因为您在AWS上托管。

Normally MongoDB does not have SSL support,但如果您使用企业版MongoDB,则会包含SSL支持。

Per Amazon's MongoDB Security Architecture White Paper,AWS确实使用MongoDB Enterprise,这意味着它支持SSL。

答案 2 :(得分:0)

到目前为止,其他回应似乎已经过时了。按照all versions of MongoDB support TLS 1.1,4.0版本,仅企业版支持“ FIPS模式”。