Frage

Ich möchte keine unverschlüsselten Passwörter in die Anwendungskonfigurationsdatei einfügen.

Diese Frage: Verschlüsseln des DB-Passworts in der Anwendung.konf hat eine großartige Lösung für das Problem, aber es funktioniert nur für Play 1.

Kennt jemand eine Lösung, die für Play 2.0 funktioniert?Ich verwende Anorm in der Scala-Version von Play 2.0.2.

War es hilfreich?

Lösung 3

Dank der Diskussion mit Raffaele und nach meiner eigenen Untersuchung des Codes scheint es, dass Play 2.0 nicht erlaubt, DB-Kennwörter zu verschlüsseln.

wenn ich etwas vermisst habe, lass es mich wissen.

edit : man kann das Problem mit dem benutzerdefinierten Datenbanktreiber auf folgende Weise umgehen: generasacodicetagpre.

Sie ersetzen dann application.conf / db..driver von my.com.mydecrypting-Treiber.Nicht perfekt, aber funktioniert für mich ...

Andere Tipps

Alle Bemühungen sind sinnlos. Wenn wir das Passwort in einer Datenbank eingeben, ist der Fall, dass der Mensch Kennwörter in ihrem Gehirn behalten kann, und ihre Gehirne sind nicht lesbar . Es heißt asymmetrische -verschlüsselung.

Die Sache, über die Sie sprechen, ist nur mit symmetrischer -verschlüsselung möglich: Das Programm hat den Schlüssel zur Laufzeit und verwendet diesen Schlüssel, um das DB-Kennwort zu entschlüsseln. Aber was ist der Punkt, wie das DB-Kennwort mit einem Schlüssel verschlüsselt wird, und dennoch diesen Schlüssel öffentlich verfügbar? (Dies gilt sowohl für Java-Quellen als auch für kompilierte Klassen). Eine Kette ist nur so stark wie seine schwächste Verbindung.

Wenn eine Maschine eine Verbindung zu einem DB herstellen muss, benötigt er ein Passwort: Wir speichern dieses Kennwort in Klartext, da das Programm es verwenden muss, und Es ist kein menschlicher Eingang erforderlich. Alles, was wir tun können, um die Sicherheit durchzusetzen, besteht darin, den Zugriff auf diese Klartextdatei einzuschränken, indem er schließlich mit einem Kennwort schützt, das nur im Verstand des Administrators gespeichert ist (BTW, wahrscheinlicher, dass der Administrator alle Kennwörter in einer Datenbank in einer Datenbank behält, vielleicht mit einem Master Passwort). Beachten Sie, dass sich die Dinge nicht ändern, wenn Sie das erwähnte Play-Plugin verwenden.

Die einzige andere Sache, die mir in meinen Gedanken kommt, ist eine Spiel-App, die nur eine Verbindung zum DB verbindet, wenn der Administrator das DB-Kennwort eingeht (aber wirklich nur eine Denkübung)

Ich weiß, dass es etwas spät ist, aber es gibt keine neueren Diskussionen über dieses Problem.Ich möchte die eigentliche Lösung teilen (Play v.2.5.X), wie in vorgeschlagen Dokumentation, ist es jetzt möglich, das zu überschreiben GuiceApplicationLoader so konfigurieren Sie die GuiceApplicationBuilder um irgendwie die anfänglichen Konfigurationen zu verarbeiten.

In einer neuen Klasse modules/ApplicationLoaderConfig.scala:

import javax.crypto.Cipher
import javax.crypto.spec.SecretKeySpec
import javax.xml.bind.DatatypeConverter

import play.api.inject.guice._
import play.api.{ApplicationLoader, Configuration}

class ApplicationLoaderConfig extends GuiceApplicationLoader() {

  override def builder(context: ApplicationLoader.Context): GuiceApplicationBuilder = {

    // Decrypt secrets
    val decryptedConfig = context.initialConfiguration ++
      Configuration("config.to.descrypt.1" -> decryptDES(context.initialConfiguration.getString("config.to.descrypt.1").get)) ++
      Configuration("config.to.descrypt.2" -> decryptDES(context.initialConfiguration.getString("config.to.descrypt.2").get))

    initialBuilder
      .in(context.environment)
      .loadConfig(decryptedConfig)
      .overrides(overrides(context): _*)
  }

  private def decryptDES(secret: String): String = {
    val key = "12345678"
    val skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "DES")

    val cipher = Cipher.getInstance("DES/ECB/PKCS5Padding")
    cipher.init(Cipher.DECRYPT_MODE, skeySpec)

    new String(cipher.doFinal(DatatypeConverter.parseBase64Binary(secret)))
  }
}

Fügen Sie auch hinzu application.config:

play.application.loader = "modules.ApplicationLoaderConfig"
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top