信号
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
是服务器证书,并且只有在证书根据 conn
的 GDtlsClientConnection: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 线程返回答案。
默认处理程序 默认处理程序在调用 |
自:2.48 |
参数
peer_cert
-
类型:
GTlsCertificate
对等的
GTlsCertificate
。数据由函数的调用者持有。 errors
-
peer_cert
的问题。