title: How to create Python secure websocket client request?
body: <p>My Python secure websocket client code giving me exception as follows:</p>
  
  <blockquote>
    <p>[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:748)</p>
  </blockquote>
  
  <p>I have created my private certificate and and sign certificate as well, but I am not able to connect to it using Python script as follows:</p>
  
  <pre><code>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: ")
  </code></pre>
  
  <p>My https/wss server script in python with tornado as follows:</p>
  
  <pre><code>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()
  </code></pre>
  
  <p>steps used to create SSL signed certificates:</p>
  
  <pre><code>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
  </code></pre>