python ssl recv参数_Python网络编程中的TLS/SSL。

本文介绍了传输层安全协议TLS(前身是SSL)在现代互联网中的重要性,包括其保护的数据类型以及存在的局限性。文章探讨了如何在Python中生成证书,以及TLS负载移除的选择。此外,还展示了如何在Python3.4以后使用ssl模块创建安全的TLS套接字进行通信,并提供了客户端和服务器的示例代码。文章最后提到了如何检查和理解TLS连接的特性,包括协议版本、加密算法等,并提醒在实现TLS后要进行测试。
摘要由CSDN通过智能技术生成

传输层安全协议(TLS)算是如今互联网上应用最广泛的加密方法。

TLS的前身是安全套接层(SSL),现代互联网的许多协议基础协议都是使用TLS来验证服务器身份,并保护传输过程中的数据。

TLS能保护的信息包括:与请求URL之间的HTTPS链接以及以及返回内容、密码或cookie等可能在套接字双向传递的认证信息。

下面的信息无法使用TLS保护:本机与远程主机都是可见的,地址信息在每个数据包的IP头信息中以纯文本的形式表示。

客户端与服务器的端口号同样在每个TCP头信息中可见。

客户端为了获取服务器的IP地址,可能会先进行DNS查询。该查询在通过网络发送时也是可见的。

通过TLS加密的套接字向任何一方传递数据块的时候,观察者都可以看到数据块的大小。尽管TLS会试图隐藏确切的字节数,但是观察者仍然能看到传输数据块的大致规模。同样,也可以看到请求和响应的整体模式。

关于TLS怎么被设计出来的,那些问题这里就不说,下面说一下生成证书。

Python标准库中并没有提供私钥生成或者证书签名的相关操作。如果需要进行与这两项相关的操作,那么必须使用其他工具。openssl命令行工具就很流行而且很好用。

自己创建证书,通常要先生成两部分信息:第一部分是人工生成的,另一部分是由机器生成。人工生成的信息。人工生成的信息对证书中的描述的实体进行了文本说明,而机器会使用操作系统提供的真正的随机算法精心生成一个秘钥。

你也可以把手写的实体描述保存在一个版本控制文件中,以便今后查看。当然,你也可以直接在弹出的openssl命令提示符中输入实体描述的相关字段。

然后我们说一下TLS负载移除。

这里面先说另外一个点,为什么要直接在Python应用程序中直接进行加密操作,而不是直接使用工具。如果在另外一个端口运行这些工具的话,就可以通过它们对客户端的连接作出响应。

因此,在Python应用程序提供TLS支持的时候有两种选择:方案一是使用一个单独的守护进程或者服务提供TLS支持。方案二则是直接在Python编写的服务器代码中使用提供TLS功能的OpenSSL库。相比较于方案二,方案一更易于升级或者维护。

下面说下Python3.4之后的默认上下文,Python标准库是对OpenSSL库进行封装。当然,Python社区也在研究其他密码学的项目,包括pyOpenSSL。

Python3.4引入了ssl.create_default_context()函数,这样我们就可以轻松在Python应用程序中安全使用TLS。

这是一个简单的客户端和服务器,通过TLS套接字进行安全通信的方法。

import argparse, socket, ssl

def client(host, port, cafile=None):

purpose = ssl.Purpose.SERVER_AUTH

context = ssl.create_default_context(purpose, cafile=cafile)

raw_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

raw_sock.connect((host, port))

print('Connected to host{!r}and port{}'.format(host, port))

ssl_sock = context.wrap_socket(raw_sock, server_hostname=host)

while True:

data = ssl_sock.recv(1024)

if not data:

break

print(repr(data))

def server(host, port, certfile, cafile=None):

purpose = ssl.Purpose.CLIENT_AUTH

context = ssl.create_default_context(purpose, cafile=cafile)

context.load_cert_chain(certfile)

listener = socket.socket(socket

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值