gevent.ssl
--安全套接字层(SSL/TLS)模块#
此模块提供SSL/TLS操作和一些相关功能。函数和类的API与标准中相应项的API匹配 ssl
模块完全正确,但此模块中的同步功能只会阻塞当前greenlet并让其他模块运行。
此模块公开的确切API因您使用的是哪种版本的Python而异。下面的文档介绍了Python3的API。
小技巧
作为实现说明,gevent的确切行为将根据使用的底层TLS版本有所不同。例如,握手过程中涉及的数据交换的数量,以及该过程发生的确切时间,都会有所不同。这可以通过greenlet开关或gevent事件循环的跳闸次数和时间间接观察到。
大多数应用程序不应该注意到这一点,但是有些应用程序(尤其是测试,在这种情况下,进程既是服务器又是自己的客户机)可能会发现,它们对多个greenlet的运行顺序进行了假设。随着tls1.3的部署,这些假设很可能会被打破。
警告
所有描述的API都应该从 gevent.ssl
和 not 从它们的实现模块。他们的组织是一个可以随时更改的实现细节。
Python3上套接字对象的SSL包装器。
有关文档,请参阅 ssl
模块手册。
该模块实现了协同的SSL套接字包装。
- CertificateError#
- exception SSLCertVerificationError#
基类:
SSLError
,ValueError
无法验证证书。
- class AlertDescription(value, names=None, *values, module=None, qualname=None, type=None, start=1, boundary=None)#
基类:
IntEnum
枚举。
- class DefaultVerifyPaths(cafile, capath, openssl_cafile_env, openssl_cafile, openssl_capath_env, openssl_capath)#
基类:
tuple
创建defaultverifypaths的新实例(cafile、capath、openssl-cafile-env、openssl-cafile、openssl-capath-env、openssl-capath)
- cafile#
字段编号0的别名
- capath#
字段编号1的别名
- openssl_cafile#
字段编号3的别名
- openssl_cafile_env#
字段编号2的别名
- openssl_capath#
字段5的别名
- openssl_capath_env#
字段编号4的别名
- class Options(value, names=None, *values, module=None, qualname=None, type=None, start=1, boundary=None)#
基类:
IntFlag
枚举。
- class Purpose(value, names=None, *values, module=None, qualname=None, type=None, start=1, boundary=None)[源代码]#
基类:
_ASN1Object
,Enum
带有X509v3扩展密钥用法对象的SSLContext用途标志
创建_ASN1Object(NID,短名,长名,OID)的新实例
- class SSLContext(protocol=None, *args, **kwargs)[源代码]#
基类:
SSLContext
- property sni_callback#
设置一个回调,当SSL/TLS客户机在SNI扩展中提供服务器名称时将调用该回调。
如果参数为None,则禁用回调。使用SSLSocket、作为字符串的服务器名称和SSLContext对象调用该方法。有关SNI扩展的详细信息,请参阅RFC 6066。
- class SSLErrorNumber(value, names=None, *values, module=None, qualname=None, type=None, start=1, boundary=None)#
基类:
IntEnum
枚举。
- class SSLObject(*args, **kwargs)[源代码]#
基类:
object
这个类在一个低级的ssl对象上实现了一个由openssl实现的接口。此对象捕获SSL连接的状态,但不提供任何网络IO本身。IO需要通过单独的“bio”对象来执行,这些对象是OpenSSL的IO抽象层。
此类没有公共构造函数。实例由返回
SSLContext.wrap_bio
. 此类通常由框架作者使用,他们希望通过内存缓冲区为SSL实现异步IO。与…相比
SSLSocket
,此对象缺少以下功能:任何形式的网络IO,包括
recv
和send
.这个
do_handshake_on_connect
和suppress_ragged_eofs
机械。
- get_channel_binding(cb_type='tls-unique')[源代码]#
获取当前连接的通道绑定数据。如果请求,则引发ValueError
cb_type
不支持。如果数据不可用(例如握手前),返回数据字节或无。
- getpeercert(binary_form=False)[源代码]#
返回由SSL通道另一端提供的证书中数据的格式化版本。
如果没有提供证书,则返回“无”;如果提供了证书,但没有验证,则返回“无”。
返回客户机在握手过程中共享的密码列表,如果这不是有效的服务器连接,则返回“无”。
- property context#
当前正在使用的sslcontext。
- property server_hostname#
当前设置的服务器主机名(用于SNI),或
None
如果未设置服务器主机名。
- property server_side#
这是否是服务器端套接字。
- property session#
客户端套接字的SSLSession。
- property session_reused#
在握手过程中是否重复使用客户端会话?
- class SSLSocket(sock=None, keyfile=None, certfile=None, server_side=False, cert_reqs=VerifyMode.CERT_NONE, ssl_version=_SSLMethod.PROTOCOL_TLS, ca_certs=None, do_handshake_on_connect=True, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, fileno=None, suppress_ragged_eofs=True, npn_protocols=None, ciphers=None, server_hostname=None, _session=None, _context=None)[源代码]#
基类:
socket
Gevent ssl.SSLSocket 对于python 3。
- get_channel_binding(cb_type='tls-unique')[源代码]#
获取当前连接的通道绑定数据。如果请求,则引发ValueError
cb_type
不支持。如果数据不可用(例如握手前),返回数据字节或无。
- getpeercert(binary_form=False)[源代码]#
返回由SSL通道另一端提供的证书中数据的格式化版本。如果没有提供证书,则返回“无”;如果提供了证书,但没有验证,则返回“无”。
- read(nbytes=2014, buffer=None)[源代码]#
读取最多len字节并返回它们。返回EOF上的零长度字符串。
在 24.2.1 版本发生变更: 不再需要非None buffer 要实施
len()
。这是从3.11.8开始的后端口。
- recv(buffersize[, flags]) data [源代码]#
从套接字接收最大缓冲区大小的字节。有关可选标志参数,请参阅Unix手册。当没有数据可用时,挡路会一直使用,直到至少有一个字节可用,或者直到远程端关闭。当远端关闭并读取所有数据时,返回空字符串。
- recv_into(buffer, nbytes=None, flags=0)[源代码]#
在 24.2.1 版本发生变更: 不再需要非None buffer 要实施
len()
。这是从3.11.8开始的后端口。
- recvfrom_into(buffer[, nbytes[, flags]]) -> (nbytes, address info)[源代码]#
LIKE recv_into(缓冲区 [,n字节[,标志] ]),而且还返回发件人的地址信息。
- sendall(data[, flags])[源代码]#
将数据字符串发送到套接字。有关可选标志参数,请参阅Unix手册。该函数重复调用send(),直到发送完所有数据。如果发生错误,就不可能知道已经发送了多少数据。
返回客户机在握手过程中共享的密码列表,如果这不是有效的服务器连接,则返回“无”。
- property session#
客户端套接字的SSLSession。
- property session_reused#
在握手过程中是否重复使用客户端会话?
- class TLSVersion(value, names=None, *values, module=None, qualname=None, type=None, start=1, boundary=None)[源代码]#
基类:
IntEnum
枚举。
- class VerifyFlags(value, names=None, *values, module=None, qualname=None, type=None, start=1, boundary=None)#
基类:
IntFlag
枚举。
- class VerifyMode(value, names=None, *values, module=None, qualname=None, type=None, start=1, boundary=None)#
基类:
IntEnum
枚举。
- RAND_add(string, entropy, /)#
将字符串混合到openssl prng状态。
熵(float)是字符串中熵的下限。见RFC 4086。
- RAND_bytes(n, /)#
生成n个加密的强伪随机字节。
- RAND_status()#
如果OpenSSL PRNG已使用足够的数据进行种子设定,则返回True;如果没有,则返回False。
在使用ssl()函数之前,必须在某些平台上用rand_add()为prng种子。
- cert_time_to_seconds(cert_time)[源代码]#
返回从epoch开始的时间(以秒为单位),给定表示中证书的“notbefore”或“notafter”日期的时间线。
"%b %d %H:%M:%S %Y %Z"
strptime格式(C语言环境)。“NotBefore”或“NotAfter”日期必须使用UTC(RFC 5280)。
月份是以下之一:1-2-3-4-5-6-7-8-9-10-11-12应将UTC指定为GMT(请参阅asn1_time_print())
- create_connection(address, timeout=<object object>, source_address=None, *, all_errors=False)[源代码]#
连接到 地址 然后返回socket对象。
方便功能。连接到 address (2元组
(host, port)
)并返回Socket对象。传递可选的 timeout 参数将在尝试连接之前设置套接字实例的超时时间。如果没有 timeout 将返回全局默认超时设置getdefaulttimeout()
使用的是。如果 source_address 必须是(主机、端口)的元组,套接字才能在建立连接之前绑定为源地址。主机‘’或端口0告诉操作系统使用默认设置。当无法创建连接时,如果 all_errors 为FALSE,则为所有错误的ExceptionGroup,如果 all_errors 是真的。