gevent.ssl --安全套接字层(SSL/TLS)模块#

此模块提供SSL/TLS操作和一些相关功能。函数和类的API与标准中相应项的API匹配 ssl 模块完全正确,但此模块中的同步功能只会阻塞当前greenlet并让其他模块运行。

此模块公开的确切API因您使用的是哪种版本的Python而异。下面的文档介绍了Python3的API。

小技巧

作为实现说明,gevent的确切行为将根据使用的底层TLS版本有所不同。例如,握手过程中涉及的数据交换的数量,以及该过程发生的确切时间,都会有所不同。这可以通过greenlet开关或gevent事件循环的跳闸次数和时间间接观察到。

大多数应用程序不应该注意到这一点,但是有些应用程序(尤其是测试,在这种情况下,进程既是服务器又是自己的客户机)可能会发现,它们对多个greenlet的运行顺序进行了假设。随着tls1.3的部署,这些假设很可能会被打破。

警告

所有描述的API都应该从 gevent.sslnot 从它们的实现模块。他们的组织是一个可以随时更改的实现细节。

Python3上套接字对象的SSL包装器。

有关文档,请参阅 ssl 模块手册。

该模块实现了协同的SSL套接字包装。

CertificateError#

SSLCertVerificationError 的别名

exception SSLCertVerificationError#

基类:SSLError, ValueError

无法验证证书。

exception SSLEOFError#

基类:SSLError

SSL/TLS连接突然终止。

exception SSLError#

基类:OSError

SSL实现中发生错误。

exception SSLSyscallError#

基类:SSLError

尝试SSL操作时出现系统错误。

exception SSLWantReadError#

基类:SSLError

在完成请求的操作之前,非阻塞的SSL套接字需要读取更多的数据。

exception SSLWantWriteError#

基类:SSLError

非阻塞的SSL套接字需要在完成请求的操作之前写入更多数据。

exception SSLZeroReturnError#

基类:SSLError

ssl/tls会话完全关闭。

socket_error#

OSError 的别名

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

sslsocket_class#

SSLSocket 的别名

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,包括 recvsend .

  • 这个 do_handshake_on_connectsuppress_ragged_eofs 机械。

cipher()[源代码]#

将当前选定的密码作为3元组返回 (name, ssl_version, secret_bits) .

compression()[源代码]#

返回当前使用的压缩算法,或者 None 如果压缩没有经过协商或某个对等机不支持。

do_handshake()[源代码]#

启动SSL/TLS握手。

get_channel_binding(cb_type='tls-unique')[源代码]#

获取当前连接的通道绑定数据。如果请求,则引发ValueError cb_type 不支持。如果数据不可用(例如握手前),返回数据字节或无。

getpeercert(binary_form=False)[源代码]#

返回由SSL通道另一端提供的证书中数据的格式化版本。

如果没有提供证书,则返回“无”;如果提供了证书,但没有验证,则返回“无”。

pending()[源代码]#

返回可以立即读取的字节数。

read(len=1024, buffer=None)[源代码]#

从ssl对象读取最多“len”个字节并返回它们。

如果提供了“buffer”,则读取此缓冲区并返回读取的字节数。

selected_alpn_protocol()[源代码]#

以字符串形式返回当前选定的ALPN协议,或者 None 如果没有协商下一个协议,或者其中一个对等方不支持ALPN。

selected_npn_protocol()[源代码]#

以字符串形式返回当前选定的NPN协议,或者 None 如果没有协商下一个协议,或者其中一个对等方不支持NPN。

shared_ciphers()[源代码]#

返回客户机在握手过程中共享的密码列表,如果这不是有效的服务器连接,则返回“无”。

unwrap()[源代码]#

启动SSL关闭握手。

version()[源代码]#

返回一个字符串,用于标识当前SSL通道使用的协议版本。

write(data)[源代码]#

将“data”写入ssl对象并返回写入的字节数。

“data”参数必须支持缓冲区接口。

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。

accept()[源代码]#

接受来自远程客户机的新连接,并返回一个包含用服务器端SSL通道包装的新连接的元组,以及远程客户机的地址。

connect(addr)[源代码]#

连接到远程地址,然后将连接包装在SSL通道中。

connect_ex(addr)[源代码]#

连接到远程地址,然后将连接包装在SSL通道中。

do_handshake()[源代码]#

执行TLS/SSL握手。

dup() socket object[源代码]#

返回连接到同一系统资源的新套接字对象。

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(buffersize[, flags]) -> (data, address info)[源代码]#

如recv(Buffersize,flag),但也返回发送者的地址信息。

recvfrom_into(buffer[, nbytes[, flags]]) -> (nbytes, address info)[源代码]#

LIKE recv_into(缓冲区 [,n字节[,标志] ]),而且还返回发件人的地址信息。

send(data[, flags]) count[源代码]#

将数据字符串发送到套接字。有关可选标志参数,请参阅Unix手册。返回发送的字节数;如果网络繁忙,该值可能小于len(数据)。

sendall(data[, flags])[源代码]#

将数据字符串发送到套接字。有关可选标志参数,请参阅Unix手册。该函数重复调用send(),直到发送完所有数据。如果发生错误,就不可能知道已经发送了多少数据。

sendto(data, [flags, ]address) count[源代码]#

与SEND(数据、标志)类似,但允许指定目的地址。对于IP套接字,地址是一对(主机地址、端口)。

shared_ciphers()[源代码]#

返回客户机在握手过程中共享的密码列表,如果这不是有效的服务器连接,则返回“无”。

shutdown(flag)[源代码]#

关闭插座的读取端(FLAG==SHUT_RD)、插座的写入端(FLAG==SHUT_WR)或两端(FLAG==SHUT_RDWR)。

version()[源代码]#

返回一个字符串,用于标识当前SSL通道使用的协议版本。

write(data)[源代码]#

将数据写入底层的SSL通道。返回实际传输的数据字节数。

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

枚举。

DER_cert_to_PEM_cert(der_cert_bytes)[源代码]#

获取二进制DER格式的证书,并将其PEM版本作为字符串返回。

PEM_cert_to_DER_cert(pem_cert_string)[源代码]#

采用ASCIIPEM格式的证书,并以字节序列的形式返回其DER编码版本。

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 是真的。

create_default_context(purpose=Purpose.SERVER_AUTH, *, cafile=None, capath=None, cadata=None)[源代码]#

使用默认设置创建sslcontext对象。

注意:协议和设置可能随时更改,无需事先

折旧。这些值表示最大兼容性和安全性之间的公平平衡。

get_default_verify_paths()[源代码]#

将路径返回到默认的cafile和capath。

get_server_certificate(addr, ssl_version=_SSLMethod.PROTOCOL_TLS, ca_certs=None)[源代码]#

从指定地址的服务器检索证书,并将其作为PEM编码字符串返回。如果指定了“ca-certs”,请根据它验证服务器证书。如果指定了'ssl_version',请在连接尝试中使用它。