Hallo Gast! Bitte registriere dich um Beiträge schreiben zu können und Zugang zu allen Bereichen zu bekommen. Hier registrieren

Auch ohne Registrierung kannst du eine Supportanfrage stellen: Jetzt Frage stellen


ThreemaGateway als Messaging Dienst
#1
Question 
Hallo liebe Threema Community


Ich arbeite zurzeit an einem grösseren Projekt, bei welchem das Benachrichtigungssystem, welches mit SMS arbeitet, durch ThreemaWork & ThreemaGateway ersetzt werden soll.
Nun habe ich aber die Vermutung, dass unser Proxy da zum Problem werden könnte. Grundsätzlich gilt nämlich: Upload verboten.

Ich arbeite zurzeit mit dem Java SDK und wenn ich damit eine Nachricht versenden will, passiert nichts (bzw. der Befehl läuft nicht weiter und ich muss ihn manuell beenden)
Das SDK habe ich so aufgerufen:

Code:
java -jar threema-msgapi-tool.jar -s [Empfänger ID] [Gateway ID] [Secret]

java -jar threema-msgapi-tool.jar -S [Empfänger ID] [Gateway ID] [Secret] [Private Key File]


Nun habe ich folgende Fragen:
  • Muss ich das SDK irgendwie speziell durch den Proxy jagen?
  • Wie gross kann eine gewöhnliche E2E Nachricht werden? (ohne Anhang)
  • Mache ich hier etwas Grundlegendes falsch?

LG AN00BIS
Zitieren
#2
Wie funktioniert denn der Proxy? Liest der einfach die Uploadrate aus und verhindert diese, wenn es zuviel wird? (In diesem Fall müsstest du ja einfach alles etwas langsamer senden, d.h. die Rate limitieren.) Abgesehen davon, dass so ein Proxy total unsinnig ist…
Was passiert nun genau, wenn du den Befehl eingibst? Es passiert nichts oder stoppt er nu8n? Wie bemerkst du, dass er stoppt? Wie setzt du das ganze "manuell fort"?
Zitieren
#3
(30.10.2017., 15:17)rugk schrieb: Wie funktioniert denn der Proxy? Liest der einfach die Uploadrate aus und verhindert diese, wenn es zuviel wird? (In diesem Fall müsstest du ja einfach alles etwas langsamer senden, d.h. die Rate limitieren.) Abgesehen davon, dass so ein Proxy total unsinnig ist…
Was passiert nun genau, wenn du den Befehl eingibst? Es passiert nichts oder stoppt er nu8n? Wie bemerkst du, dass er stoppt? Wie setzt du das ganze "manuell fort"?

Wie funktioniert der Proxy?
Der Proxy verhindert den Upload, sobald ein Paket eine definierte Datengrösse überschreitet. Die Limite ist mir allerdings nicht bekannt. Zusätzlich filtert er gewisse Datentypen heraus. (.exe, .sh, .bat, etc. Auch beim Download)

Unsinnig ist das nicht, wenn man sehr strenge Datenschutzvorschriften hat und viele Mitarbeiter hinter dem Proxy arbeiten, welche nicht im IT-Bereich tätig sind und täglich mit heiklen Daten hantieren

Was passiert?
Das ist unterschiedlich. Bei den genannten Befehlen passiert einfach nichts. Sprich der Befehl geht nicht weiter, beendet sich aber auch nicht.
Führe ich aber z.B. folgenden Code aus:
Code:
java -jar threema-msgapi-tool.jar -l -k [ID] [Gateway ID] [Secret]
Erhalte ich folgendes:
Code:
Exception in thread "main" java.net.UnknownHostException: msgapi.threema.ch
       at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
       at java.net.PlainSocketImpl.connect(Unknown Source)
       at java.net.SocksSocketImpl.connect(Unknown Source)
       at java.net.Socket.connect(Unknown Source)
       at sun.security.ssl.SSLSocketImpl.connect(Unknown Source)
       at sun.security.ssl.BaseSSLSocketImpl.connect(Unknown Source)
       at sun.net.NetworkClient.doConnect(Unknown Source)
       at sun.net.www.http.HttpClient.openServer(Unknown Source)
       at sun.net.www.http.HttpClient.openServer(Unknown Source)
       at sun.net.www.protocol.https.HttpsClient.<init>(Unknown Source)
       at sun.net.www.protocol.https.HttpsClient.New(Unknown Source)
       at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(Unknown Source)
       at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(Unknown Source)
       at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
       at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
