信号

GioDtlsConnection::accept-certificate

自从:2.48

声明

gboolean
accept_certificate (
  GDtlsConnection* self,
  GTlsCertificate* peer_cert,
  GTlsCertificateFlags errors,
  gpointer user_data
)

描述 [src]

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

对于客户端连接,peer_cert 是服务器证书,并且只有在证书根据 connGDtlsClientConnection:validation_flags 不可接受时,才会发出信号。如果您希望在出现错误的情况下也接受证书,则从信号处理程序返回 TRUE。否则,如果没有处理程序接受证书,则握手将因为 G_TLS_ERROR_BAD_CERTIFICATE 而失败。

GLib 保证如果证书验证失败,则此信号将带有一个或多个错误设置为 errors 而发出,但不保证设置所有可能错误。因此,您不能安全地忽略任何特定类型的错误。例如,如果您想允许已过期的证书,则不能忽略 G_TLS_CERTIFICATE_EXPIRED,因为即使证书存在其他问题,这也可能是唯一设置的错误标志。

对于服务器端连接,peer_cert 是客户端通过服务器的 GDtlsServerConnection:authentication_mode 请求时提供的证书。在服务器端,当客户端提供证书时,总是发出信号,并且只有在处理程序返回 TRUE 时才接受证书。

请注意,如果此信号是作为主线程异步 I/O 的一部分发出的,那么您在返回到信号处理程序之前不应尝试与用户交互。如果您想让用户决定是否接受证书,则必须在第一次尝试中从信号处理程序返回 FALSE,然后在连接尝试返回 G_TLS_ERROR_BAD_CERTIFICATE 后,您可以与用户交互,如果用户决定接受证书,请记住这一点,创建一个新的连接,并在下一次从信号处理程序返回 TRUE

如果您在其他线程中进行 I/O,您不需要担心这个问题,并且可以在信号处理程序中简单地阻塞,直到 UI 线程返回答案。

默认处理程序

默认处理程序在调用 g_signal_connect() 添加的处理程序之后被调用。

自:2.48

参数

peer_cert

类型: GTlsCertificate

对等的 GTlsCertificate

数据由函数的调用者持有。
errors

类型: GTlsCertificateFlags

peer_cert 的问题。

返回值

类型: gboolean

TRUE 表示接受 peer_cert(这也会立即结束信号发出)。FALSE 允许信号发出继续,这会导致握手失败如果没有其他处理程序覆盖它。