python3发送需要双向认证的wss请求
websocket链接python有很多封装好的库:websocket-client、websockets、aiowebsocket 这里用的websokets
此次接口要求:1、需要双向认证 2、wss协议 3、发送数据和接受数据都需要序列化和反序列化(probuff)
 1 # encoding = utf-8
2 import asyncio
3 import pathlib
4 import ssl
5 import websockets
6 import base64
7 from pb import conn_ready_pb2
8 import uuid
9 import datetime,time
10 import json
11 from google.protobuf import json_format
12 # 服务端声明CLIENT_AUTH
13 ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
14 #Purpose.CLIENT_AUTH该值表示该上下文可用于对Web客户端进行身份验证(因此,它将用于创建服务器端套接字),carfile服务端证书
15 ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH,cafile="D://my_project//Ajcloud//ca.crt")
16 # certfile和keyfile参数为指定包含证书被用来识别连接的本地端可选的文件,客户端证书
17 ssl_context.load_cert_chain(certfile="D://my_project//Ajcloud//mgr.crt", keyfile="D://my_project//Ajcloud//mgr.key")
18 ssl_context.verify_mode = ssl.CERT_REQUIRED
19
20 async def hello():
21 uri = "wss://xxxxxxxxxx"
22 async with websockets.connect(
23 uri, ssl=ssl_context
24 ) as websocket:
25 message = "xxxxx"
26 reg = conn_ready_pb2.ConnReadyRequest()
27 res = conn_ready_pb2.ConnReadyResponse()
28 reg.header.message_id = str(uuid.uuid1())
29 datetime_now = datetime.datetime.now()
30 date_stamp = str(int(time.mktime(datetime_now.timetuple())))
31 data_microsecond = str("%06d" % datetime_now.microsecond)[0:3]
32 date_stamp = date_stamp + data_microsecond
33 reg.header.message_ts = date_stamp
34 r = reg.SerializeToString()#序列化
35 b = base64.b64encode(r) # 将二进制转为base64编码
36 b2 = str(b, 'utf-8')
37 message = {"xxx": "xxx", "yyyy": b2}
38 await websocket.send(json.dumps(message))
39 print(f"> {message}")
40 greeting = await websocket.recv()
41 payload = json.loads(greeting)["payload"]
42 # base64转码成二进制
43 payload =base64.b64decode(payload)
44 res.ParseFromString(payload)#反序列化
45 json_result = json_format.MessageToJson(res) # pb转成json格式
46 print(json_result)
47 print(f"< {greeting}")
48
49
50 asyncio.get_event_loop().run_until_complete(hello())

python3发送需要双向认证的wss请求的更多相关文章

  1. ASIHTTPRequest实现https双向认证请求

    什么是双向认证呢?简而言之,就是服务器端对请求它的客户端要进行身份验证,客户端对自己所请求的服务器也会做身份验证.服务端一旦验证到请求自己的客户端为不可信任的,服务端就拒绝继续通信.客户端如果发现服务 ...

  2. HTTPS 双向认证构建移动设备安全体系

    HTTPS 双向认证构建移动设备安全体系 对于一些高安全性要求的企业内项目,我们有时希望能够对客户端进行验证.这个时候我们可以使用Https的双向认证机制来实现这个功能. 单向认证:保证server是 ...

  3. ssl双向认证和单向认证原理

    有朋友在搞一个项目,周末有聊到一些安全性的东西,很自然会想起https,但https究竟如何实施,其原理又是什么? 基于ssl,一般的应用都是单向认证,如果应用场景要求对客户来源做验证也可以实现成双向 ...

  4. m.Tomcat使用openssl走APR通道配置单向和双向认证

    引用自: http://blog.csdn.net/gtuu0123/article/details/5827800(Tomcat的SSL单向认证)  http://blog.csdn.net/gtu ...

  5. 基于SSL协议的双向认证 - 双向认证 [3]

    1      SSL双向认证的实现 这里是基于SSL和Tomcat配置实现的,配置方法如下: 1.1    生成CA数字证书 首先需要配置OPENSSL环境变量. 我的OPENSSL配置文件路径是“D ...

  6. 基于SSL协议的双向认证 - SSL协议 [1]

    1  概要说明 在互联网通信方式中,目前用的最广泛的是HTTPS配合SSL和数字证书来保证传输和认证安全了. 2  详细介绍 2.1    HTTPS HTTPS全称:Hypertext Transf ...

  7. 基于openssl的单向和双向认证

    1.前言 最近工作涉及到https,需要修改nginx的openssl模块,引入keyless方案.关于keyless可以参考CloudFlare的官方博客: https://blog.cloudfl ...

  8. tomcat------https单向认证和双向认证

     一.https分为单向认证和双向认证: 单向认证就是说,只有客户端使用ssl时对服务器端的证书进行认证,也就是说,客户端在请求建立之前,服务器端会向客户端发送一个证书,一般情况下,这种证书都是由自己 ...

  9. nginx配置ssl加密(单双向认证、部分https)

    nginx配置ssl加密(单双向认证.部分https) nginx下配置ssl本来是很简单的,无论是去认证中心买SSL安全证书还是自签署证书,但最近公司OA的一个需求,得以有个机会实际折腾一番.一开始 ...

  10. HTTPS 中双向认证SSL 协议的具体过程

    HTTPS 中双向认证SSL 协议的具体过程: 这里总结为详细的步骤: ① 浏览器发送一个连接请求给安全服务器.② 服务器将自己的证书,以及同证书相关的信息发送给客户浏览器.③ 客户浏览器检查服务器送 ...

