Python SSL-Problem: TLSV1_ALERT_UNKNOWN_CA & self-signed certificates

Hallo
Ich möchte über eine sichere websocket Verbindung Informationen zwischen einen javascript (Client) und einem Python-Tool (Server) austauschen.

Die Zertifikate habe ich wie folgt erstellt:
Code:
openssl req -new -x509 -days 3650 -sha512 -newkey rsa:2048 -nodes -keyout server.key -out server.crt

der Python-Code sieht wie folgt aus und verwendet ssl, autobahn und asyncio:
Code:
        tlscontext = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
        tlscontext.set_ciphers("HIGH:MEDIUM:!aNULL:!MD5")
        tlscontext.verify_mode = ssl.CERT_NONE
        tlscontext.load_cert_chain(TLS_CERT, TLS_KEY)

        tls_factory = WebSocketServerFactory(SECWEBSOCKET_URL, debug=False)
        tls_factory.protocol = MusicDBServer

        tls_loop   = asyncio.get_event_loop()
        tls_coro   = tls_loop.create_server(tls_factory, SECWEBSOCKET_ADDRESS, SECWEBSOCKET_PORT, ssl=tlscontext)
        tls_server = tls_loop.run_until_complete(tls_coro)

Wenn ich mich nun zu dem Server verbinde wirft Python folgende Exception:
Code:
Fatal error for <asyncio.selector_events._SelectorSslTransport object at 0x7f26521f29d0>
Traceback (most recent call last):
  File "/usr/lib64/python3.3/site-packages/asyncio/selector_events.py", line 685, in _read_ready
    data = self._sock.recv(self.max_size)
  File "/usr/lib64/python3.3/ssl.py", line 438, in recv
    return self.read(buflen)
  File "/usr/lib64/python3.3/ssl.py", line 329, in read
    v = self._sslobj.read(len or 1024)
ssl.SSLError: [SSL: TLSV1_ALERT_UNKNOWN_CA] tlsv1 alert unknown ca (_ssl.c:1450)

Die Zertifikate nutze ich bereits erfolgreich in Apache.

Hat jemand eine Idee wie es zu dem Fehler kommt?

Python: 3.3.2
openSSL: 1.0.1k 8 Jan 2015
 
RFC5246 schreibt folgendes:
Code:
   unknown_ca
      A valid certificate chain or partial chain was received, but the
      certificate was not accepted because the CA certificate could not
      be located or couldn't be matched with a known, trusted CA.  This
      message is always fatal.

Oder kurz: Der Client vertraut dem Zertifikat nicht, welches der Server bereitstellt. Du musst das Zertifikat im Client noch in der Liste der vertrauenswürdigen Zertifikate - vermutlich also in der Konfiguration des Browsers bzw. im OS - hinterlegen, damit die Verbindung korrekt aufgebaut werden kann.
 
Beim ersten Besuch der entsprechenden Seite fragt Firefox ja nach ob ich dem Zertifikat vertraue. Dies habe ich natürlich bestätigt.
Ich sehe aber gerade dass dies wohl auch an den Port gebunden ist. Entsprechend habe ich zwar das gültige Zertifikat für den Server aber nicht für den Port :(

Nachdem ich dies nun auch für den Port eine Ausnahme hinzugefügt habe bekomme ich den Fehler nicht mehr \o/

Nachdem ein Teil der Daten angekommen sind bekomme ich jetzt allerdings
ssl.SSLError: [SSL: BAD_WRITE_RETRY] bad write retry

Auf jeden Fall vielen Dank für den Tipp, da habe ich ja an der völlig falschen Stelle gesucht :D
 
Zurück
Oben