gpt4 book ai didi

当我使用 TIdHTTP 进行 HTTPS 调用时,Android 6.0 应用程序崩溃

转载 作者:行者123 更新时间:2023-11-29 14:26:26 25 4
gpt4 key购买 nike

我使用 Delphi XE8 和 Indy 10 进行 Android 应用程序开发。我已将 TIdHTTP 组件用于 HTTP/S 服务调用。

它在 Android 5 及更早版本中运行良好,但在 Android 6.0 中却不起作用(当我尝试访问 HTTPS 协议(protocol)时)。

我尝试使用 TIdSSLIOHandlerSocketOpenSSL,但当我调用任何服务方法(如 PUT、POST、GET)时应用程序仍然崩溃。

请帮我解决这个问题。

最佳答案

Indy 对 SSL/TLS 的原生支持在 Android 6+ 上被破坏(好吧,不完整),因为谷歌在 Android 6 中放弃了对 OpenSSL 的支持,转而使用他们自己的内部修改后的分支,名为 BoringSSL:

Android 6.0 Changes - BoringSSL

Android is moving away from OpenSSL to the BoringSSL library. If you’re using the Android NDK in your app [which Delphi Android apps do], don't link against cryptographic libraries that are not a part of the NDK API, such as libcrypto.so and libssl.so. These libraries are not public APIs, and may change or break without notice across releases and devices. In addition, you may expose yourself to security vulnerabilities. Instead, modify your native code to call the Java cryptography APIs via JNI or to statically link against a cryptography library of your choice.

TIdSSLIOHandlerSocketOpenSSL 不适用于 BoringSSL,此时 Indy 没有用于 BoringSSL 的另一个 SSLIOHandler 类。这是一个尚未解决的开放问题:

#166 Support BoringSSL on Android 6

在解决该问题之前(并且没有 ETA),您将必须:

  1. 在您的 Android 应用程序中为 Android 部署 OpenSSL 二进制文件(可从 https://indy.fulgan.com/SSL/ 获得),并指示 Indy 在运行时从何处加载它们。但根据设备和系统配置,这可能有效也可能无效。人们在这个问题上的结果好坏参半。

  2. 编写您自己的 TIdSSLIOHandlerSocketBase 派生类,使用 Java 套接字 API 而不是 C 库 BSD 套接字和 OpenSSL。

关于当我使用 TIdHTTP 进行 HTTPS 调用时,Android 6.0 应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45481722/

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