如何获取服务器的 CA 证书?

前言

HTTPS 通俗地来讲, 是在 HTTP 协议的基础上, 加入了 SSL 层来保证上层通信的安全. 它的主要作用可以分为两种: 其一, 单纯地建立信息安全通道, 来保证数据传输的安全; 其二, 通过证书校验的方式来验证网站的真实性. 其中, 在证书校验中包含单向认证和双向认证. 以单向认证为例, 客户端如何获取 CA 证书来校验服务器端的合法性?

本文档根据 CA 证书的来源, 分来两种场景进行了详细介绍.

场景描述1

将最新固件上传到 HTTPS 的云服务器上(本文档以 Amazon S3为例), ESP32 从当前固件 OTA (Over The Air Updates) 服务器上的最新固件.

基础知识 :

关于 OTA 的 demo, 详见 https://github.com/espressif/esp-idf/tree/master/examples/system/ota, 本文基于 simple_ota_example. OTA 的功能主要通过 API esp_https_ota 完成, API 用法如下.

esp_http_client_config_t config = {
        .url = CONFIG_FIRMWARE_UPGRADE_URL,
        .cert_pem = (char *)server_cert_pem_start,
        .event_handler = _http_event_handler,
    };
    esp_err_t ret = esp_https_ota(&config);

esp_https_ota 内部实现中, CA 证书也为必选项, 关于证书处理的部分源码如下. 则对于 HTTPS 证书校验获取资源, CA 证书的获取成为关键.

esp_err_t esp_https_ota(const esp_http_client_config_t *config)
{
...
#if !CONFIG_OTA_ALLOW_HTTP
    if (!config->cert_pem && !config->use_global_ca_store) {
        ESP_LOGE(TAG, "Server certificate not found, either through configuration or global CA store");
        return ESP_ERR_INVALID_ARG;
    }
#endif
...
}

基本步骤如下:

1.上传固件到 HTTPS 服务器

上传最新固件 hello-world.bin 到 Amazon S3, 如下图. 单击该条目, 弹出关于 hello-world.bin 的一些信息, 其中, 对象 URL: https://xxxxxxxxxxxx.s3.ap-east-1.amazonaws.com/hello-world.bin 为 ESP32 获取固件的资源链接.

!](https://img-blog.csdnimg.cn/20200513164351653.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTM1NTAwMDA=,size_16,color_FFFFFF,t_70)在这里插入图片描述

2.获取该服务器的 CA 证书

这一小节着重介绍获取 CA 证书的方式.

  • 方式一: 使用 openssl 命令查看当前服务器的 CA 证书
openssl s_client -showcerts -connect url:port

根据本文中的服务器,只需执行如下命令:

openssl s_client -showcerts -connect xxxxxxxxxx.s3.ap-east-1.amazonaws.com:443

输出如下内容:

CONNECTED(00000005)
depth=2 C = US, O = Amazon, CN = Amazon Root CA 1
verify return:1
depth=1 C = US, O = Amazon, OU = Server CA 1B, CN = Amazon
verify return:1
depth=0 CN = *.s3.ap-east-1.amazonaws.com
verify return:1
---
Certificate chain
 0 s:CN = *.s3.ap-east-1.amazonaws.com
   i:C = US, O = Amazon, OU = Server CA 1B, CN = Amazon
-----BEGIN CERTIFICATE-----
MIIG0jCCBbqgAwIBAgIQCJp6wQZFp93Z5oh4hJN7/DANBgkqhkiG9w0BAQsFADBG
MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRUwEwYDVQQLEwxTZXJ2ZXIg
Q0EgMUIxDzANBgNVBAMTBkFtYXpvbjAeFw0xOTAzMjAwMDAwMDBaFw0yMDAzMjAx
MjAwMDBaMCcxJTAjBgNVBAMMHCouczMuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20w
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCL+Eno/VPxM88AcxAklwLi
38WCPZiTj0hPRluXqJy9fa6Xd6HbJPvGfnDCC2XfS/sGmr3sCry9DD3lIKJQeCt1
pzyuOB4KLBkXMf9Olu5eYFoZlsqr9Qwq4e0b6NUc8ydkXDeKmUpTHXh0rNfaxgoM
vIvRXe6jHeq1z8MM3rJ77HimWxTr14SWdUUZUCM4qnZc4p6JhwXTU+aijUR/pZRT
kXu5ShKko8DRDwIIbGipFym4VJu6ZNwbN4HOWQS7ARZIcVlQ4S6WM2YmFspTypv+
J9v4vgwGT1gCwkFS4fc8DCvncq0WcU7+sUJJ1pE28/f4mo9WpVT6ZUs/vlsF1ADD
AgMBAAGjggPZMIID1TAfBgNVHSMEGDAWgBRZpGYGUqB7lZI8o5QHJ5Z0W/k90DAd
BgNVHQ4EFgQUxKcJb7e+jlm1+BfkO2+SS1x9SvkwggF3BgNVHREEggFuMIIBaoIc
Ki5zMy5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbYIaczMuYXAtZWFzdC0xLmFtYXpv
bmF3cy5jb22CHCouczMtYXAtZWFzdC0xLmFtYXpvbmF3cy5jb22CGnMzLWFwLWVh
c3QtMS5hbWF6b25hd3MuY29tgiYqLnMzLmR1YWxzdGFjay5hcC1lYXN0LTEuYW1h
em9uYXdzLmNvbYIkczMuZHVhbHN0YWNrLmFwLWVhc3QtMS5hbWF6b25hd3MuY29t
giQqLnMzLWNvbnRyb2wuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb22CInMzLWNvbnRy
b2wuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb22CLiouczMtY29udHJvbC5kdWFsc3Rh
Y2suYXAtZWFzdC0xLmFtYXpvbmF3cy5jb22CLHMzLWNvbnRyb2wuZHVhbHN0YWNr
LmFwLWVhc3QtMS5hbW
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值