信号

GioTlsConnection::accept-certificate

2.28起

声明

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

描述 [src]

在接收到对方证书后发出TLS握手时的信号。您可以通过在'peer_cert'上调用g_tls_certificate_get_issuer()来检查其证书路径。

对于客户端连接,peer_cert是服务器的证书,并且只有在证书根据conn'GTlsClientConnection:validation_flags不可接受时,才会发出信号。如果您想接受证书而忽略errors,则在信号处理程序中返回TRUE。否则,如果您没有信号处理程序接受证书,则握手将以G_TLS_ERROR_BAD_CERTIFICATE失败。

GLib保证,如果证书验证失败,则会以至少一个错误被设置在errors中发出此信号,但它不保证会设置所有可能错误。因此,您不能安全地忽略任何特定类型的错误。例如,如果您想允许过期的证书,那么忽视G_TLS_CERTIFICATE_EXPIRED是不正确的,因为这可能是唯一设置的错误标志,即使证书还有其他问题。

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

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

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

默认处理程序

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

自2.28以来可用

参数

peer_cert

类型: GTlsCertificate

对方的GTlsCertificate

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

类型: GTlsCertificateFlags

peer_cert的问题。

返回值

类型: gboolean

TRUE表示接受peer_cert(这将立即结束信号发出)。FALSE表示允许信号继续发出,如果没有人覆盖它,则握手将失败。