在受限设备 (pico) 上使用 (尝试/学习) WolfSSL - 需要 TLS 客户端。我希望将构建保持尽可能小。
尝试加载受信任的 CA
const char *cacerts = AWS_ROOT_CA1_SIGNED;
if ((ret = wolfSSL_CTX_load_verify_buffer(pCtx, (const unsigned char *)cacerts,
strlen(cacerts), SSL_FILETYPE_PEM)) != WOLFSSL_SUCCESS) {
displayWatermark();
printf("ERROR: failed to load CA cert. %d\n", ret);
for(;;);
}
wolfSSL_CTX_set_verify(pCtx, SSL_VERIFY_PEER, verifyCert);
但是根证书无法被识别:/ 我仍然认为我哪里做错了(我注意到根证书可能对某些服务进行了交叉签名)
在验证回调中,预验证 0,错误 = -188,ASN 无签名者错误确认失败验证错误深度 2,域 Amazon Root CA 1
我的想法是使用验证回调根据证书的序列号或指纹来验证证书。它应该比在代码中内置 CA 证书或中介机构列表要小得多。
在 WOLFSSL_X509_STORE_CTX 对象中有一个certs
包含整个链的缓冲区数组。根据示例,store->cert 缓冲区以 DER 格式保存服务器证书链。
我发现如果我定义OPENSSL_EXTRA_X509_SMALL
,回调存储将包含current_cert
属性(仅包含根证书),但如果可能的话,我希望保持构建不产生额外负载。然后我不确定我是否需要验证所有链(主机名、有效期等)。
问题:
有没有办法从 DER 缓冲区获取属性(签名、名称、发行者的序列号……)?我看到了用于解析 X509 证书的选项,但是……是否有可用于解析 DER 格式的函数?
我是 wolfSSL 团队的成员。
以下是一段代码。
解码后的证书结构声明可以在以下位置找到:
wolfssl/wolfcrypt/asn.h