方法
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
。如果 identity
是 NULL
,则在返回值中永远不会设置该位。对方的身份还可以用于检查数据库中的签发证书(信任异常)。这些可以在主机级别的所有操作过程中覆盖正常的验证过程。
目前没有 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
链。数据由方法调用者拥有。 用途
-
类型:
const gchar*
此证书链将用于的目的。
数据由方法调用者拥有。 该值是一个以 NUL 结尾的 UTF-8 字符串。 标识
-
期望的对方 身份。
参数可以是 NULL
。数据由方法调用者拥有。 交互
-
必要时用于与用户交互。
参数可以是 NULL
。数据由方法调用者拥有。 标志
-
附加验证标志。
cancellable
-
类型:
GCancellable
一个
GCancellable
或NULL
。参数可以是 NULL
。数据由方法调用者拥有。 错误
-
类型:
GError **
可恢复错误 的返回位置。
参数可以是 NULL
。如果返回位置不是 NULL
,则必须将其初始化为NULL
GError*
。如果没有错误,则方法将通过将参数留为 NULL
来初始化。在出现错误的情况下,参数将被设置为新分配的 GError
;调用者将负责数据,并负责释放它。