我正在构建一个Web和混合移动应用程序。这些应用程序在分阶段环境中使用ssl自签名证书与第三方服务进行通信。桌面浏览器允许接受带有风险警告的无效证书,但在iOS应用中我收到此错误
Failed to load resource: The certificate for this server is invalid. You might be connecting to a server that is pretending to be "xxx" which could put your confidential information at risk.
我知道有风险,但是由于我的第三方提供商无法为登台服务器中的服务提供有效的ssl证书,因此我别无选择。
是否有任何配置/可能性允许iOS和android inappbrowser插件中的无效ssl证书。
非常感谢您的帮助。
iOS始终会在调试或发布模式下抱怨无效证书。为避免这种情况,您应将以下代码放在AppDelegate.m文件的末尾。
@implementation NSURLRequest(DataController) + (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host { return YES; } @end
对于Cordova用户,此文件位于
project/platforms/ios/Project/Classes/AppDelegate.m
Android(特定于Cordova)
在Android中,历史是不同的。它将允许您使用无效的证书向服务提出请求,但前提是应用是在构建模式下编译的。另一方面,当您以发布模式构建应用程序(即:将APK发送给同事或类似的人)时,Cordova Web视图即您编写的HTML + CSS + JS的运行地,不允许您提出“不安全”的请求。再次,为避免这种情况,您应该修改平台文件。在这种情况下,文件将为CordovaWebViewClient.java
您将需要修改上述字段中的方法,如下所示:
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { final String packageName = this.cordova.getActivity().getPackageName(); final PackageManager pm = this.cordova.getActivity().getPackageManager(); ApplicationInfo appInfo; try { appInfo = pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA); if ((appInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { // debug = true handler.proceed(); return; } else { // debug = false // THIS IS WHAT YOU NEED TO CHANGE: // 1. COMMENT THIS LINE // super.onReceivedSslError(view, handler, error); // 2. ADD THESE TWO LINES // ----> handler.proceed(); return; // <---- } } catch (NameNotFoundException e) { // When it doubt, lock it out! super.onReceivedSslError(view, handler, error); } }
该文件位于(Cordova v4及更低版本)中
project/platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewClient.java
在新版本的Cordova(v5和更高版本)中,文件现在位于
project/platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewClient.java
和
您不应将这些解决方案用于生产应用程序。这只是为了测试他们或与同事共享。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句