如何使用Ionic Cordova框架和自签名证书绕过iOS 11中的SSL检查
在我的应用程序中,我需要调用一些REST API服务调用。部署REST API服务的目标开发服务器上的证书是自签名的。因此,当我运行应用程序时,出现如下错误:如何使用Ionic Cordova框架和自签名证书绕过iOS 11中的SSL检查
加载资源失败:此服务器的证书无效。您可能会连接到假装为“192.168.10.20:8080”无效的服务器......这可能会使您的机密信息处于危险之中。
由于此服务器仅用于开发/测试目的,所以我只是想忽略SSL检查...我如何实现它?我尝试以下方法: [AppDelegate.m文件],但没有成功,如下的代码是不是在iOS的11个工作...
@implementation NSURLRequest(DataController)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
return YES;
}
@end
我在我的应用程序使用离子3 &科尔多瓦7。
有趣的是,我只是研究同样的问题。看起来像在iOS 11中,事情受到更多限制。我在这里回答WKWebView。
在本质上,你需要做的:
- 地方自定义的授权码到WKWebView插件代码
- 负载资源直接从科尔多瓦(然后WKWebView事件被正确触发)
- 禁用ATS(NSAppTransportSecurity)
详细描述
你应该做的细节如下(如果你使用的是WKWebView):
你需要修改CDVWKWebViewEngine.m(插件代码)。您需要添加有:
- (void)webView:(WKWebView *)webView
didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge
*)challenge completionHandler:(void (^)
(NSURLSessionAuthChallengeDisposition
disposition, NSURLCredential *credential))completionHandler {
SecTrustRef serverTrust = challenge.protectionSpace.serverTrust;
completionHandler(NSURLSessionAuthChallengeUseCredential,
[NSURLCredential credentialForTrust:serverTrust]);
}
但是,请注意 - 当WKWebView被初始化(即通过科尔多瓦框架加载)这仅适用。
因此您还需要从API的那个URI加载您的应用程序。我认为你有本地网络(自签名证书),所以这不应该是一个问题。如果你将在本地加载应用程序(即从index.html),那么这将无法正常工作!
另外,你需要禁用ATS的iOS应用*的.plist设置文件,如:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
这是我的作品。
其他资源:
- 非常好的测试网站不同的SSL的情况(包括自签名):https://badssl.com/ 有关这个主题的
- 苹果论坛的讨论:https://forums.developer.apple.com/message/269452#269452
Disclamer:禁用证书应该避免检查,只有在你有很好的理由或其他限制的情况下才使用。你仍然有通信安全,但你没有信任。因此中间人的攻击是可能的!如果您决定使用此选项,则还应使用证书锁定来使事情更安全。
@ Peter ..你可以与我分享完整的CDVWKWebViewEngine.m文件..我已经将这个代码集成到我的程序中,但没有成功.. –
@KamleshKumar:当然我可以分享,在这里是:https:// gist .github.com/PeterStegnar/63cb8c9a39a13265c3a855e24a33ca37 –
感谢@peter我发现多了一个解决方法在ios11检查应用程序的测试目的是否API的越来越正确击中或not.You可以通过在config.xml中
添加下面的标签强行改变从WKWebView到UIWebView的web视图<preference name="CordovaWebViewEngine" value="CDVUIWebViewEngine" />
现在添加下面的Appdelegate.m代码文件
@implementation NSURLRequest(DataController)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
return YES;
}
@end
它为我工作..!
注:只针对开发/测试purpose.not推荐用于生产部署
此变通办法的问题在于您使用的是某种不赞成使用的iOS网页视图。 Apple建议使用WKWebView:https://developer.apple.com/documentation/webkit/wkwebview。这有很多原因(例如,你有一个触摸延迟,这是非常糟糕的用户体验)。问题是如果你可以为你的用户买得起? –
不幸“allowsAnyHTTPSCertificateForHost”的设备11再没有作品科尔多瓦(WKWebView)。 –