接口
GioDtlsConnection
自:2.48
说明 [src]
interface Gio.DtlsConnection : Gio.DatagramBased
GDtlsConnection
是基础 DTLS 连接类类型,它包装了一个 GDatagramBased
,并在其基础上提供了 DTLS 加密。它的子类 GDtlsClientConnection
和 GDtlsServerConnection
分别实现了客户端和服务器端的 DTLS。
有关 TLS 支持,请参阅 GTlsConnection
。
由于 DTLS 基于数据报,因此 GDtlsConnection
实现了 GDatagramBased
,提供用于加密连接的数据报套接字式 API。它通过一个基础数据报连接进行操作,该连接也是一个 GDatagramBased
(GDtlsConnection:base-socket
)。
要关闭 DTLS 连接,请使用 g_dtls_connection_close()
。
GDtlsServerConnection
或 GDtlsClientConnection
两个接口都不会在自己的基础 GDatagramBased
上设置对等地址,如果该对等地址是一个 GSocket
,则由调用者决定是否进行设置。如果不设置地址并对基础套接字调用 g_socket_close()
,则 GDtlsConnection
不会在进一步的输入/输出操作中引发 G_IO_ERROR_NOT_CONNECTED
错误。
可用版本:2.48
先决条件
要实现 DtlsConnection,你的类型必须继承自 GDatagramBased
。
实例方法
g_dtls_connection_emit_accept_certificate
用于 GDtlsConnection
实现以发出 GDtlsConnection::accept-certificate
信号。
自:2.48
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_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_async
异步地在 conn
上执行 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
这将设置 conn
在 TLS 握手期间提供给对其对等方的证书。对于 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_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_async
异步关闭 DTLS 连接中的一部分或全部。有关详细信息,请参见 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: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: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_cert
‘s 证书路径。
自: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 |
|
父接口。 |
|
accept_certificate |
|
检查是否接受证书。 |
|
handshake |
|
执行握手操作。 |
|
handshake_async |
|
启动异步握手操作。 |
|
handshake_finish |
|
完成异步握手操作。 |
|
shutdown |
|
关闭连接的一个或两个方向。 |
|
shutdown_async |
|
启动异步关闭操作。 |
|
shutdown_finish |
|
完成异步关闭操作。 |
|
set_advertised_protocols |
|
设置 APLN 协议列表(自版本:2.60 起推出)。 |
|
get_negotiated_protocol |
|
获取 ALPN 协商协议(自版本:2.60 起推出)。 |
|
get_binding_data |
|
检索 TLS 通道绑定数据(自版本:2.66 起推出)。 |
虚拟方法
Gio.DtlsConnection.handshake_async
异步地在 conn
上执行 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_async
异步关闭 DTLS 连接中的一部分或全部。有关详细信息,请参见 g_dtls_connection_shutdown()
。
自:2.48