Шифрование пароля db в application.conf
Play framework [Я использую v1.2.3] не поддерживает шифрование паролей db, хранящееся в application.conf. Это сохраняется как текстовый файл. DBPlugin считывает это свойство и создает пул соединений.
Требование состоит в том, чтобы зашифровать этот пароль - например, используя Jasypt. Некоторые предприятия применяют это в качестве меры безопасности.
Кто-нибудь пытался сделать что-то подобное?
Так как DBPlugin загружается на ApplicationStart, его невозможно взломать. Это оставляет писать пользовательский плагин, а onConfigurationRead устанавливает новое значение для db.password свойства application.conf.
Любые предложения?
Ответы
Ответ 1
Наконец, я исправил это, написав Play Plugin. Написание плагина Play также очень просто.
Вот пример кода:
package plugin;
import java.util.Properties;
import org.jasypt.util.text.StrongTextEncryptor;
import play.Play;
import play.PlayPlugin;
public class DBPasswordInject extends PlayPlugin {
@Override
public void onConfigurationRead() {
StrongTextEncryptor strongTextEncryptor = new StrongTextEncryptor();
strongTextEncryptor.setPassword("$Look##$2");// this password has been used to encrypt
String encryptedPassword = Play.configuration.getProperty("db.pass");
String decrypted = strongTextEncryptor.decrypt(encryptedPassword);
Play.configuration.setProperty("db.pass", decrypted); //override
super.onConfigurationRead();
}
}
Единственным недостатком является то, что я не смог использовать org.jasypt.util.password.StrongPasswordEncryptor, потому что не существует метода дешифрования.
Ответ 2
Ну, проблема в том, какой пароль следует использовать для шифрования пароля? Если вы используете пароль по умолчанию, это также небезопасно. Если вы поместите его в файл конфигурации, у вас возникнет рекурсивная проблема. Единственное решение, которое я вижу, - это использовать собственный плагин, где хранится пароль, и изменять значения в свойствах приложения. Тогда пароль может быть сохранен без проблем. По крайней мере, в Play1.x.