随机推荐

  1. [转帖]Kubernetes1.25.6部署文档 使用cri-docker部署K8s1.25.6

    https://zhuanlan.zhihu.com/p/600808149 本文档将通过kubeadm+docker部署K8s集群,本次集群使用的容器运行工具为docker,K8s的容器运行工具也可 ...

  2. KVM命令行Clone虚拟机的快速处理

    KVM命令行Clone虚拟机的快速处理 背景 鲲鹏+银河麒麟的测试环境 想着可以使用 KVM的方式创建虚拟机 virt-manager 有个clone虚拟机的提示, 但是发现没有创建新存储卷下面的磁盘 ...

  3. [转帖]kingbase(人大金仓)的一些常用表操作语句

    包括 1)创建表 2)删除表 3)加字段 4)字段换名 5)字段改类型 6)字段添加注释 7)修改字段为自增类型 8)增加主键 9)查看模式下的表 一.创建和删除表 DROP TABLE IF EXI ...

  4. Mysql数据库查看Database的大小的方法

    最简单的方法为: select concat(round(sum(data_length/1024/1024),2),'MB') as data from INFORMATION_SCHEMA.tab ...

  5. awk中的NR,FNR ,NF,$NF,RS,ORS,FS,OFS

    awk中的NR,FNR ,NF,$NF,RS,ORS,FS,OFS https://www.cnblogs.com/zhangqingsh/archive/2013/04/24/3040801.htm ...

  6. 不想做架构师的Gopher不是好程序员

    最近我们在组队学习<手把手带你写一个web框架>,强制PUSH,坚持每天学习打卡,不完成惩罚发红包的那种. 你别说,效果还真挺好. 昨天学到了架构部分,很受启发,光学不写假把式.(还是得坚 ...

  7. ES客户端spring-boot-starter-data-elasticsearch

    ES客户端分类 Es-Server提供RESTFul-Api,客户端通过发起http请求,调用api实现索引库的管理,数据的交换,server端状态的监控...... 官方java客户端: <d ...

  8. windows加壳程序WinLicense与Themida

    反调试提示 开了Procmon.exe之后启动游戏会弹出这个框,这个是程序加壳之后的反外挂,反调试提示框. WinLicense A monitor program has been found ru ...

  9. IServiceBehavior, IOperationBehavior,IParameterInspector

    1 public class MyOperationBehavior:Attribute, IOperationBehavior 2 { 3 public void AddBindingParamet ...

  10. 14.3 Socket 字符串分块传输

    首先为什么要实行分块传输字符串,一般而言Socket套接字最长发送的字节数为8192字节,如果发送的字节超出了此范围则后续部分会被自动截断,此时将字符串进行分块传输将显得格外重要,分块传输的关键在于封 ...