我正在使用 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/