Comment créer Python sécurisé websocket demande du client?
Mon Python sécurisé websocket code client de me donner exception comme suit:
[SSL: CERTIFICATE_VERIFY_FAILED] certificat de vérifier échoué (_ssl.c:748)
J'ai créé mon certificat privé et de et de signer le certificat, mais je ne suis pas en mesure de se connecter à l'aide d'un script Python comme suit:
import json
from websocket import create_connection
class subscriber:
def listenForever(self):
try:
# ws = create_connection("wss://localhost:9080/websocket")
ws = create_connection("wss://nbtstaging.westeurope.cloudapp.azure.com:9090/websocket")
ws.send("test message")
while True:
result = ws.recv()
result = json.loads(result)
print("Received '%s'" % result)
ws.close()
except Exception as ex:
print("exception: ", format(ex))
try:
subscriber().listenForever()
except:
print("Exception occured: ")
Mon https/serveur wss script en python avec tornade comme suit:
import tornado.web
import tornado.websocket
import tornado.httpserver
import tornado.ioloop
import os
import ssl
ssl_root = os.path.join(os.path.dirname(__file__), 'ssl1_1020')
class WebSocketHandler(tornado.websocket.WebSocketHandler):
def check_origin(self, origin):
return True
def open(self):
pass
def on_message(self, message):
self.write_message("Your message was: " + message)
print("message received: ", format(message))
def on_close(self):
pass
class IndexPageHandler(tornado.web.RequestHandler):
def get(self):
self.render("index.html")
class Application(tornado.web.Application):
def __init__(self):
handlers = [
(r'/', IndexPageHandler),
(r'/websocket', WebSocketHandler),
]
settings = {
'template_path': 'templates'
}
tornado.web.Application.__init__(self, handlers, **settings)
ssl_ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
ssl_ctx.load_cert_chain(ssl_root+"/server.crt",
ssl_root + "/server.pem")
if __name__ == '__main__':
ws_app = Application()
server = tornado.httpserver.HTTPServer(ws_app, ssl_options=ssl_ctx,)
server.listen(9081, "0.0.0.0")
print("server started...")
tornado.ioloop.IOLoop.instance().start()
étapes utilisées pour créer SSL certificats signés:
openssl genrsa -des3 -out server.key 1024
openssl rsa -in server.key -out server.pem
openssl req -new -nodes -key server.pem -out server.csr
openssl x509 -req -days 365 -in server.csr -signkey server.pem -out server.crt
- Ne vous utilisez MacOS? C'est probablement plus un problème avec le système d'autorisations, vous devez ajouter le certificat pour le trousseau de clés ... vous voudrez peut-être vérifier ce post stackoverflow.com/questions/41691327/...
- Non, c'est Linux ubuntu 16.04 env os.
- Quelqu'un avec le même problème: stackoverflow.com/questions/27835619/...
Vous devez vous connecter pour publier un commentaire.
J'ai enfin trouvé la solution, j'ai mis à jour python script client tout en faisant la connexion sécurisée web socket url d'ignorer cert demande comme suit:
Si quelqu'un est curieux, dans l'avenir, pourquoi wss python panne du serveur est à cause de cela, ici, dans la tornade de la documentation:
Seulement essayer de le ci-dessous à des fins de test uniquement. Ci-dessous est une grande insécurité kluge:
Pour moi en ignorant les erreurs n'est pas une option, j'ai dû utiliser mon certificat auto-signé:
Trouvé ici sur le websocket pensions du dossier exemples.
P. S
J'ai changé depuis
SSLContext(ssl.PROTOCOL_TLS_CLIENT)
àSSLContext(ssl.PROTOCOL_TLSv1_2)
pour le faire fonctionner