虚拟方法
验证链协议.GioTlsDatabaseverify_chain
自:2.30
声明 [源]
GTlsCertificateFlags
verify_chain (
GTlsDatabase* self,
GTlsCertificate* chain,
const gchar* purpose,
GSocketConnectable* identity,
GTlsInteraction* interaction,
GTlsDatabaseVerifyFlags flags,
GCancellable* cancellable,
GError** error
)
描述 [源]
在TLS会话之外确定证书链的有效性。
chain
是一组 GTlsCertificate
对象,每个对象通过它的 GTlsCertificate:issuer
属性指向链中的下一个证书。
purpose
描述了使用证书的目的或用途。通常 purpose
将设置为 G_TLS_DATABASE_PURPOSE_AUTHENTICATE_SERVER
,这意味着证书正在用于验证服务器(我们作为客户端)。
identity
用于确保服务器证书对其期望的对等端身份有效。如果身份不匹配证书,则返回值中将设置 G_TLS_CERTIFICATE_BAD_IDENTITY
。如果 identity
为 NULL
,则永远不会在返回值中设置该位。对等端身份还可以用于在数据库中检查已固定的证书(信任异常)。这些可以在主机到主机的基于设置上覆盖正常的验证过程。
目前没有 flags
,应使用 G_TLS_DATABASE_VERIFY_NONE
。
如果发现 chain
有效,则返回值将为 0。如果发现 chain
无效,则返回值将指示至少发现一个问题。如果函数无法确定 chain
是否有效(例如,如果 cancellable
在其完成前被触发),则返回值将为 G_TLS_CERTIFICATE_GENERIC_ERROR
,并根据情况设置 error
。当 chain
成功分析但被发现无效时,不会设置 error
。
GLib 保证如果证书验证失败,返回值中将至少设置一个错误,但它不保证将设置所有可能错误。因此,您不能安全地决定忽略任何特定类型的错误。例如,如果您想允许过期的证书,那么掩码 G_TLS_CERTIFICATE_EXPIRED
是不正确的,因为这可能是在证书存在其他问题时唯一设置的错误标志。
在GLib 2.48之前,GLib的默认TLS后端会修改链
来表示通过GTlsDatabase
在证书验证过程中构建的认证路径,通过调整链
中每张证书的GTlsCertificate:issuer
属性。自GLib 2.48以来,这种情况不再发生,因此您不能依赖GTlsCertificate:issuer
来表示证书验证过程中实际使用的认证路径。
由于没有使用TLS会话上下文,GTlsDatabase
可能对证书进行的检查不如GTlsConnection
那么多。例如,可能不会尊重证书约束,也可能不会执行撤销检查。验证用于TLS连接的TLS证书的最佳方法是让GTlsConnection
处理验证。
TLS后端可能尝试检索和将缺失的证书添加到链中。这可能涉及发出HTTP请求来下载缺失的证书。
此函数可能会阻塞。请使用g_tls_database_verify_chain_async()
在异步方式下执行验证操作。
自2.30起可用。
参数
链
-
类型:
GTlsCertificate
一个
GTlsCertificate
链。这些数据由方法调用者拥有。 目的
-
类型:
const gchar*
此证书链将要使用的目的。
这些数据由方法调用者拥有。 值是一个null终止的UTF-8字符串。 身份
-
预期的对等身份。
参数可以 NULL
。这些数据由方法调用者拥有。 交互
-
类型:
GTlsInteraction
用于必要时与用户交互。
参数可以 NULL
。这些数据由方法调用者拥有。 标志
-
额外的验证标志。
cancellable
-
类型:
GCancellable
一个
GCancellable
,或NULL
。参数可以 NULL
。这些数据由方法调用者拥有。 错误
-
类型:
GError **
恢复性错误的返回位置。
参数可以 NULL
。如果返回位置不是 NULL
,那么您必须初始化它为NULL
GError*
。如果没有错误,虚拟函数将通过将参数初始化为 NULL
来保留参数初始化。错误情况下,参数将设置为一个新分配的 GError
;调用者将承担数据的所有权,并负责释放它。