Somit schliesse ich auf Proxy. Ich habe nun versucht mit einem Batch Script, Java den Proxy mitzuteilen:
Code:
JAVA_FLAGS=-Dhttp.proxyHost=[Proxy URL] -Dhttp.proxyPort=[Port Nr.] -Dhttp.proxyUser=[Username] -Dhttp.proxyPassword=[Passwort]
java -jar threema-msgapi-tool.jar -l -k [ID] [Gateway ID] [Secret]
Das Ergebnis ist dasselbe. Allerdings weiss ich nun nicht, ob das Script nicht richtig funktioniert (Keine Fehlermeldungen) oder ob es funktioniert, aber der Proxy die Aktion verhindert.

LG AN00BIS
Zitieren
#4
UnknownHostException heißt AFAIK nur, dass er nicht mal den DNS-Namen msgapi.threema.ch auflösen könnte. Hat also nicht mal dafür eine Internetverbindung. Kann es sein, dass der Proxy jeden Datenverkehr blockiert, der nicht über den Proxy geleitet wird?
In diesem Fall müsstest du den Proxy schon auf jeden Fall angeben. Normalerweise müsste bei deinem Befehl (E-Mail-Adresse "nachschauen") auf jeden Fall eine Ausgabe kommen.

Nur sehe ich hier ein grundsätzliches Problem: Wenn der Proxy wirklich schon die Mailabfrage blockiert, wie in deinem Beispiel, dann reagiert der ziemlich über. Immerhin sind das ja vielleicht ein paar KByte die da hoch und herunter geladen werden. Das ist nun wirklich kein Upload.
Aber noch grundsätzlicher: Das Senden von Nachrichten (Text, aber natürlich erst recht Medien/Bilder) involviert zwangsläufig den *Upload* von Daten. Sorry, aber das ist das Prinzip eines Messengers. Das sinnvollste wäre dementsprechend wohl, den Proxy so zu konfigurieren, dass zumindest deine Anwendung eine Erlaubnis zum Upload von Daten hat und da nichts gefiltert wird.
Ansonsten kannst du ja auch mal testweise ein anderes SDK verwenden, evt. bekommst du da eine andere/detaillierte Fehlermeldung.
Zitieren
#5
Es wird ja sicher kein Proxy sein, der TLS-Verbindungen terminiert, ansonsten wird es eklig.

Ich weiß gar nicht, ob irgendeins der SDKs out-of-the-box Proxy-Support bietet. Es würde auf jeden Fall nicht besonders viel Aufwand bedeuten.
Zitieren
#6
(30.10.2017., 16:21)rugk schrieb: Kann es sein, dass der Proxy jeden Datenverkehr blockiert, der nicht über den Proxy geleitet wird?
Jep. Der gesamte Traffic muss durch den Proxy.
Zitat: Das Senden von Nachrichten (Text, aber natürlich erst recht Medien/Bilder) involviert zwangsläufig den *Upload* von Daten. Sorry, aber das ist das Prinzip eines Messengers.
Dessen bin ich mir schon bewusst. Da es sich aber nur um Textnachrichten handelt, welche, wie ich vermute, nicht allzu gross sein sollten. Wollte ich es im Voraus testen, bevor der Proxy umkonfiguriert werden muss. Vermutlich führt aber kein Weg daran vorbei.


@Igrahl: Reicht es nicht Java beim Ausführen des SDK den Proxy mitzuteilen? Oder verstehe ich das falsch und man müsste anders vorgehen?
Zitieren
#7
Update: Thema hat sich erledigt. Für den Server wurde eine spezielle Proxy Regel angelegt. Nun funktioniert alles problemlos.
Zitieren
#8
Sorry, hab deine Nachricht gar nicht gesehen. Es kommt drauf an, wie das SDK implementiert wurde. Kann schon sein, dass die Environment Variables ausreichen - ich kenne die Java-Implementierung nicht genauer. Im Python SDK würde es nicht ausreichen. Aber wenn nun alles klappt, ist das ja prima.
Zitieren