gpt4 book ai didi

android - 如何为 gSoap-OpenSSL Android 应用程序存储和加载 cacerts.pem

转载 作者:行者123 更新时间:2023-11-30 03:43:33 25 4
gpt4 key购买 nike

我正在开发一个使用 gSOAP 和 OpenSSL 的 C++ Android 应用程序。为了使 OpenSSL 能够验证服务器证书,我需要为其提供 cacerts.pem 文件的位置,否则所有 HTTPS 连接都会失败。

我的问题是:在 Android 上存储和加载 cacerts.pem 的正确方法是什么?

  • 我可以将 cacerts.pem 复制到 APK 根目录,方法是将它放在 src/resourcesres/raw/assets/。但是 SSL_CTX_load_verify_locations(ctx, "cacerts.pem", nullptr) 找不到该文件。如何让 OpenSSL 能够读取 APK 中的 PEM 文件?

  • 有没有办法将 cacerts.pem 存储为字符串缓冲区,从而避免在 APK 中携带它?

我的应用需要与 Sharepoint 在线网站对话 (https://*.example.com/)

最佳答案

What is the right way to store and load cacerts.pem on Android?

必须加载验证主机证书所需的一个 CA。

可以加载构建从主机到 CA 的路径所需的中间体,但它是可选的。配置良好的服务器将发送所需的中间证书,但并非所有这些证书都配置良好。

加载cacert.pem 或等效文件。 cacert.pem 包含数百个证书,除了一个之外,所有证书都是错误的。


Do I need to copy cacerts.pem somehow into the .APK (how to do this?) and provide path to the file to SSL_CTX_load_verify_locations()?

没有。您通常需要一个证书,即证明主机证书的 CA。它可以是公共(public) CA,如 Comodo,也可以是组织内部的私有(private) CA。

您通常将其放在 res/assets/ 文件夹。另见 Difference between /res and /assets directories在 Stack Overflow 上。


Is there a way to store cacerts.pem as a string buffer and thus avoid carrying it in the .APK?

是的,但您可能必须获取该字符串,将其写入文件系统,然后将该文件用于 SSL_CTX_load_verify_locations。所以最后,最好将它放在 res/assets/ 中。


... sharepoint online sites (https://*.example.com/)

主机名验证的重要注意事项。 OpenSSL 1.0.2 及更早版本执行名称匹配。它执行其他常规检查,例如确保存在从终端实体证书(主机)到 CA 证书(信任根)的路径并且证书未过期。但它执行主机名匹配。

OpenSSL 1.1.0 确实执行主机名匹配。即将发布。

作为权宜之计,您通常会从 cURL 等库中提取丢失的代码。 cURL 执行主机名匹配,Daniel Stenberg 很乐意分享代码。如果没记错的话,我认为它位于 ssl.c 中。

另见 TLS Client在 OpenSSL wiki 上。

关于android - 如何为 gSoap-OpenSSL Android 应用程序存储和加载 cacerts.pem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36000593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com