信号
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线程返回答案。
默认处理程序 默认处理程序在通过 |
自2.28以来可用 |
参数
peer_cert
-
类型:
GTlsCertificate
对方的
GTlsCertificate
。数据由函数的调用者拥有。 errors
-
peer_cert
的问题。