upload zu Webdav

Django, Flask, Bottle, WSGI, CGI…
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Ich habe die 3 Options https://pypi.org/project/webdavclient/ Versucht.
Beim 3. hab ich meine Adresse (https://meinedynds.net:port) eingegeben und bei "cert_path" und "key_path" die Pfade eingegeben, die auch in meiner apache2 ssl.conf eingetragen sind.
Als Fehler wird mir das ausgegeben:

Code: Alles auswählen

 raise NotConnection(self.webdav.hostname)
webdav.exceptions.NotConnection: Not connection with https://meinserver.net:port
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Leider ersetzt webdavclient alle Fehlermeldungen durch ziemlich unsinnvolle. Was meldet es denn, wenn Du beim Client verbose=True setzt?
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Sirius3 hat geschrieben: Montag 4. Juni 2018, 05:20 Was meldet es denn, wenn Du beim Client verbose=True setzt?
Was meinst du damit genau?
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

genau das, was ich geschrieben habe. Die Ausgaben sind zu dürftig, um irgendwelche Feherursachen zu finden, daher mehr Ausgabe durch verbose, in der Hoffnung, dass man damit auf den Grund kommt.
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Sorry, aber ich muss nochmal fragen, wo soll ich "verbose=True" setzen?
So sieht mein aktuelles Script aus:

Code: Alles auswählen

import webdav.client as wc

options = {'webdav_hostname': "https://meinedyndns.net:Port",'webdav_login':  "xxxx", 'webdav_password': "xxxxx",
          'cert_path':  "/etc/ssl/certs/apache.crt",'key_path': "/etc/ssl/private/apache.key"}

client = wc.Client(options)

a = client.check("prob/")

print(a)
Bei xxx sind natürlich die richtigen Werte gesetzt.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@egon11: ein minimales Maß an Selbstrecherche trau ich Dir zu, wie man eine weitere Option setzt.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@egon11: Lies Dir mal die Dokumentation durch. Das steht zum Beispiel im Text auf der Projektseite im Python Package Index. Die hast Du ja selbst in einem Beitrag weiter oben verlinkt.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Sorry das hab ich übersehen.
Hier die Ausgabe mit "'verbose' = True"

Code: Alles auswählen

Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/webdav/client.py", line 293, in check
    request.perform()
pycurl.error: (3, '<url> malformed')

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/matze/ping/uload.py", line 8, in <module>
    a = client.check("prob/")
  File "/usr/local/lib/python3.5/dist-packages/webdav/client.py", line 303, in check
    raise NotConnection(self.webdav.hostname)
webdav.exceptions.NotConnection: Not connection with 
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Da fehlt jetzt entweder etwas bei der Fehlermeldung oder Du hast tatsächlich einen leeren Hostnamen angegeben.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Ich hab schon den richtigen Hostnamen genommen. Wenn ich ihn kopiere und im Browser einfüge, dann komme ich ans Ziel.
Die Ausgabe wurde über Idle3 gemacht.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Aber in der Fehlermeldung steht kein Hostname, müsste er aber. Und wenn da keiner steht, dann hast Du ihn entweder doch nicht angegeben oder die Fehlermeldung nicht komplett kopiert. Auf jeden Fall scheint es daran zu scheitern das `pycurl` nichts mit der URL anfangen kann. Was durch einen leeren Hostnamen erklärbar wäre.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Jetzt hab ich den Fehler, ich hab ausversehen nochmal ne Option als Variable gesetzt.
So jetzt wird auch deutlich, dass der Fehler bei den SSL Zertifikaten hängt. Obwohl ich das genau so gemacht hab, wie es das Ubuntu wiki zeigt.

Hier der Fehler:

Code: Alles auswählen

Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/webdav/client.py", line 293, in check
    request.perform()
pycurl.error: (35, 'error reading X.509 key or certificate file: Error while reading file.')

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/matze/ping/upload.py", line 12, in <module>
    a = client.check("prob/")
  File "/usr/local/lib/python3.5/dist-packages/webdav/client.py", line 303, in check
    raise NotConnection(self.webdav.hostname)
webdav.exceptions.NotConnection: Not connection with https://xxxxx.net:Port
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn ich jetzt nochmal Deine Versuche lese, sehe ich, dass Du ja den Private-Key angibst. Das ist Quatsch. Den darf nur der Server kennen, Du darfst nur als cert-Parameter eine pem-Datei angeben.
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Mhh ok, so steht es aber in dem HowTo.
:roll:
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Ein privater Schlüssel heißt deshalb `privat`, weil ihn niemand kennen sollte, außer der Server.
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Also werde ich es mit https lassen und mache es nur mit http.
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

Mir ist nicht ganz klar, wozu die zusätzlichen Parameter für die Zertifikate gut sein sollen. Das Zertifikat wird doch normalerweise von deinem Webdav-Server zur Verfügung gestellt. Diesen erreichst du via HTTPS (wenn dem auch so ist).

Wenn du den Webdav-Server kontaktierst, stellt er dir seinen Public-Key zur Verfügung, mit welchem du die Daten die du ihm übermittelst, verschlüsseln kannst. Er entschlüsselt dann deine Uploads mit seinem privaten Schlüssel.

Wenn du einen Webserver via HTTPS ansurfst, übermittelst du diesem ja auch keinen privaten Schlüssel von dir. Lass also die Optionen der Zertfikate einfach mal weg. Was passiert dann?
When we say computer, we mean the electronic computer.
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Wen ich mit HTTPS ausführe, dann kommt der Fehlerlog:

Code: Alles auswählen

Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/webdav/client.py", line 293, in check
    request.perform()
pycurl.error: (60, 'server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none')

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/matze/ping/upload.py", line 9, in <module>
    a = client.check("/1/")
  File "/usr/local/lib/python3.5/dist-packages/webdav/client.py", line 303, in check
    raise NotConnection(self.webdav.hostname)
webdav.exceptions.NotConnection: Not connection with https://xxxxx.net:Port
>>> 

Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Was ist das denn für ein SSL-Zertifikat? curl scheint der CA nicht zu trauen, bzw. sie nicht zu kennen, die das ausgestellt hat.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

@egon11: wie hast du das Zertifikat erstellt?
error reading X.509 key or certificate file: Error while reading file.
Ich gehe mal stark davon aus, dass deine selbstgenerierten Zertifikate kaputt sind.
When we say computer, we mean the electronic computer.
Antworten