文档首页/ 对象存储服务 OBS/ SDK参考/ C/ 初始化(C SDK)/ 配置SDK验证服务端证书
更新时间:2026-07-13 GMT+08:00
分享

配置SDK验证服务端证书

开发过程中,您有任何问题可以在GitHub上提交issue,或者在华为云对象存储服务论坛中发帖求助。

OBS C SDK提供了对服务端证书验证的支持,以确保OBS服务来自于受信服务端。配置验证服务端证书的步骤如下:

如果访问的OBS服务端的根证书是由权威机构颁发的,可以忽略步骤1、2(C SDK的证书库中默认已加入了权威机构的根证书)。

  1. 获取OBS服务端的根证书并保存为文件。例如:在浏览器的地址栏单击锁图标 > 证书 > 详细信息 > 导出;或在Windows中通过 certmgr.msc 证书管理器导出。
  2. 将证书文件放置到可执行文件所在目录。使用 OBS_DEFAULT_CERTIFICATE 时,Linux 环境下证书文件名须为 client.pem,Windows 环境下须为 client.crt;使用 OBS_DEFINED_CERTIFICATE 时,可在调用 init_certificate_by_path 时通过 path 参数指定任意路径。
  3. 应用程序使用https协议通信,接口调用方法参考HTTPS服务接口使用方法

HTTPS服务接口使用方法

方式一:通过证书路径配置(init_certificate_by_path)

在 init_obs_options之前调用init_certificate_by_path实现https通信,根证书路径通过参数指定或者使用系统默认证书。

参数解释

参数名称

参数类型

是否必选

描述

protocol

obs_protocol

必选

协议参数。值为OBS_PROTOCOL_HTTPS或OBS_PROTOCOL_HTTP

ca_conf

obs_certificate_conf

可选,如果protocol为OBS_PROTOCOL_HTTPS则为必选

证书配置策略。值为OBS_NO_CERTIFICATE、OBS_DEFAULT_CERTIFICATE或OBS_DEFINED_CERTIFICATE

path

char *

可选,如果ca_conf为OBS_DEFINED_CERTIFICATE则为必选

证书路径

path_length

int

可选,如果path不为NULL则为必选

证书路径长度

代码示例

obs_options options;
obs_status ret_status;
// 示例1: HTTP通信,不验证证书
ret_status = init_certificate_by_path(OBS_PROTOCOL_HTTP, OBS_NO_CERTIFICATE, NULL, 0);
if (OBS_STATUS_OK != ret_status)
{
    printf("init_certificate_by_path failed(%s).\n", obs_get_status_name(ret_status));
    return -1;
}
init_obs_options(&options);
// 示例2: HTTPS通信,使用默认证书(lib目录下的client.pem)
ret_status = init_certificate_by_path(OBS_PROTOCOL_HTTPS, OBS_DEFAULT_CERTIFICATE, NULL, 0);
if (OBS_STATUS_OK != ret_status)
{
    printf("init_certificate_by_path failed(%s).\n", obs_get_status_name(ret_status));
    return -1;
}
init_obs_options(&options);
// 示例3: HTTPS通信,指定证书路径
const char *cert_path = "/path/to/obs.cer";
ret_status = init_certificate_by_path(OBS_PROTOCOL_HTTPS, OBS_DEFINED_CERTIFICATE, cert_path, strlen(cert_path));
if (OBS_STATUS_OK != ret_status)
{
    printf("init_certificate_by_path failed(%s).\n", obs_get_status_name(ret_status));
    return -1;
}
init_obs_options(&options);

方式二:通过证书内容配置(init_certificate_by_buffer)

在init_obs_options之前调用init_certificate_by_buffer实现https通信,直接传入证书内容。

参数解释

参数名称

参数类型

是否必选

描述

buffer

char *

必选

证书内容

buffer_length

int

必选

证书内容长度

代码示例

obs_options options;
obs_status ret_status;
// 读取证书内容到buffer(示例省略读取逻辑)
const char *ca_buffer = "...";  // 证书内容
int buffer_length = strlen(ca_buffer);
ret_status = init_certificate_by_buffer(ca_buffer, buffer_length);
if (OBS_STATUS_OK != ret_status)
{
    printf("init_certificate_by_buffer failed(%s).\n", obs_get_status_name(ret_status));
    return -1;
}
init_obs_options(&options);

相关文档