GioTlsConnection

自:2.28

描述 [src]

abstract class Gio.TlsConnection : Gio.IOStream
{
  priv: GTlsConnectionPrivate*
}

GTlsConnection 是 TLS 连接基类,它包装了 GIOStream 并在其之上提供 TLS 加密。其子类 GTlsClientConnectionGTlsServerConnection 分别实现客户端和服务器端的 TLS。

有关 DTLS (数据报 TLS) 支持的信息,请参阅 GDtlsConnection

自:2.28

实例方法

g_tls_connection_emit_accept_certificate

GTlsConnection 实现用于发出 GTlsConnection::accept-certificate 信号。

自:2.28

g_tls_connection_get_certificate

获取 conn的证书,由 g_tls_connection_set_certificate() 设置。

自:2.28

g_tls_connection_get_channel_binding_data

查询 connTLS 通道绑定数据,类型为 type

自:2.66

g_tls_connection_get_ciphersuite_name

返回当前 TLS 加密套件名称,如果连接未握手或已关闭,则返回 NULL。请注意,TLS 后端可能使用多种不同的命名约定,因为 OpenSSL 和 GnuTLS 有自己的加密套件命名约定,这些约定彼此不同,与标准也不相同,与 IANA 登记的加密套件名称也不同。加密套件名称仅用于向用户显示信息,不建议解析。

自:2.70

g_tls_connection_get_database

获取 conn 用于验证对方证书的证书数据库。请参阅 g_tls_connection_set_database()。

自:2.30

g_tls_connection_get_interaction

获取用于与用户交互的对象。它将用于像提示用户密码这样的操作。如果返回 NULL,则不会为此连接发生用户交互。

自:2.30

g_tls_connection_get_negotiated_protocol

获取握手过程中协商的应用层协议名称。

自:2.60

g_tls_connection_get_peer_certificate

获取握手完成或失败后 conn 对方的证书。 (在 GTlsConnection::accept-certificate 产生时不会设置。)

自:2.28

g_tls_connection_get_peer_certificate_errors

获取握手完成或失败后与验证 conn 对方证书相关的错误。 (在 GTlsConnection::accept-certificate 产生时不会设置。)

自:2.28

g_tls_connection_get_protocol_version

返回当前的 TLS 协议版本,如果连接未握手、已关闭,或者 TLS 后端实现了不被认可 GTlsProtocolVersion 的协议版本,则可能返回 G_TLS_PROTOCOL_VERSION_UNKNOWN

自:2.70

g_tls_connection_get_rehandshake_mode

获取 conn 的重握手模式。请参阅 g_tls_connection_set_rehandshake_mode() 获取详细信息。

已弃用:2.60。 自:2.28

g_tls_connection_get_require_close_notify

检查 conn 是否期望在关闭连接时收到正确的 TLS 关闭通知。请参阅 g_tls_connection_set_require_close_notify() 获取详细信息。

自:2.28

g_tls_connection_get_use_system_certdb

获取是否 conn 使用系统证书数据库来验证对方证书。请参阅 g_tls_connection_set_use_system_certdb()。

已弃用:2.30 

g_tls_connection_handshake

尝试在 conn 上执行 TLS 握手。

自:2.28

g_tls_connection_handshake_async

异步地在 conn 上执行 TLS 握手。请参阅 g_tls_connection_handshake() 获取更多信息。

自:2.28

g_tls_connection_handshake_finish

完成异步 TLS 握手操作。请参阅 g_tls_connection_handshake() 获取更多信息。

自:2.28

g_tls_connection_set_advertised_protocols

设置要宣传的应用层协议列表,调用者愿意在此连接上讨论。将使用应用层协议协商(ALPN)扩展与小端协商兼容的协议;使用 g_tls_connection_get_negotiated_protocol() 在握手后查找协商的协议。为 protocols 的值指定 NULL 将禁用 ALPN 协商。

自:2.60

g_tls_connection_set_certificate

此操作将设置 connTLS 握手期间将向其对方呈现的证书。对于 GTlsServerConnection,设置此属性是强制性的,通常在构建时执行此操作。

自:2.28

g_tls_connection_set_database

设置用于验证对方证书的证书数据库。默认情况下设置为默认数据库。见 g_tls_backend_get_default_database()。如果设置为 NULL,则对方证书验证将始终设置 G_TLS_CERTIFICATE_UNKNOWN_CA 错误(意味着在客户端连接上,GTlsConnection::accept-certificate 将始终发出,除非该位在 GTlsClientConnection:validation-flags 中未设置)。

