Cipher/Encrypt 并使用 Talend Data Integration 解密 .properties 文件中的密码
Cipher/Encrypt and uncrypt passwords in .properties files using Talend Data Integration
运行 作业的一种建议方法是将上下文参数保存在属性文件中。
喜欢这个:
#
#Wed Dec 16 18:23:03 CET 2015
MySQL_AdditionalParams=noDatetimeStringSync\=true
MySQL_Port=3306
MySQL_Login=root
MySQL_Password=secret_password_to_cipher
MySQL_Database=talend MySQL_Server=localhost
这真的很简单也很有用,但问题是密码是明文保存的。
所以我正在寻找轻松加密的方法。
这里有 2 个非常有趣的问题,已经在 Stack overflow 中讨论过关于密码加密技术的问题:
- Encrypt passwords in configuration files
- Securing passwords in properties file
但它们是 Java 原生的,我正在寻找更好的 Talend 集成。我已经在我的 Talend 作业中尝试过不同的方法:
- 使用base64密码编码进行简单混淆
- 使用来自锻造厂的 tEncrypt and tDecrypt 个组件
- 使用 Jasypt ot JavaXCrypto 个库
- 使用来自 forgepwdstore 的例程
所有这些技术都在教程(法语,对不起)中描述,解释如何 crypt passwords in Talend
但是遇到了另一个问题:用于cipher/uncipher的密钥总是清晰的,所以如果你知道解决这一点的好方法我会很高兴实验一下.
从根本上说,任何应用程序可以访问的内容都可以通过侵入 system/taking 应用程序控制权的人访问。
即使您使用混淆(例如 base64 或更高级),或在密钥可用的情况下使用真正的加密(即使它们也可能被混淆)。
所以基本上没有足够好的方法来做你想要做的事情,更糟的是:它根本不存在。
那你会怎么做呢?
1.限权
MySQL_Login=root
是个大问题……应用程序的妥协将导致数据库(及其数据)立即受到损害。
因此,将权限限制在应用程序绝对需要的范围内。
这确实应该做,而且很容易实现。
2。单独的用户和管理员级别访问权限
如果仅在用户交互后才需要某些东西,您可以使用用户提供的秘密(例如,用户的密码可以提供哈希值,可以 xor-ed 并为您提供一个密钥并不总是出现在应用程序或配置文件中)。
您可以使用这个,例如将权限分为两个级别:普通用户级别,仅具有使应用程序为普通用户工作的最低限度权限(但例如,不允许管理应用程序本身的应用程序管理权限),并使用保留的秘密当没有管理员登录到应用程序的管理部分时,用户将(部分)密钥保存在应用程序之外。
老实说,这很难做到,也不是那么容易。
但即使有了所有这些,您基本上 也必须 考虑访问例如如果应用程序被破坏,数据库将被破坏。
这也是为什么在没有采取适当预防措施的情况下不应(绝不能)将应用程序用户密码等数据存储在数据库中的原因。
运行 作业的一种建议方法是将上下文参数保存在属性文件中。 喜欢这个:
#
#Wed Dec 16 18:23:03 CET 2015
MySQL_AdditionalParams=noDatetimeStringSync\=true
MySQL_Port=3306
MySQL_Login=root
MySQL_Password=secret_password_to_cipher
MySQL_Database=talend MySQL_Server=localhost
这真的很简单也很有用,但问题是密码是明文保存的。
所以我正在寻找轻松加密的方法。 这里有 2 个非常有趣的问题,已经在 Stack overflow 中讨论过关于密码加密技术的问题:
- Encrypt passwords in configuration files
- Securing passwords in properties file
但它们是 Java 原生的,我正在寻找更好的 Talend 集成。我已经在我的 Talend 作业中尝试过不同的方法:
- 使用base64密码编码进行简单混淆
- 使用来自锻造厂的 tEncrypt and tDecrypt 个组件
- 使用 Jasypt ot JavaXCrypto 个库
- 使用来自 forgepwdstore 的例程
所有这些技术都在教程(法语,对不起)中描述,解释如何 crypt passwords in Talend
但是遇到了另一个问题:用于cipher/uncipher的密钥总是清晰的,所以如果你知道解决这一点的好方法我会很高兴实验一下.
从根本上说,任何应用程序可以访问的内容都可以通过侵入 system/taking 应用程序控制权的人访问。 即使您使用混淆(例如 base64 或更高级),或在密钥可用的情况下使用真正的加密(即使它们也可能被混淆)。
所以基本上没有足够好的方法来做你想要做的事情,更糟的是:它根本不存在。
那你会怎么做呢?
1.限权
MySQL_Login=root
是个大问题……应用程序的妥协将导致数据库(及其数据)立即受到损害。
因此,将权限限制在应用程序绝对需要的范围内。
这确实应该做,而且很容易实现。
2。单独的用户和管理员级别访问权限
如果仅在用户交互后才需要某些东西,您可以使用用户提供的秘密(例如,用户的密码可以提供哈希值,可以 xor-ed 并为您提供一个密钥并不总是出现在应用程序或配置文件中)。
您可以使用这个,例如将权限分为两个级别:普通用户级别,仅具有使应用程序为普通用户工作的最低限度权限(但例如,不允许管理应用程序本身的应用程序管理权限),并使用保留的秘密当没有管理员登录到应用程序的管理部分时,用户将(部分)密钥保存在应用程序之外。
老实说,这很难做到,也不是那么容易。
但即使有了所有这些,您基本上 也必须 考虑访问例如如果应用程序被破坏,数据库将被破坏。
这也是为什么在没有采取适当预防措施的情况下不应(绝不能)将应用程序用户密码等数据存储在数据库中的原因。