2009-04-15 11 views
1

Bitte verzeihen Sie mein Verständnis hier. Ich habe einen lokalen mysql-Server und ich muss auf diese Daten über einen verschlüsselten Kanal von einer Java-Webanwendung, die auf einem Webhost läuft, zugreifen können. Kann mir jemand den besten Weg empfehlen?Serverkonfiguration Fragen

Vielen Dank! Joshua

+0

gehört auf serverfault.com! –

Antwort

0

AFAIK MySQL unterstützt keine verschlüsselten Streams (korrigieren Sie mich, wenn ich falsch liege).

Eine Lösung, die ich sehen kann, wäre, einen verschlüsselten Tunnel zwischen dem MySQL-Server und dem Web-Host zu haben, und Verbindungen durch die Verbindung zur Datenbank zu leiten.

1

SSH Port Forwarding

In diesem Fall könnte man Anschluss nach vorn db_server: 3306 bis web_server: 3306. Dann würde es so aussehen, als würde eine lokale MySQL-Datenbank auf dem Web-Server laufen, die auf Port 3306 horcht. Allerdings wird localhost: 3306 auf dem Webserver tatsächlich sicher zu localhost: 3306 auf dem Datenbankserver weitergeleitet.

Um dies einzurichten, benötigen Sie ein Passwort-loses Schlüsselpaar, damit der SSH-Tunnel automatisch gestartet werden kann. Gehen Sie wie folgt vor:

db_serv$ ssh-keygen -t rsa 
db_serv$ scp .ssh/id_rsa.pub webserver: 
web_serv$ cd ~; mkdir .ssh 
web_serv$ cat id_rsa.pub >> .ssh/authorized_keys2 
web_serv$ chmod -R go-rwx .ssh; rm id_rsa.pub 
db_serv$ ssh webserver 

Der letzte Befehl sollte lassen Sie sich von dem Datenbankserver SSH, ohne ein Passwort bereitstellt. Das Schlüsselpaar führt die Authentifizierung durch.

Der Befehl einen SSH-Tunnel zu öffnen ist:

db_server $ ssh -f -q N -R3306: db_server: 3306 Webserver

Sie können dann lokalen Datenbankzugriff auf dem Webserver testen. Sie müssen die Berechtigungen in der MySQL-Datenbank für den Benutzer und das Kennwort, die Sie verwenden, korrekt festlegen.

web_serv $ mysql -h 127.0.0.1 -P 3306 -u user -p db_name

Sie werden wahrscheinlich die 'ssh' Zeile über zu /etc/rc.d/rc.local hinzufügen möchten (auf Red Hat), damit der Tunnel bei Neustarts geöffnet wird. Denken Sie daran, dass Ihr Web-App nicht auf die Datenbank zugreifen kann, wenn der Tunnel ausfällt.

0

Ja, MySQL unterstützt verschlüsselte Verbindungen über SSL.

Sie benötigen eine Version von MySQL Server, die entweder mit OpenSSL oder dem mitgelieferten yaSSL erstellt wurde. Wenn Ihr MySQL-Server nicht mit SSL-Unterstützung erstellt wurde, geben --ssl und die zugehörigen Optionen Fehler.

Sie müssen den MySQL-Server (mysqld) mit der Option --ssl und den zugehörigen Optionen starten, um den SSL-Schlüssel und das Zertifikat anzugeben. Weitere Informationen zum Aktivieren von MySQL Server für die Unterstützung von SSL finden Sie unter http://dev.mysql.com/doc/refman/5.1/en/secure-connections.html.

Ihr Java-Client muss auch SSL unterstützen. Sie müssen beim Herstellen einer Verbindung ein Clientzertifikat angeben.Weitere Informationen zum Herstellen sicherer Verbindungen mit MySQL von Java finden Sie unter http://dev.mysql.com/doc/refman/5.1/en/connector-j-reference-using-ssl.html.

0

Dies ist im Grunde das gleiche wie jede andere Antwort hier, aber hier geht es trotzdem. Verwenden Sie einen VPN-Tunnel wie openVPN, um die Kommunikation zu verschlüsseln. Das Beste daran ist die Transparenz. Wenn Sie auf dem VPN sind, müssen Sie nicht mehr darüber nachdenken, senden Sie einfach eine sichere Kommunikation. Natürlich ist es nicht einfach, es einzurichten ...