Liebe Forenmitglieder, lieber willuhn,
erst einmal herzlichen Dank für die tollen Programme. Super, dass es so etwas kostenlos gibt! Ich versuche nun schon seit einer Woche, eine sichere Verbindung zu einem MySQL Server herzustellen, von welchem ich das Serverzertifikat herunterladen kann, welcher SSL unterstütz, aber auf welchen ich keine eigenen Zertifikate hochladen kann. Ich versuche, mit SSL keine Authentifizerung zu erreichen, sondern nur eine Verschlüsselung der zu übertragenden Daten. Ich habe alle Hilfeseiten und Beschreibungen im Internet durchgelesen und bin jetzt auch so weit, dass ich mit einem selbstgeschriebenen HelloWorld Javaprogramm per JDBC SSL gesichert auf die Datenbank zugreifen kann. Der SSL-gesicherte Zugriff über MySQL Workbench funktioniert ebenfalls.
Was mir nicht klar ist, ist welche Schritte ich jetzt unternehmen muss, damit auch jameica (welches ja ebenfalls ein Javaprogramm ist), mit den gleichen Parametern SSL gesichert zugreifen kann. Ich habe den Verdacht, dass Jameica versucht, aus einer Art eigenem Keystore ein Zertifikat an den Server zu übermitteln, der dieses dann ablehnt. Ich möchte einfach nur, dass Jameica das Serverzertifikat verifiziert und dann die Verbindung verschlüsselt.
Kann mir jemand sagen, wie ich das erreichen kann?
Hier sind die Schritte, die ich bisher durchgeführt habe:
Über einen Rat/Hinweis in die richtige Richtung, wie ich Jameica/Hibiscus aufrufen kann, so dass keine Authentifizierung sondern nur Verschlüsselung über SSL stattfindet, wäre ich euch sehr dankbar!
Ich würde das Ergebnis dann auch wieder hier posten. Es könnte ja für mehrere Benutzer interessant sein, wenn man Jameica/Hibiscus/JVerein mit den recht günstigen MySQL-Datenbanken von Amazon benutzen könnte. Wie gesagt, ich habe das Gefühl, dass nur noch ein sehr kleiner Schritt fehlt!
Im Voraus vielen Dank für eure Hilfe! Viele Grüße
Stephan
erst einmal herzlichen Dank für die tollen Programme. Super, dass es so etwas kostenlos gibt! Ich versuche nun schon seit einer Woche, eine sichere Verbindung zu einem MySQL Server herzustellen, von welchem ich das Serverzertifikat herunterladen kann, welcher SSL unterstütz, aber auf welchen ich keine eigenen Zertifikate hochladen kann. Ich versuche, mit SSL keine Authentifizerung zu erreichen, sondern nur eine Verschlüsselung der zu übertragenden Daten. Ich habe alle Hilfeseiten und Beschreibungen im Internet durchgelesen und bin jetzt auch so weit, dass ich mit einem selbstgeschriebenen HelloWorld Javaprogramm per JDBC SSL gesichert auf die Datenbank zugreifen kann. Der SSL-gesicherte Zugriff über MySQL Workbench funktioniert ebenfalls.
Was mir nicht klar ist, ist welche Schritte ich jetzt unternehmen muss, damit auch jameica (welches ja ebenfalls ein Javaprogramm ist), mit den gleichen Parametern SSL gesichert zugreifen kann. Ich habe den Verdacht, dass Jameica versucht, aus einer Art eigenem Keystore ein Zertifikat an den Server zu übermitteln, der dieses dann ablehnt. Ich möchte einfach nur, dass Jameica das Serverzertifikat verifiziert und dann die Verbindung verschlüsselt.
Kann mir jemand sagen, wie ich das erreichen kann?
Hier sind die Schritte, die ich bisher durchgeführt habe:
- Download des Serverzertifikats von http://s3.amazonaws.com/rds-downloads/mysql-ssl-ca-cert.pem
- , beliebiges Passwort eingeben und wiederholen. Erzeugt Datei truststoreCodekeytool -import -alias myqlServerCACert -file mysql-ssl-ca-cert.pem -keystore truststore
- Download des Java JDK
- Erzeugen der Datei HelloWorld.java mit einem Texteditor und folgendem Inhalt:
Codeimport java.sql.*;
public class HelloWorld{
public static void main(String args[]){
System.out.println("Starting program");
try {
//Register the JDBC driver for MySQL.
Class.forName("com.mysql.jdbc.Driver");
String url =
"jdbc:mysql://server:3306/dbname?useSSL=true&requireSSL=true";
Connection con =
DriverManager.getConnection(
url,"javatestuser", "secretpassword");
//Display URL and connection information
System.out.println("URL: " + url);
System.out.println("Connection: " + con);
con.close();
} catch(Exception ex){
ex.printStackTrace();
}
}
}
Hierbei server, dbname, javatestuser und secretpassword an die Daten des Servers anpassen. - Die Datei mit kompilierenCodejavac HelloWorld.java
- Datei mit ausführen. Es wird korrekt per SSL verbunden und die URL und die Connection ausgegeben. Bis hierhin geht alles gut.Codejava -Djavax.net.ssl.trustStore="path\to\truststore" -Djavax.net.ssl.trustStorePassword="mysecrettruststorepassword" -Djavax.net.debug=all -classpath ".;path\to\mysql-connector-java-5.0.7-bin.jar" HelloWorld
- Nun versuche ich, Jameica mit denselben Paramtern aufzurufen. Dazu habe ich die Zugangsdaten in die Datei de.willuhn.jameica.hbci.rmi.HBCIDBService.properties eingetragen und diese im Unterverzeichnis cfg gespeichert. Dann Jameica aufgerufen mit: . Diesen Befehl habe ich mir in diesem Forum zusammengesucht, leider konnte ich die dort erwähnte .bat-Datei für Windows nirgends im jameica/hibiscus-Paket mehr finden, sondern nur noch kompilierte exe-Dateien.Codejava -Djavax.net.ssl.trustStore="path\to\truststore" -Djavax.net.ssl.trustStorePassword="mysecrettruststorepassword" -Djavax.net.debug=all -Xmx256m -jar jameica-win32.jar -f "path\to\jameica\data" %1 %2 %3 %4
- Leider bekomme ich von Jameica den Fehler:
Code[Fri Jan 03 15:10:40 CET 2014][ERROR][de.willuhn.jameica.plugin.PluginLoader.init] unable to init plugin hibiscus: Hibiscus-Datenbank konnte nicht initialisiert werden.
connection to database.jdbc:mysql://[servercutout]:3306/[dbcutout]?useUnicode=Yes&characterEncoding=ISO8859_1&useSSL=true failed; nested exception is:
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
com.mysql.jdbc.CommunicationsException
MESSAGE: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
javax.net.ssl.SSLException
MESSAGE: Unsupported record version Unknown-0.0
STACKTRACE:
javax.net.ssl.SSLException: Unsupported record version Unknown-0.0
at sun.security.ssl.InputRecord.readV3Record(Unknown Source)
at sun.security.ssl.InputRecord.read(Unknown Source)
at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:72)
at com.mysql.jdbc.MysqlIO.negotiateSSLConnection(MysqlIO.java:3982)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1293)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2748)
at com.mysql.jdbc.Connection.<init>(Connection.java:1553)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
at de.willuhn.datasource.db.MyDriver.connect(MyDriver.java:87)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at de.willuhn.datasource.db.DBServiceImpl.createConnection(DBServiceImpl.java:177)
at de.willuhn.datasource.db.DBServiceImpl.getConnection(DBServiceImpl.java:126)
at de.willuhn.jameica.hbci.server.HBCIDBServiceImpl.getConnection(HBCIDBServiceImpl.java:145)
at de.willuhn.jameica.hbci.server.HBCIDBServiceImpl.install(HBCIDBServiceImpl.java:167)
at de.willuhn.jameica.hbci.HBCI$2.call(HBCI.java:135)
at de.willuhn.jameica.hbci.HBCI.call(HBCI.java:336)
at de.willuhn.jameica.hbci.HBCI.install(HBCI.java:131)
at de.willuhn.jameica.plugin.PluginLoader.initPlugin(PluginLoader.java:375)
at de.willuhn.jameica.plugin.PluginLoader.init(PluginLoader.java:243)
at de.willuhn.jameica.services.PluginService.init(PluginService.java:42)
at de.willuhn.boot.BootLoader.resolve(BootLoader.java:139)
at de.willuhn.boot.BootLoader.resolve(BootLoader.java:119)
at de.willuhn.boot.BootLoader.getBootable(BootLoader.java:72)
at de.willuhn.jameica.system.Application.init(Application.java:106)
at de.willuhn.jameica.system.Application.newInstance(Application.java:90)
at de.willuhn.jameica.Main.main(Main.java:78)
** END NESTED EXCEPTION **
Last packet sent to the server was 1216 ms ago.
STACKTRACE:
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
javax.net.ssl.SSLException
MESSAGE: Unsupported record version Unknown-0.0
STACKTRACE:
javax.net.ssl.SSLException: Unsupported record version Unknown-0.0
at sun.security.ssl.InputRecord.readV3Record(Unknown Source)
at sun.security.ssl.InputRecord.read(Unknown Source)
at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:72)
at com.mysql.jdbc.MysqlIO.negotiateSSLConnection(MysqlIO.java:3982)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1293)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2748)
at com.mysql.jdbc.Connection.<init>(Connection.java:1553)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
at de.willuhn.datasource.db.MyDriver.connect(MyDriver.java:87)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at de.willuhn.datasource.db.DBServiceImpl.createConnection(DBServiceImpl.java:177)
at de.willuhn.datasource.db.DBServiceImpl.getConnection(DBServiceImpl.java:126)
at de.willuhn.jameica.hbci.server.HBCIDBServiceImpl.getConnection(HBCIDBServiceImpl.java:145)
at de.willuhn.jameica.hbci.server.HBCIDBServiceImpl.install(HBCIDBServiceImpl.java:167)
at de.willuhn.jameica.hbci.HBCI$2.call(HBCI.java:135)
at de.willuhn.jameica.hbci.HBCI.call(HBCI.java:336)
at de.willuhn.jameica.hbci.HBCI.install(HBCI.java:131)
at de.willuhn.jameica.plugin.PluginLoader.initPlugin(PluginLoader.java:375)
at de.willuhn.jameica.plugin.PluginLoader.init(PluginLoader.java:243)
at de.willuhn.jameica.services.PluginService.init(PluginService.java:42)
at de.willuhn.boot.BootLoader.resolve(BootLoader.java:139)
at de.willuhn.boot.BootLoader.resolve(BootLoader.java:119)
at de.willuhn.boot.BootLoader.getBootable(BootLoader.java:72)
at de.willuhn.jameica.system.Application.init(Application.java:106)
at de.willuhn.jameica.system.Application.newInstance(Application.java:90)
at de.willuhn.jameica.Main.main(Main.java:78)
** END NESTED EXCEPTION **
Last packet sent to the server was 1216 ms ago.
at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:87)
at com.mysql.jdbc.MysqlIO.negotiateSSLConnection(MysqlIO.java:3982)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1293)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2748)
at com.mysql.jdbc.Connection.<init>(Connection.java:1553)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
at de.willuhn.datasource.db.MyDriver.connect(MyDriver.java:87)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at de.willuhn.datasource.db.DBServiceImpl.createConnection(DBServiceImpl.java:177)
at de.willuhn.datasource.db.DBServiceImpl.getConnection(DBServiceImpl.java:126)
at de.willuhn.jameica.hbci.server.HBCIDBServiceImpl.getConnection(HBCIDBServiceImpl.java:145)
at de.willuhn.jameica.hbci.server.HBCIDBServiceImpl.install(HBCIDBServiceImpl.java:167)
at de.willuhn.jameica.hbci.HBCI$2.call(HBCI.java:135)
at de.willuhn.jameica.hbci.HBCI.call(HBCI.java:336)
at de.willuhn.jameica.hbci.HBCI.install(HBCI.java:131)
at de.willuhn.jameica.plugin.PluginLoader.initPlugin(PluginLoader.java:375)
at de.willuhn.jameica.plugin.PluginLoader.init(PluginLoader.java:243)
at de.willuhn.jameica.services.PluginService.init(PluginService.java:42)
at de.willuhn.boot.BootLoader.resolve(BootLoader.java:139)
at de.willuhn.boot.BootLoader.resolve(BootLoader.java:119)
at de.willuhn.boot.BootLoader.getBootable(BootLoader.java:72)
at de.willuhn.jameica.system.Application.init(Application.java:106)
at de.willuhn.jameica.system.Application.newInstance(Application.java:90)
at de.willuhn.jameica.Main.main(Main.java:78)
** END NESTED EXCEPTION **
Last packet sent to the server was 1217 ms ago. - Den selben Fehler hatte ich bekommen, wenn ich mein selbstgeschriebens Javaprogramm mit den zusätzlichen Parametern aufgerufen hatte, der keystore wurde zuvor mit dem BefehlCode-Djavax.net.ssl.keyStore="path\to\keystore" -Djavax.net.ssl.keyStorePassword="keystorepassword"erzeugt.Codegenkey -keyalg rsa -alias mysqlClientCertificate -keystore keystore
Über einen Rat/Hinweis in die richtige Richtung, wie ich Jameica/Hibiscus aufrufen kann, so dass keine Authentifizierung sondern nur Verschlüsselung über SSL stattfindet, wäre ich euch sehr dankbar!
Ich würde das Ergebnis dann auch wieder hier posten. Es könnte ja für mehrere Benutzer interessant sein, wenn man Jameica/Hibiscus/JVerein mit den recht günstigen MySQL-Datenbanken von Amazon benutzen könnte. Wie gesagt, ich habe das Gefühl, dass nur noch ein sehr kleiner Schritt fehlt!
Im Voraus vielen Dank für eure Hilfe! Viele Grüße
Stephan