Wie vermeidet man das Speichern von Passwörtern im Klartext für tomcat's server.xml Ressourcendefinition einer DataSource?
Die Ressourcen-definition in der tomcat server.xml
so aussieht...
<Resource
name="jdbc/tox"
scope="Shareable"
type="javax.sql.DataSource"
url="jdbc:oracle:thin:@yourDBserver.yourCompany.com:1521:yourDBsid"
driverClassName="oracle.jdbc.pool.OracleDataSource"
username="tox"
password="toxbaby"
maxIdle="3"
maxActive="10"
removeAbandoned="true"
removeAbandonedTimeout="60"
testOnBorrow="true"
validationQuery="select * from dual"
logAbandoned="true"
debug="99"/>
Wird das Passwort im Klartext. Wie um dies zu vermeiden?
InformationsquelleAutor der Frage dacracot | 2008-09-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie gesagt, vor der Verschlüsselung der Passwörter ist nur das verschieben das problem woanders.
Sowieso, es ist ganz einfach.
Schreiben Sie einfach eine Klasse mit statischen Felder, die für Ihren geheimen Schlüssel und so weiter, und statische Methoden zum verschlüsseln, entschlüsseln Sie Ihre Passwörter.
Verschlüsseln Sie Ihr Passwort in der Tomcat-Konfigurationsdatei (
server.xml
oderyourapp.xml
...) die Verwendung dieser Klasse.- Und entschlüsseln des Kennworts "on the fly" in Tomcat, verlängern Sie das DBCP -
BasicDataSourceFactory
und verwenden Sie diese Fabrik in Ihrem Ressource.Wird es so Aussehen:
Und für die custom factory:
Hoffe, das hilft.
InformationsquelleAutor der Antwort Jerome Delattre
Tomcat hat ein Passwort FAQdie speziell für Adressen Ihre Frage. Kurz gesagt: Bewahren Sie das Kennwort an, die klar und korrekt Sperrung Ihres Servers.
Diese Seite bietet auch einige Anregungen, wie security-by-obscurity könnte verwendet werden, um pass ein auditor Checkliste.
InformationsquelleAutor der Antwort Ryan
Tomcat muss wissen, wie die Verbindung zu der Datenbank, so braucht es Zugriff auf das Klartext-Passwort. Wenn das Passwort in verschlüsselter, Tomcat muss wissen, wie es zu entschlüsseln, so sind Sie nur verschieben das problem woanders.
Das eigentliche problem ist: wer kann Zugriff
server.xml
außer für Tomcat? Eine Lösung ist, um schreib-Zugriff aufserver.xml
nur für root-Benutzer, die erfordern, dass Tomcat gestartet ist mit root-rechten: wenn ein böswilliger Benutzer erhält root-Rechte auf dem system, verlieren Sie eine Datenbank-Passwort ist wahrscheinlich eine kleinere Sorge.Andernfalls geben Sie das Passwort manuell bei jedem Start, aber dies ist selten eine sinnvolle option.
InformationsquelleAutor der Antwort gameame
Als @Ryan erwähnt, bitte Lesen Sie Tomcat Tomcat Passwort FAQ vor der Implementierung dieser Lösung. Sie sind nur das hinzufügen von obscurity keine security.
@Jerome Delattre Antwort funktioniert für einfache JDBC-Datenquellen, aber nicht für komplizierter diejenigen, die eine Verbindung als Teil des datasource-Konstruktion (z.B. oracle.jdbc.xa.client.OracleXADataSource).
Dies ist der alternative Ansatz, der ändert das Passwort vor dem aufrufen der bestehenden Fabrik. Unten ist ein Beispiel einer Fabrik, die für eine grundlegende Datenquelle und eines für eine Atomikos JTA-kompatiblen XA-datasource.
Einfaches Beispiel:
Atomikos Beispiel:
Update-password-Wert in Referenz:
Einmal die .jar-Datei, die diese Klassen sind in der Tomcat-classpath können Sie aktualisieren Sie Ihre server.xml um Sie zu benutzen.
InformationsquelleAutor der Antwort JustinKSU
Hinweis:
Können Sie WinDPAPI zum verschlüsseln und entschlüsseln von Daten
InformationsquelleAutor der Antwort Gawri Edussuriya
Nach 4 Stunden Arbeit, suchen, Fragen und Antworten ich habe die Lösung.
Auf der Grundlage der Antwort von @Jerome Delattre hier ist der komplette code (mit dem JNDI Data-source-Konfiguration).
Context.xml
Custom Data Source Factory:
Datenquelle bean:
InformationsquelleAutor der Antwort HolloW
Allen vorhergehenden wurde gesagt, wenn Sie immer noch wollen, um zu vermeiden, nur-text-Kennwörter, die Sie verwenden können, die einen Hash-Algorithmus wie SHA-256 oder (vorzugsweise) SHA-512. Wenn ein Passwort erstellt wird, erhalten Sie den Hash-Wert, und speichern Sie es eher als das Kennwort. Wenn sich ein Benutzer anmeldet, hash das Passwort ein und sehen es entspricht dem gespeicherten Hash das Passwort.
Hashing-algorithmen nehmen eine Zeichenkette (oder Anzahl) von einem kleinen Buchstaben (oder Zahl) den Raum in ein viel größeres, in einer Weise, die teuer in umgekehrter.
InformationsquelleAutor der Antwort stuartw
Verwenden wir C#'s SHA1CryptoServiceProvider
)
InformationsquelleAutor der Antwort Brad8118