Kennwort in Konfigurationsdateien verschlüsseln?
Ich habe ein Programm, das liest die server-Informationen aus einer Konfigurations-Datei, und würde gerne verschlüsseln Sie das Kennwort in, Konfiguration, Lesen von meinem Programm und entschlüsselt.
Requirments:
- Verschlüsseln von Klartext-Passwort in der Datei gespeichert
- Entschlüsseln der verschlüsselten Passwort Lesen in der Datei von meinem Programm
Jede reccomendations in, wie ich gehen würde, über das tun dies? Ich dachte an das schreiben meines eigenen Algorithmus, aber ich glaube, es wäre furchtbar unsicher.
InformationsquelleAutor der Frage Petey B | 2009-07-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen einfachen Weg, dies zu tun ist die Verwendung von Passwort-Basierte Verschlüsselung in Java. Dies ermöglicht es Ihnen, verschlüsseln und entschlüsseln einen text mit einem Kennwort.
Grundsätzlich bedeutet dies, dass die Initialisierung einer
javax.crypto.Cipher
mit Algorithmus"AES/CBC/PKCS5Padding"
und bekommen einen Schlüssel ausjavax.crypto.SecretKeyFactory
mit der"PBKDF2WithHmacSHA512"
Algorithmus.Hier ist ein code Beispiel (aktualisierte zu ersetzen, die weniger sicher MD5-basierte Variante):
Bleibt ein problem: Wo sollten Sie speichern das Kennwort, das Sie zum verschlüsseln der Passwörter? Sie können speichern Sie es in der Quell-Datei und verschleiern es, aber es ist auch nicht schwer es wieder zu finden. Alternativ, Sie können es als ein-system-Eigenschaft, wenn Sie starten Sie den Java-Prozess (
-DpropertyProtectionPassword=...
).Das gleiche Problem bleibt, wenn Sie den KeyStore, das ist auch durch ein Passwort geschützt. Im Grunde, müssen Sie ein master-Passwort irgendwo, und es ist ziemlich schwer zu schützen.
InformationsquelleAutor der Antwort Johannes Brodwall
Ja, auf jeden Fall nicht schreiben Sie Ihre eigenen Algorithmus. Java hat viele Kryptografie-APIs.
Wenn Sie die OS, die Sie installieren auf einen keystore, dann könnte man verwenden, zu speichern, Ihre Krypto-Schlüssel, die Sie benötigen zum verschlüsseln und entschlüsseln der vertraulichen Daten in Ihrer Konfiguration oder andere Dateien.
InformationsquelleAutor der Antwort JeeBee
Check-out jasypt, die eine Bibliothek bietet grundlegende Verschlüsselungs-Funktionen mit minimalem Aufwand.
InformationsquelleAutor der Antwort
Ich denke, dass der beste Ansatz ist, um sicherzustellen, dass Ihre config-Datei (mit Passwort) ist nur zugänglich für einen bestimmten Benutzer-account. Zum Beispiel könnten Sie haben eine Anwendung, die bestimmte Benutzer
appuser
zu denen nur Vertrauenswürdige Personen haben das Passwort (und auf die Siesu
).So, es gibt keine lästigen Kryptographie Aufwand und Sie haben noch ein Passwort, das sicher ist.
EDIT: ich gehe davon aus, dass Sie nicht exportieren Ihre Anwendung Konfiguration außerhalb der vertrauten Umgebung (von denen ich nicht sicher bin, würde irgendeinen Sinn machen, da die Frage)
InformationsquelleAutor der Antwort oxbow_lakes
Sowie Probleme zu lösen, die der master-Passwort - der beste Ansatz ist, nicht zu speichern, das Passwort irgendwo, sollte die Anwendung verschlüsseln von Kennwörtern für sich selbst - so, dass nur er entschlüsseln kann. Also wenn ich mit einem .config-Datei würde ich Folgendes tun, mySettings.config:
so, ich lese die keys, die im Text erwähnt
encryptTheseKeys, gelten die Brodwalls Beispiel von oben auf Sie und
schreiben Sie zurück, um die Datei mit einem marker irgendeiner Art der (sagen wir crypt:), damit die Anwendung weiß, es nicht wieder zu tun, die Ausgabe würde wie folgt Aussehen:
Nur stellen Sie sicher, dass Sie die Originale in Ihren eigenen sicheren Ort...
InformationsquelleAutor der Antwort user1007231
Die große Nummer, und der Elefant im Raum und all das, ist, dass wenn Ihre Anwendung bekommen können, die das Passwort, dann ein hacker mit Zugriff auf die box bekommen kann es auch!
Der einzige Weg etwas zu umgehen, ist, dass die Anwendung fragt nach dem "master-Kennwort" auf der Konsole über Standard-Input, und verwendet dann diese zum entschlüsseln der Kennwörter, die auf Datei. Natürlich, das komplett macht ist unmöglich, die Anwendung starten unbeaufsichtigt zusammen mit dem OS, wenn es bootet.
Aber selbst mit dieser Ebene der ärger, wenn es einem hacker gelingt root-Zugriff (oder auch nur Zugang als Benutzer Ihre Anwendung ausgeführt wird), könnte er das Speicherabbild und finden Sie das Passwort gibt.
Die Sache, um gewährleisten, ist damit nicht die gesamte Gesellschaft haben Zugriff auf den Produktionsserver (und damit die Passwörter), und stellen Sie sicher, dass es unmöglich ist zu knacken diese box!
InformationsquelleAutor der Antwort stolsvik
Habe ich eine einfache PropertyEncryptor in Java. Sie können verschlüsseln Sie Ihre property-Dateien während des build. Dann können Sie entschlüsseln mithilfe eines EncryptionHelper in Ihre Programme. Finden Sie die Quell-codes in dieser Lage http://devpinoy.org/blogs/jakelite/archive/2009/07/14/encrypting-passwords-in-java-property-files.aspx
InformationsquelleAutor der Antwort jake.stateresa
Versuchen Sie es mit ESAPIs Methoden der Verschlüsselung. Es ist einfach zu konfigurieren und Sie können auch einfach ändern Sie Ihre Tasten.
http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/Encryptor.html
Du
1)verschlüsseln
2)entschlüsseln
3)Zeichen
4)unsign
5)hashing
6)Zeit-basierte Signaturen und vieles mehr mit nur einer library.
InformationsquelleAutor der Antwort Rohit Salecha
Sehen, was verfügbar ist in Steg für die Speicherung von Passwort (oder hashes) in Konfigurationsdateien, und überlegen Sie, ob die OBF-Codierung könnte für Sie nützlich sein. Dann finden Sie in der Quelle, wie es gemacht wird.
http://www.eclipse.org/jetty/documentation/current/configuring-security-secure-passwords.html
InformationsquelleAutor der Antwort Thorbjørn Ravn Andersen
Je nachdem, wie sicher Sie müssen den Konfigurations-Dateien oder wie zuverlässig Ihre Anwendung ist, http://activemq.apache.org/encrypted-passwords.html kann eine gute Lösung für Sie.
Wenn Sie nicht zu viel Angst davor, das Kennwort entschlüsselt werden und es ist sehr einfach zu konfigurieren über eine bean zum speichern der Passwort-Schlüssel. Allerdings, wenn Sie brauchen mehr Sicherheit können Sie eine Umgebungsvariable mit dem Geheimnis und entfernen Sie es nach dem launch. Mit dieser haben Sie sorgen über die Anwendung /server down geht und nicht Anwendung nicht automatisch Wiederstarten.
InformationsquelleAutor der Antwort CPrescott
Wenn Sie java 8 die Verwendung des internen Base64 encoder und decoder können vermieden werden, indem Sie ersetzen
return new BASE64Encoder().encode(bytes);
mit
return Base64.getEncoder().encodeToString(bytes);
und
return new BASE64Decoder().decodeBuffer(property);
mit
return Base64.getDecoder().decode(property);
Beachten Sie, dass diese Lösung nicht schützen Sie Ihre Daten, wie die Methoden für die Entschlüsselung sind an der gleichen Stelle gespeichert. Es macht es nur schwieriger zu brechen. Vor allem vermeidet es, drucken Sie es und zeigen Sie es an alle mit dem Fehler.
InformationsquelleAutor der Antwort Antonio Raposo