c++ - 在每个操作系统上哪里可以找到受信任的根证书来满足 mbedtls?

标签 c++ c mbedtls certificate-store root-certificate

我正在使用 mbedtls 编写一个跨平台 websocket 客户端。现在,我需要向 mbedtls API which looks like this 提供合适的受托根证书包。 :

/* Structure to load trusted root certs into. */
mbedtls_x509_crt ca_certs;
mbedtls_x509_crt_init(&ca_certs);

/* Parse the file with root certificates. */
if (mbedtls_x509_crt_parse_file(&ca_certs, "trusted_certs.pem") != 0) {
    exit(EXIT_FAILURE);
}

/* Set the certificates as trusted for this session. */
mbedtls_ssl_conf_ca_chain(&conf, &ca_certs, NULL);

这非常简单,我只需连接所有找到的证书并将其输入到函数中即可。

  • 我知道在我的嵌入式系统(esp32)上也使用 mbedtls,已经有一个库为我提供了 系统范围的 CA 存储,因此应该没有问题。

  • 在 Linux 系统上,我知道证书 bundle 主要是 驻留在 /etc/ssl/certs 下。问题:这对每个人都是如此吗? (主要)分布?

  • 在 Windows 上,坦白说我不知道​​。似乎有一个类似证书存储的东西,但是我如何从那里获取我的证书?

  • 对于 Apple,我还不太在意<3

引用代码库也会非常有帮助!

最佳答案

查看 GnuTLS 以了解如何实现此目的的示例。具体来说,查看~\gnutls\lib\system\certs.c

中的add_system_trust()

对于 Windows,它归结为调用 CertOpenStore() 并使用 CertEnumCertificatesInStore() 和 CertEnumCRLsInStore() 循环访问证书,然后使用 CertCloseStore() 关闭存储 - 非常简单。

https://learn.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-certenumcertificatesinstore

关于c++ - 在每个操作系统上哪里可以找到受信任的根证书来满足 mbedtls?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74411279/

相关文章:

c++ - 是否可以存储迭代器?

python - Pybind11:在C++函数中返回大型数组会显着增加python中的计算时间

c - 如何在open mp的for循环中解析 "return 0 or return 1"?

python - 将带空格的 Python 十六进制输出送入已编译的 C 文件

c - 在 C 中不中断地退出 while 循环

sockets - DTLS-Server 在第二个 ClientHello 之后没有正确回答

c++ - 检查 std::string 是否只有空格的有效方法

c++ - 保证复制省略的行为是否取决于用户定义的复制构造函数的存在?

Android 客户端似乎没有发送证书(尝试相互身份验证)

c++ - mbedTLS pk 解析错误