类
GioTlsConnection
自:2.28
描述 [src]
abstract class Gio.TlsConnection : Gio.IOStream
{
priv: GTlsConnectionPrivate*
}
GTlsConnection
是 TLS 连接基类,它包装了 GIOStream
并在其之上提供 TLS 加密。其子类 GTlsClientConnection
和 GTlsServerConnection
分别实现客户端和服务器端的 TLS。
有关 DTLS (数据报 TLS) 支持的信息,请参阅 GDtlsConnection
。
自:2.28
实例方法
g_tls_connection_emit_accept_certificate
由 GTlsConnection
实现用于发出 GTlsConnection::accept-certificate
信号。
自:2.28
g_tls_connection_get_ciphersuite_name
返回当前 TLS 加密套件名称,如果连接未握手或已关闭,则返回 NULL
。请注意,TLS 后端可能使用多种不同的命名约定,因为 OpenSSL 和 GnuTLS 有自己的加密套件命名约定,这些约定彼此不同,与标准也不相同,与 IANA 登记的加密套件名称也不同。加密套件名称仅用于向用户显示信息,不建议解析。
自:2.70
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_async
异步地在 conn
上执行 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
此操作将设置 conn
在 TLS 握手期间将向其对方呈现的证书。对于 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_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
属性
Gio.TlsConnection:advertised-protocols
该连接声明愿意使用的应用层协议列表。请参阅 g_tls_connection_set_advertised_protocols()。
自:2.60
Gio.TlsConnection:base-io-stream
包裹连接的 GIOStream
。连接持有对这个流的引用,并且在它的整个生命周期中可能从其他线程对该流运行操作。因此,在 GIOStream
被构建之后,应用程序代码只能在没有 GIOStream
操作运行的情况下运行自己的操作。
自: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: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.handshake_async
异步地在 conn
上执行 TLS 握手。请参阅 g_tls_connection_handshake() 获取更多信息。
自:2.28
Gio.TlsConnectionClass.handshake_finish
完成异步 TLS 握手操作。请参阅 g_tls_connection_handshake() 获取更多信息。
自:2.28