自:2.30

g_tls_connection_set_interaction

设置用于与用户交互的对象。它将用于如提示用户输入密码等操作。

自:2.30

g_tls_connection_set_rehandshake_mode

从 GLib 2.64 版本开始,不支持更改重新握手模式,这将没有效果。在 TLS 1.3 中,重新握手已经从 TLS 协议中移除,并替换为单独的手密钥验证和重新协商操作。

已弃用:2.60。 自:2.28

g_tls_connection_set_require_close_notify

设置 conn 是否在关闭连接之前期望收到一个正常的 TLS 关闭通知。如果此设置为 TRUE(默认值),则 conn 将在关闭连接之前期望从其对等方收到一个 TLS 关闭通知,如果在没有适当通知的情况下关闭连接,它将返回一个 G_TLS_ERROR_EOF 错误(因为这可能表明网络错误或中间人攻击)。

自:2.28

g_tls_connection_set_use_system_certdb

设置 conn 是否使用系统证书数据库来验证对方证书。默认值为 TRUE。如果设置为 FALSE,则对方证书验证将始终设置 G_TLS_CERTIFICATE_UNKNOWN_CA 错误(意味着在客户端连接上,GTlsConnection::accept-certificate 将始终发出,除非该位在 GTlsClientConnection:validation-flags 中未设置)。

已弃用:2.30 

GIOStream 继承的方法(10)
g_io_stream_clear_pending

清除 stream 上的挂起标志。

since: 2.22

g_io_stream_close

关闭流,释放与其相关的资源。这将关闭流、输入流和输出流(如果它们尚未关闭)。

since: 2.22

g_io_stream_close_async

请求异步关闭流并释放与其相关的资源。当操作完成时,将调用 callback。然后您可以调用 g_io_stream_close_finish() 来获取操作的结果。

since: 2.22

g_io_stream_close_finish

关闭流。

since: 2.22

g_io_stream_get_input_stream

获取此对象的输入流。这用于读取。

since: 2.22

g_io_stream_get_output_stream

获取此对象的输出流。这用于写入。

since: 2.22

g_io_stream_has_pending

检查流是否有待执行的挂起操作。

since: 2.22

g_io_stream_is_closed

检查流是否已关闭。

since: 2.22

g_io_stream_set_pending

stream 设置为具有挂起操作。如果挂起标志已设置或 stream 已关闭,则返回 FALSE 并设置 error

since: 2.22

g_io_stream_splice_async

异步地将 stream1 的输出流连接到 stream2 的输入流,并将 stream2 的输出流连接到 stream1 的输入流。

自:2.28

GObject 继承的方法(43)

请参阅 GObject 获取方法的全列表。

属性

Gio.TlsConnection:advertised-protocols

该连接声明愿意使用的应用层协议列表。请参阅 g_tls_connection_set_advertised_protocols()。

自:2.60

Gio.TlsConnection:base-io-stream

包裹连接的 GIOStream。连接持有对这个流的引用,并且在它的整个生命周期中可能从其他线程对该流运行操作。因此,在 GIOStream 被构建之后,应用程序代码只能在没有 GIOStream 操作运行的情况下运行自己的操作。

自:2.28

Gio.TlsConnection:certificate

连接的证书;请参阅 g_tls_connection_set_certificate()。

自:2.28

Gio.TlsConnection:ciphersuite-name

当前使用中的 TLS 密码套件名称。请参阅 g_tls_connection_get_ciphersuite_name()。

自:2.70

Gio.TlsConnection:database

验证此 TLS 连接时要使用的证书数据库。如果没有设置证书数据库,则将使用默认数据库。请参阅 g_tls_backend_get_default_database()。

自:2.30

Gio.TlsConnection:interaction

当连接或证书数据库需要与用户交互时使用的 GTlsInteraction 对象。这将在需要时提示用户输入密码。

自:2.30

Gio.TlsConnection:negotiated-protocol

TLS 握手中协商的应用层协议。请参阅 g_tls_connection_get_negotiated_protocol()。

自:2.60

Gio.TlsConnection:peer-certificate

认证开始或失败后连接的对等证书。请注意,在 GTlsConnection::accept-certificate 发射期间这尚未设置。

自:2.28

Gio.TlsConnection:peer-certificate-errors

