当前位置: 首页 > 知识库问答 >
问题:

如何创建Python安全websocket客户端请求?

罗奇文
2023-03-14

我的Python secure websocket客户端代码给出了以下异常:

[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败(_SSL.C:748)

我已经创建了我的私有证书和签名证书,但我无法使用Python脚本连接到它,如下所示:

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: ")

我的HTTPS/WSS服务器脚本用tornado用python编写,如下所示:

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()

用于创建SSL签名证书的步骤:

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

共有1个答案

鲍建业
2023-03-14

最后我找到了一个解决方案,我更新了python客户端脚本,同时连接到安全的web套接字url以忽略cert请求,如下所示:

 import ssl
 import websocket

 ws = websocket.WebSocket(sslopt={"cert_reqs": ssl.CERT_NONE})
 ws.connect("wss://xxx.com:9090/websocket")
 类似资料:
  • 问题内容: 我有一个node.js Connect服务器,用于检查请求的Cookie。为了在节点中测试它,我需要一种写客户端请求并将cookie附加到它的方法。我知道HTTP请求对此具有’cookie’标头,但是我不确定如何设置和发送它- 我还需要在同一请求中发送POST数据,因此我目前正在使用danwrong的restler模块,但似乎没有让我添加该标头。 关于如何使用硬编码的cookie和PO

  • 问题内容: 我正在使用node.js的WSwebsocket库。目前,我正在运行ws服务器。现在,我想通过使用安全连接(即通过实施wss协议以及库支持TLS连接)来保护此连接。我进行了一些搜索,发现这很容易确保安全:wss和具有自签名证书的wss。 两者都不是很详细,第二个链接上的文章介绍了带有自签名证书的wss。我想知道的是,仅创建自签名证书并部署到我的生产环境是否就足够了?还是我需要像创建HT

  • 创建客户端有两种方式,一种是直接使用特化的构造器函数,另一种是使用工厂构造器函数。 第一种方式返回的是具体的客户端结构体指针对象,第二种方式返回的是客户端接口对象。 使用特化的构造器函数创建客户端 特化的构造器函数有下面几个: func NewHTTPClient(uri ...string) (client *HTTPClient) func NewTCPClient(uri ...string

  • 我已经设置了一个WebSocket服务器使用超文本传输协议-kit,应该接受Web套接字连接。它是超文本传输协议-kit留档中显示的基本示例。 问题是:如何创建连接到它的Clojure客户端? 客户端可以是任何Clojure超文本传输协议库,我真的不介意。我已经了解了Javascript客户端,我相信Java有一个可以从Clojure中使用的API。但是我要找的是一个Clojure库,它支持客户端

  • 问题内容: 最近,我一直在查看Pagedown.js,以在页面上使用mark-down而不是丑陋的只读textareas。 我非常谨慎,因为欺骗已转换的转换器似乎很容易。我已经看到了一些有关Angular.js及其html绑定的讨论,并且在Knockout.js 3.0发布时听到了一些关于html绑定以前不安全的信息。 似乎有人需要做的所有事情来禁用Pagedown.js中的消毒剂,例如- 他们可

  • 轻推支持在电脑端和手机端创建轻应用,创建完成后待管理员审核通过后即创建成功,但仍需登录电脑端轻推进入企业管理设置轻应用。 1. 手机端 轻应用-添加-新建-设置轻应用头像-输入轻应用名称-选择所属企业-提交申请 2.电脑端 电脑端操作与手机端相同。