配置SDK验证服务端证书
开发过程中,您有任何问题可以在GitHub上提交issue,或者在华为云对象存储服务论坛中发帖求助。
OBS C SDK提供了对服务端证书验证的支持,以确保OBS服务来自于受信服务端。配置验证服务端证书的步骤如下:
如果访问的OBS服务端的根证书是由权威机构颁发的,可以忽略步骤1、2(C SDK的证书库中默认已加入了权威机构的根证书)。
- 获取OBS服务端的根证书并保存为文件。例如:在浏览器的地址栏单击锁图标 > 证书 > 详细信息 > 导出;或在Windows中通过 certmgr.msc 证书管理器导出。
- 将证书文件放置到可执行文件所在目录。使用 OBS_DEFAULT_CERTIFICATE 时,Linux 环境下证书文件名须为 client.pem,Windows 环境下须为 client.crt;使用 OBS_DEFINED_CERTIFICATE 时,可在调用 init_certificate_by_path 时通过 path 参数指定任意路径。
- 应用程序使用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);