在验证 GTlsConnection:peer-certificate 过程中发现的错误。通常这应该为 0,但如果 GTlsClientConnection:validation-flags 不是 G_TLS_CERTIFICATE_VALIDATE_ALL,或者如果 GTlsConnection::accept-certificate 覆盖了默认行为,则可能不为 0。

自:2.28

Gio.TlsConnection:protocol-version

使用中的 TLS 协议版本。请参阅 g_tls_connection_get_protocol_version()。

自:2.70

Gio.TlsConnection:rehandshake-mode

重新握手模式。请参阅 g_tls_connection_set_rehandshake_mode()。

弃用:2.60 自:2.28

Gio.TlsConnection:require-close-notify

是否需要合适的 TLS 关闭通知。请参阅 g_tls_connection_set_require_close_notify()。

自:2.28

Gio.TlsConnection:use-system-certdb

是否使用系统证书数据库来验证对等证书。请参阅 g_tls_connection_set_use_system_certdb()。

已弃用:2.30 

GIOStream 继承的属性(3)
Gio.IOStream:closed

流是否已关闭。

since: 2.22

Gio.IOStream:input-stream

读取的 GInputStream

since: 2.22

Gio.IOStream:output-stream

写入的 GOutputStream

since: 2.22

信号

Gio.TlsConnection::accept-certificate

在接收到对等证书后,在 TLS 握手过程中发出。您可以通过在 peer_cert 上调用 g_tls_certificate_get_issuer() 来检查 peer_cert 的证书路径。

自:2.28

GObject 继承的信号(1)
GObject::notify

当对象的一个属性通过 g_object_set_property(), g_object_set() 等. 设置其值时,会发出通知信号。

类结构

struct GioTlsConnectionClass {
  GIOStreamClass parent_class;
  gboolean (* accept_certificate) (
    GTlsConnection* connection,
    GTlsCertificate* peer_cert,
    GTlsCertificateFlags errors
  );
  gboolean (* handshake) (
    GTlsConnection* conn,
    GCancellable* cancellable,
    GError** error
  );
  void (* handshake_async) (
    GTlsConnection* conn,
    int io_priority,
    GCancellable* cancellable,
    GAsyncReadyCallback callback,
    gpointer user_data
  );
  gboolean (* handshake_finish) (
    GTlsConnection* conn,
    GAsyncResult* result,
    GError** error
  );
  gboolean (* get_binding_data) (
    GTlsConnection* conn,
    GTlsChannelBindingType type,
    GByteArray* data,
    GError** error
  );
  const gchar* (* get_negotiated_protocol) (
    GTlsConnection* conn
  );
  
}

GTlsConnection 类型提供的类结构。

类成员
parent_class: GIOStreamClass

父类。

accept_certificate: gboolean (* accept_certificate) ( GTlsConnection* connection, GTlsCertificate* peer_cert, GTlsCertificateFlags errors )

检查是否接受证书。

handshake: gboolean (* handshake) ( GTlsConnection* conn, GCancellable* cancellable, GError** error )

执行握手操作。

handshake_async: void (* handshake_async) ( GTlsConnection* conn, int io_priority, GCancellable* cancellable, GAsyncReadyCallback callback, gpointer user_data )

启动异步握手操作。

handshake_finish: gboolean (* handshake_finish) ( GTlsConnection* conn, GAsyncResult* result, GError** error )

完成异步握手操作。

get_binding_data: gint (* get_binding_data) (GTlsConnection* conn, GTlsChannelBindingType type, GByteArray* data, GError** error)

检索TLS通道绑定数据(自2.66版本起)。

get_negotiated_protocol: const gchar* (* get_negotiated_protocol) ( GTlsConnection* conn )

获取ALPN协商的协议(自2.70版本起)。

虚拟方法

Gio.TlsConnectionClass.accept_certificate

检查是否接受证书。

Gio.TlsConnectionClass.get_binding_data

检索TLS通道绑定数据(自2.66版本起)。

Gio.TlsConnectionClass.get_negotiated_protocol

获取握手过程中协商的应用层协议名称。

自:2.60

Gio.TlsConnectionClass.handshake

尝试在 conn 上执行 TLS 握手。

自:2.28

Gio.TlsConnectionClass.handshake_async

异步地在 conn 上执行 TLS 握手。请参阅 g_tls_connection_handshake() 获取更多信息。

自:2.28

Gio.TlsConnectionClass.handshake_finish

完成异步 TLS 握手操作。请参阅 g_tls_connection_handshake() 获取更多信息。

自:2.28