Bad File Descriptor Error in SSL Socket Script (Python)

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
xNachtelf
User
Beiträge: 2
Registriert: Sonntag 17. Mai 2020, 16:02

Erst mal: Moin! Ich bin der neue :D

Ich habe ein Problem: Und zwar versuche ich eine SSL Socket Communication zwischen einem Java Client und einem Python Server zustande zu bringen. Leider ecke ich da gerade an. Das Beispiel zum testen stammt direkt aus der Dokumentation:

Code: Alles auswählen

import socket
import ssl

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('cert.pem', 'key.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
  sock.bind(('127.0.0.1', 8443))
  sock.listen(5)
  with context.wrap_socket(sock, server_side=True) as ssock:
    conn, addr = ssock.accept()
Ein einfaches Beispiel mit Zertifikat und Schlüssel Datei. Beim Ausführen bekomme ich dann folgenden Fehler:

Code: Alles auswählen

File "server.py", line 5, in <module>
context.load_cert_chain('cert.pem', 'key.pem')
OSError: [Errno 9] Bad file descriptor
Ich hab gestern den halben nachmittag gesucht nach dem Problem aber nichts gefunden. Ich weiss echt nicht mehr weiter und hoffe, ihr könnt mir helfen. Die Zertifikat Dateien liegen im selben Ordner, wie das Python Script File.

Ich danke euch schon mal! Bleibt gesund!

Thanks a lot!
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Relative Pfade funktionieren nicht so, wie viele Leute denken, dass sie funktionieren. Sie sind relativ zum Arbeitsverzeichnis, und das ist ein Verzeichnis, das NICHTS mit dem Ort des Skriptes zu tun hat. Sondern im Grunde frei bestimmt werden kann.

Und da du relative Pfade benutzt, waere das erstmal mein heissester Kandidat. Gib die Pfade stattdessen absolut an, also /der/pfad/zu/meinem/zertifikat.pem. Oder dem Aequivalent unter Windows - c:/der/pfad/zu/meinem/zertifikat.pem. Bei letzterem unbedingt darauf achten, Forward-Slashes zu benutzen.
xNachtelf
User
Beiträge: 2
Registriert: Sonntag 17. Mai 2020, 16:02

__deets__ hat geschrieben: Sonntag 17. Mai 2020, 17:41 Relative Pfade funktionieren nicht so, wie viele Leute denken, dass sie funktionieren. Sie sind relativ zum Arbeitsverzeichnis, und das ist ein Verzeichnis, das NICHTS mit dem Ort des Skriptes zu tun hat. Sondern im Grunde frei bestimmt werden kann.

Und da du relative Pfade benutzt, waere das erstmal mein heissester Kandidat. Gib die Pfade stattdessen absolut an, also /der/pfad/zu/meinem/zertifikat.pem. Oder dem Aequivalent unter Windows - c:/der/pfad/zu/meinem/zertifikat.pem. Bei letzterem unbedingt darauf achten, Forward-Slashes zu benutzen.
Moin und danke für die Antwort! Habe es grade ausprobiert aber leider mit demselben ergebnis. Das mit dem Pfad ist aber ein guter hinweis und den werde ich mir mal zu herzen nehmen. Fehlermeldung:

Code: Alles auswählen

== RESTART: C:\Users\delse\AppData\Local\Programs\Python\Python38-32\server.py =
Traceback (most recent call last):
  File "C:\Users\delse\AppData\Local\Programs\Python\Python38-32\server.py", line 5, in <module>
    context.load_cert_chain('C:/Users/delse/AppData/Local/Programs/Python/Python38-32/cert.pem', 'C:/Users/delse/AppData/Local/Programs/Python/Python38-32/key.pem')
OSError: [Errno 9] Bad file descriptor
Benutzeravatar
sparrow
User
Beiträge: 4185
Registriert: Freitag 17. April 2009, 10:28

Hast du nicht geschrieben, die Dateien liegen im selben Veezeichnis wie das Script? Dann ist das sicherlich der falsche Pfad.
Benutzeravatar
sparrow
User
Beiträge: 4185
Registriert: Freitag 17. April 2009, 10:28

Oh, ich sehe gerade, dass du da wirklich das Script gespeichert hast.
Die Stelle ist ausgesprochen ungewöhnlich - im Installationpfad des Interpreters?!?
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

In der Python-Installation sollte man keine Skripte platzieren. Sondern in einem Arbeitsverzeichnis in deinem User-Verzeichnes. Denn so besteht die Gefahr, dass du dir deine Python-Installation vermurkst. Die sollte man unangetastet lassen, und im Zweifel auch wegschmeissen & neu machen koennen.

Im Jahre 20 nach der Jahrtausendwende ist es angzeigt, keinen 32-Bit-Interpreter mehr zu benutzen. Denn ueber kurz oder lang verschwindet das sowieso.

Ausserdem bitte nicht den Post direkt vor deinem Post in gaenze zitieren. Den kann ja jeder da schon lesen, und so muss man ihn zweimal lesen. Was anderes sind natuerlich Zitate um darauf konkret Bezug zu nehmen.

Apropos Bezug: zu deinem Problem findet sich das hier: https://stackoverflow.com/questions/465 ... ptor-error
Benutzeravatar
DeaD_EyE
User
Beiträge: 1016
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

__deets__ hat geschrieben: Sonntag 17. Mai 2020, 18:54 Im Jahre 20 nach der Jahrtausendwende ist es angzeigt, keinen 32-Bit-Interpreter mehr zu benutzen. Denn ueber kurz oder lang verschwindet das sowieso.
Im Endeffekt hat jeder Anfänger unter Windows die 32-Bit-Version installiert, sofern er Python von python.org heruntergeladen hat. Standardmäßig wird die 32 Bit Version angeboten. Deswegen haben so viele die 32-Bit Variante. Installiert man hingegen die Version aus dem MS Store, bekommt man automatisch die 64-Bit Variante.

32 Bit wird uns noch sehr lange erhalten bleiben.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten