接口

GioDtlsConnection

自:2.48

说明 [src]

interface Gio.DtlsConnection : Gio.DatagramBased

GDtlsConnection 是基础 DTLS 连接类类型,它包装了一个 GDatagramBased,并在其基础上提供了 DTLS 加密。它的子类 GDtlsClientConnectionGDtlsServerConnection 分别实现了客户端和服务器端的 DTLS

有关 TLS 支持,请参阅 GTlsConnection

由于 DTLS 基于数据报,因此 GDtlsConnection 实现了 GDatagramBased,提供用于加密连接的数据报套接字式 API。它通过一个基础数据报连接进行操作,该连接也是一个 GDatagramBased (GDtlsConnection:base-socket)。

要关闭 DTLS 连接,请使用 g_dtls_connection_close()

GDtlsServerConnectionGDtlsClientConnection 两个接口都不会在自己的基础 GDatagramBased 上设置对等地址,如果该对等地址是一个 GSocket,则由调用者决定是否进行设置。如果不设置地址并对基础套接字调用 g_socket_close(),则 GDtlsConnection 不会在进一步的输入/输出操作中引发 G_IO_ERROR_NOT_CONNECTED 错误。

可用版本:2.48

先决条件

要实现 DtlsConnection,你的类型必须继承自 GDatagramBased

实例方法

g_dtls_connection_close

关闭 DTLS 连接。这等效于调用 g_dtls_connection_shutdown() 以关闭连接的两端。

自:2.48

g_dtls_connection_close_async

异步关闭 DTLS 连接。有关详细信息,请参阅 g_dtls_connection_close()

自:2.48

g_dtls_connection_close_finish

完成异步 TLS 关闭操作。有关详细信息,请参阅 g_dtls_connection_close()

自:2.48

g_dtls_connection_emit_accept_certificate

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

自:2.48

g_dtls_connection_get_certificate

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

自:2.48

g_dtls_connection_get_channel_binding_data

conn 查询类型为 typeTLS 通道绑定数据,以通过 TLS 后端进行查询。

可用版本:2.66

g_dtls_connection_get_ciphersuite_name

如果连接尚未握手或已被关闭,则返回当前 DTLS 密码套件的名称,否则返回 NULL。请注意,TLS 后端可以使用任何多种不同的命名约定,因为 OpenSSL 和 GnuTLS 具有自己的密码套件命名约定,它们相互之间不同,并且不同于标准 IANA 注册的密码套件名称。 密码套件名称仅用于向用户显示以供参考,不建议对其进行解析。

适用版本:2.70

g_dtls_connection_get_database

获取证书数据库,conn 使用该证书数据库验证对等证书。请参阅 g_dtls_connection_set_database()

自:2.48

g_dtls_connection_get_interaction

获取将用于与用户交互的对象。这将用于诸如提示用户输入密码之类的操作。如果返回 NULL,则此连接将不会进行任何用户交互。

自:2.48

g_dtls_connection_get_negotiated_protocol

获取在握手期间协商的应用程序层协议的名称。

适用版本:2.60

g_dtls_connection_get_peer_certificate

获取 conn 的对等证书,当握手完成或失败后获取。(它不会在发出 GDtlsConnection::accept-certificate 期间进行设置。

自:2.48

g_dtls_connection_get_peer_certificate_errors

获取与验证 conn 的对等证书关联的错误,在握手完成或失败后获取。(它不会在发出 GDtlsConnection::accept-certificate 期间进行设置)。

自:2.48

g_dtls_connection_get_protocol_version

返回当前 DTLS 协议版本,如果连接尚未握手或已被关闭,则该版本可能为 G_TLS_PROTOCOL_VERSION_UNKNOWN,或者如果 TLS 后端已实现的协议版本不是已识别的 GTlsProtocolVersion

适用版本:2.70

g_dtls_connection_get_rehandshake_mode

获取 conn 重新握手模式。有关详细信息,请参阅 g_dtls_connection_set_rehandshake_mode()

已弃用:2.64. 自版本:2.48

g_dtls_connection_get_require_close_notify

测试在关闭连接时,conn 是否期望适当的 TLS 关闭通知。有关详细信息,请参见 g_dtls_connection_set_require_close_notify()

自:2.48

g_dtls_connection_handshake

尝试在 conn 上执行 TLS 握手。

自:2.48

g_dtls_connection_handshake_async

异步地在 conn 上执行 TLS 握手。有关详细信息,请参见 g_dtls_connection_handshake()

自:2.48

g_dtls_connection_handshake_finish

完成异步 TLS 握手操作。有关详细信息,请参见 g_dtls_connection_handshake()

自:2.48

g_dtls_connection_set_advertised_protocols

设置应用程序层协议列表来宣传调用者愿意通过此连接进行通信。应用程序层协议协商 (ALPN) 扩展将用于与对等方协商兼容的协议;握手后使用 g_dtls_connection_get_negotiated_protocol() 来查找已协商的协议。为 protocols 值指定 NULL 将禁用 ALPN  协商。

适用版本:2.60

g_dtls_connection_set_certificate

这将设置 connTLS 握手期间提供给对其对等方的证书。对于 GDtlsServerConnection,设置它是强制性的,通常在构造时完成。

自:2.48

g_dtls_connection_set_database

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

自:2.48

g_dtls_connection_set_interaction

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

自:2.48

g_dtls_connection_set_rehandshake_mode

自 GLib 2.64 起,不再支持更改握手模式,并且不会产生任何效果。对于 TLS 1.3,已从 TLS 协议中删除了重新握手,取而代之的是单独的后握手身份验证和重新加密密钥操作。

已弃用:2.60. 自版本:2.48

g_dtls_connection_set_require_close_notify

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

自:2.48

g_dtls_connection_shutdown

关闭 DTLS 连接中的一部分或全部。

自:2.48

g_dtls_connection_shutdown_async

异步关闭 DTLS 连接中的一部分或全部。有关详细信息,请参见 g_dtls_connection_shutdown()

自:2.48

g_dtls_connection_shutdown_finish

完成异步 TLS 关闭操作。有关详细信息,请参见 g_dtls_connection_shutdown()

自:2.48

属性

Gio.DtlsConnection:advertised-protocols

连接宣传其愿意通信的应用程序层协议的列表。请参阅 g_dtls_connection_set_advertised_protocols()。

适用版本:2.60

Gio.DtlsConnection:base-socket

连接包装的 GDatagramBased。请注意,这可能是 GDatagramBased 的任何实现,而不仅仅是 GSocket

自:2.48

Gio.DtlsConnection:certificate

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

自:2.48

Gio.DtlsConnection:ciphersuite-name

使用的 DTLS 密码套件的名称。请参阅 g_dtls_connection_get_ciphersuite_name()。

适用版本:2.70

Gio.DtlsConnection:database

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

自:2.48

Gio.DtlsConnection:interaction

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

自:2.48

Gio.DtlsConnection:negotiated-protocol

TLS 握手期间协商的应用程序层协议。请参阅 g_dtls_connection_get_negotiated_protocol()。

适用版本:2.60

Gio.DtlsConnection:peer-certificate

连接的对等方的证书,在 TLS 握手完成后或失败后。请注意,在发出 GDtlsConnection::accept-certificate 时,此项尚未设置。

自:2.48

Gio.DtlsConnection:peer-certificate-errors

在验证 GDtlsConnection:peer-certificate 时注意到的错误。通常,此项应为 0,但如果 GDtlsClientConnection:validation-flags 并非 G_TLS_CERTIFICATE_VALIDATE_ALL,或者如果 GDtlsConnection::accept-certificate 覆盖了默认行为,则此项可能非为 0。

自:2.48

Gio.DtlsConnection:protocol-version

正在使用的 DTLS 协议版本。请参阅 g_dtls_connection_get_protocol_version()。

适用版本:2.70

Gio.DtlsConnection:rehandshake-mode

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

已弃用:2.60 自版本:2.48 起推出

Gio.DtlsConnection:require-close-notify

是否需要正确的 TLS 关闭通知。请参阅 g_dtls_connection_set_require_close_notify()。

自:2.48

信号

Gio.DtlsConnection::accept-certificate

在接收到对等方证书后在 TLS 握手期间发出。您可以通过调用其上的 g_tls_certificate_get_issuer() 检查 peer_certs 证书路径。

自:2.48

接口结构

struct GioDtlsConnectionInterface {
  GTypeInterface g_iface;
  gboolean (* accept_certificate) (
    GDtlsConnection* connection,
    GTlsCertificate* peer_cert,
    GTlsCertificateFlags errors
  );
  gboolean (* handshake) (
    GDtlsConnection* conn,
    GCancellable* cancellable,
    GError** error
  );
  void (* handshake_async) (
    GDtlsConnection* conn,
    int io_priority,
    GCancellable* cancellable,
    GAsyncReadyCallback callback,
    gpointer user_data
  );
  gboolean (* handshake_finish) (
    GDtlsConnection* conn,
    GAsyncResult* result,
    GError** error
  );
  gboolean (* shutdown) (
    GDtlsConnection* conn,
    gboolean shutdown_read,
    gboolean shutdown_write,
    GCancellable* cancellable,
    GError** error
  );
  void (* shutdown_async) (
    GDtlsConnection* conn,
    gboolean shutdown_read,
    gboolean shutdown_write,
    int io_priority,
    GCancellable* cancellable,
    GAsyncReadyCallback callback,
    gpointer user_data
  );
  gboolean (* shutdown_finish) (
    GDtlsConnection* conn,
    GAsyncResult* result,
    GError** error
  );
  void (* set_advertised_protocols) (
    GDtlsConnection* conn,
    const gchar* const* protocols
  );
  const gchar* (* get_negotiated_protocol) (
    GDtlsConnection* conn
  );
  gboolean (* get_binding_data) (
    GDtlsConnection* conn,
    GTlsChannelBindingType type,
    GByteArray* data,
    GError** error
  );
  
}

GDtlsConnection 实现的虚拟方法表。

接口成员
g_iface
GTypeInterface
 

父接口。

accept_certificate
gboolean (* accept_certificate) (
    GDtlsConnection* connection,
    GTlsCertificate* peer_cert,
    GTlsCertificateFlags errors
  )
 

检查是否接受证书。

handshake
gboolean (* handshake) (
    GDtlsConnection* conn,
    GCancellable* cancellable,
    GError** error
  )
 

执行握手操作。

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

启动异步握手操作。

handshake_finish
gboolean (* handshake_finish) (
    GDtlsConnection* conn,
    GAsyncResult* result,
    GError** error
  )
 

完成异步握手操作。

shutdown
gboolean (* shutdown) (
    GDtlsConnection* conn,
    gboolean shutdown_read,
    gboolean shutdown_write,
    GCancellable* cancellable,
    GError** error
  )
 

关闭连接的一个或两个方向。

shutdown_async
void (* shutdown_async) (
    GDtlsConnection* conn,
    gboolean shutdown_read,
    gboolean shutdown_write,
    int io_priority,
    GCancellable* cancellable,
    GAsyncReadyCallback callback,
    gpointer user_data
  )
 

启动异步关闭操作。

shutdown_finish
gboolean (* shutdown_finish) (
    GDtlsConnection* conn,
    GAsyncResult* result,
    GError** error
  )
 

完成异步关闭操作。

set_advertised_protocols
void (* set_advertised_protocols) (
    GDtlsConnection* conn,
    const gchar* const* protocols
  )
 

设置 APLN 协议列表(自版本:2.60 起推出)。

get_negotiated_protocol
const gchar* (* get_negotiated_protocol) (
    GDtlsConnection* conn
  )
 

获取 ALPN 协商协议(自版本:2.60 起推出)。

get_binding_data
gboolean (* get_binding_data) (
    GDtlsConnection* conn,
    GTlsChannelBindingType type,
    GByteArray* data,
    GError** error
  )
 

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

虚拟方法

Gio.DtlsConnection.accept_certificate

检查是否接受证书。

Gio.DtlsConnection.get_binding_data

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

Gio.DtlsConnection.get_negotiated_protocol

获取在握手期间协商的应用程序层协议的名称。

适用版本:2.60

Gio.DtlsConnection.handshake

尝试在 conn 上执行 TLS 握手。

自:2.48

Gio.DtlsConnection.handshake_async

异步地在 conn 上执行 TLS 握手。有关详细信息,请参见 g_dtls_connection_handshake()

自:2.48

Gio.DtlsConnection.handshake_finish

完成异步 TLS 握手操作。有关详细信息,请参见 g_dtls_connection_handshake()

自:2.48

Gio.DtlsConnection.set_advertised_protocols

设置应用程序层协议列表来宣传调用者愿意通过此连接进行通信。应用程序层协议协商 (ALPN) 扩展将用于与对等方协商兼容的协议;握手后使用 g_dtls_connection_get_negotiated_protocol() 来查找已协商的协议。为 protocols 值指定 NULL 将禁用 ALPN  协商。

适用版本:2.60

Gio.DtlsConnection.shutdown

关闭 DTLS 连接中的一部分或全部。

自:2.48

Gio.DtlsConnection.shutdown_async

异步关闭 DTLS 连接中的一部分或全部。有关详细信息,请参见 g_dtls_connection_shutdown()

自:2.48

Gio.DtlsConnection.shutdown_finish

完成异步 TLS 关闭操作。有关详细信息,请参见 g_dtls_connection_shutdown()

自:2.48