从 React 本机应用程序调用 localhost IIS 时出现“网络请求失败”

"Network request failed" when calling localhost IIS from React native app

提问人:Lazeeee 提问时间:11/10/2023 更新时间:11/10/2023 访问量:50

问:

我正在开发适用于 Android 的 React Native 应用程序(后来在 IOS 上也是如此)以及某些 REST API。我在 localhost 上运行了后端和 API,可以通过在 LAN 中使用机器的 IP(设备和服务器在同一个 LAN 中)访问。从 Postman 或其他移动应用程序调用它们时,相同的 API 正在工作。此外,如果我在我们的生产服务器上调用相同的 API,该服务器使用来自 React Native 应用程序的真实证书,它运行良好。问题仅在于运行 IIS 的 localhost 时。

但是,当我从 React Native 应用程序调用 API 时,它会抛出“网络请求失败”。我敢肯定这与证书有关。本地 IIS 具有自签名证书。如果我理解正确,还必须在Android设备上安装相同的证书。我已经这样做了,但仍然给我同样的错误。还尝试使用 mkcert 创建证书并使用该证书,但没有成功。

我在谷歌上搜索了很多关于这个问题,发现了很多讨论,并尝试了我发现的不同的东西。到目前为止没有成功。我想我只需要正确的、最新的信息来做到这一点,因为许多讨论都太老了,不再相关了。

我需要什么样的证书?IIS 自签名还是由 mkcert 创建?如果是 mkcert,当机器需要通过 IP 访问时,create 命令如何执行?

AndroidManifest 使用的文件中应该包含什么network_security_config?

Android React-Native IIS localhost 证书

评论

0赞 Jalpa Panchal 11/10/2023
使用设备可以信任的本地 CA 创建证书。其中 [IP] 是本机在局域网中的 IP 地址。在 IIS 上导入证书。在您的 Android 设备上安装 Ca 证书。在文件network_security_config.xml添加以下代码。在 under 标记中引用此文件:mkcert [IP]<network-security-config> <base-config> <trust-anchors> <certificates src="system" /> <certificates src="user" /> </trust-anchors> </base-config></network-security-config>AndroidManifest.xmlapplicationandroid:networkSecurityConfig="@xml/network_security_config"
0赞 Lazeeee 11/10/2023
谢谢,但 mkcert [IP] 创建了两个 .pem 文件,IIS 期望该文件为 .pfx。我该怎么办?
0赞 Jalpa Panchal 11/10/2023
可以使用 OpenSSL 工具将证书从 PEM 转换为 PFX。或使用此 PowerShell 命令$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 $cert.Import("path\to\cert.pem") $key = [System.IO.File]::ReadAllBytes("path\to\key.pem") $cert.PrivateKey = [System.Security.Cryptography.X509Certificates.RSACertificateExtensions]::GetRSAPrivateKey($cert) [System.IO.File]::WriteAllBytes("path\to\certificate.pfx", $cert.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, "your-password"))

答: 暂无答案