gpt4 book ai didi

使用自签名证书从 https 服务器响应 native fetch()

转载 作者:行者123 更新时间:2023-12-03 10:25:20 32 4
gpt4 key购买 nike

我正在尝试与具有自签名证书的 https 服务器进行通信。

我可以从 .NET 应用程序(使用 ServicePointManager.ServerCertificateValidationCallback 事件)、本地 iOs 应用程序(使用 allowedAnyHTTPSCertificateForHost)或 Web 浏览器(只需要声明证书受信任)来执行此操作。

但是我无法让它在 react-native 应用程序中工作(无论是在 Android 还是在 iOS 模拟器中)。

我尝试了不同的东西,但仍然没有成功。

我知道那里有一些类似的主题:
Ignore errors for self-signed SSL certs using the fetch API in a ReactNative App?
React Native XMLHttpRequest request fails if ssl (https) certificate is not valid
Fetch in react native wont work with ssl on android
Problems fetching data from a SSL based Server
Unable to make API calls using react-native

但它们要么不包含答案,要么不起作用(而且它们根本不涉及 android 编程)。搜索其他资源也没有成效。

我相信应该有一种简单的方法来使用自签名证书。我错了吗?有人知道吗(iOS 和 Android)?

最佳答案

免责声明:此解决方案应该是临时的并记录在案,以便它不会停留在软件的生产阶段,这仅用于开发。
对于 iOS,您所要做的就是打开 xcodeproject(在 RN 中的 iOS 文件夹内),然后转到 RCTNetwork.xcodeproj 并在该项目中导航到 RCTHTTPRequestHandler.m
在该文件中,您将看到如下一行:

#pragma mark - NSURLSession delegate
在该行之后,添加此功能
- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler
{
completionHandler(NSURLSessionAuthChallengeUseCredential, [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]);
}
瞧,您现在可以在没有有效证书的情况下对 API 进行不安全的调用。
这应该足够了,但是如果您仍然遇到问题,您可能需要转到项目的 info.plist,左键单击它并选择 open as... 源代码。
最后添加
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
<key>NSExceptionDomains</key>
<dict>
<key>localhost</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
<key>subdomain.example.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
所以你的文件看起来像这样
    ...
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>NSLocationWhenInUseUsageDescription</key>
<string></string>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
<key>NSExceptionDomains</key>
<dict>
<key>localhost</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
<key>subdomain.example.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
</plist>
对于真正的生产就绪解决方案, https://stackoverflow.com/a/36368360/5943130该解决方案更好

关于使用自签名证书从 https 服务器响应 native fetch(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36289125/

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