方法

GioTlsDatabaseverify_chain

since: 2.30

声明 [src]

GTlsCertificateFlags
g_tls_database_verify_chain (
  GTlsDatabase* self,
  GTlsCertificate* chain,
  const gchar* purpose,
  GSocketConnectable* identity,
  GTlsInteraction* interaction,
  GTlsDatabaseVerifyFlags flags,
  GCancellable* cancellable,
  GError** error
)

描述 [src]

确定证书链的验证性,在 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

如果发现链是有效的,则返回值将为 0。如果发现链无效,则返回值将指示至少找到一个错误。如果函数无法确定链的有效性(例如,因为 cancellable 在它完成之前被触发),则返回值将为 G_TLS_CERTIFICATE_GENERIC_ERROR,并相应地设置 error。如果链成功分析但被发现无效,则不会设置 error

GLib 保证如果证书验证失败,返回值中将至少设置一个错误,但它不保证将设置所有可能的错误。因此,您不能安全地决定忽略任何特定类型的错误。例如,如果您想允许过期的证书,因此隐藏 G_TLS_CERTIFICATE_EXPIRED 是不正确的,因为这可能是即使证书存在其他问题也可能唯一的错误标志。

在 GLib 2.48 之前,GLib 的默认 TLS 后端修改了 chain 来在证书验证过程中代表由 GTlsDatabase 构建的认证路径,通过调整 chain 中每个证书的 GTlsCertificate:issuer 属性。从 GLib 2.48 开始,这不再发生,因此您不能依靠 GTlsCertificate:issuer 来表示证书验证过程中使用的实际认证路径。

由于未使用 TLS 会话上下文,GTlsDatabase 可能不会像 GTlsConnection 那样在证书上执行那么多检查。例如,可能不会遵守证书约束,也可能不会执行撤销检查。验证 TLS 连接使用的 TLS 证书的最好方法是让 GTlsConnection 处理验证。

TLS 后端可能会尝试查找并将缺失的证书添加到链中。这可能会涉及 HTTP 请求下载缺失的证书。

此函数可能会阻塞。使用 g_tls_database_verify_chain_async() 以异步方式执行验证操作。

自:2.30

参数

chain

类型:GTlsCertificate

一个 GTlsCertificate 链。

数据由方法调用者拥有。
用途

类型:const gchar*

此证书链将用于的目的。

数据由方法调用者拥有。
该值是一个以 NUL 结尾的 UTF-8 字符串。
标识

类型:GSocketConnectable

期望的对方 身份

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

类型:GTlsInteraction

必要时用于与用户交互。

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

类型:GTlsDatabaseVerifyFlags

附加验证标志。

cancellable

类型:GCancellable

一个 GCancellableNULL

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

类型:GError **

可恢复错误 的返回位置。

参数可以是 NULL
如果返回位置不是 NULL,则必须将其初始化为 NULL GError*
如果没有错误,则方法将通过将参数留为 NULL 来初始化。
在出现错误的情况下,参数将被设置为新分配的 GError;调用者将负责数据,并负责释放它。

返回值

类型:GTlsCertificateFlags

代表验证结果的适当的 GTlsCertificateFlags