虚拟方法

验证链协议.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。如果 identityNULL,则永远不会在返回值中设置该位。对等端身份还可以用于在数据库中检查已固定的证书(信任异常)。这些可以在主机到主机的基于设置上覆盖正常的验证过程。

目前没有 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字符串。
身份

类型: GSocketConnectable

预期的对等身份。

参数可以NULL
这些数据由方法调用者拥有。
交互

类型: GTlsInteraction

用于必要时与用户交互。

参数可以NULL
这些数据由方法调用者拥有。
标志

类型: GTlsDatabaseVerifyFlags

额外的验证标志。

cancellable

类型: GCancellable

一个GCancellable,或NULL

参数可以NULL
这些数据由方法调用者拥有。
错误

类型: GError **

恢复性错误的返回位置。

参数可以NULL
如果返回位置不是NULL,那么您必须初始化它为NULL GError*
如果没有错误,虚拟函数将通过将参数初始化为NULL来保留参数初始化。
错误情况下,参数将设置为一个新分配的GError;调用者将承担数据的所有权,并负责释放它。

返回值

类型: GTlsCertificateFlags

表示验证结果的适当的GTlsCertificateFlags