如何在ionic中为https请求添加Android SSL证书?

Kam*_*mar 5 phonegap-plugins cordova phonegap-build ionic-framework cordova-plugins

在ionic模拟器中,所有http和https都可以正常工作,但是在实际设备发行版中,它会停止工作。

许多人建议为发行版本添加SSL证书,但我不知道如何添加它?

我已经尝试了所有这些以发出https请求吗?

<access origin="*"/>
<access origin="*"/>
<allow-navigation href="*"/>
<allow-intent href="*" />
Run Code Online (Sandbox Code Playgroud)

还添加了白名单插件,但不起作用。

也尝试了这个但不起作用

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
Run Code Online (Sandbox Code Playgroud)

小智 -1

是的,这是所有开发人员提出的最常见问题..最后我找到了答案,就在这里..

SSL 证书足以让网站通过 HTTPS 连接,但对于混合应用程序(例如基于 ionic 构建的应用程序),SSL 本身是不够的,您需要一个花费几百美元的代码签名证书。

另一种选择是使用您可以免费创建的自签名证书,在这里您也可以通过 HTTPS 连接到 ionic Web 版本,但在编译后,apk 文件会停止连接到数据库服务器。

这里有一个技巧,您可以使用自签名认证在服务中添加 HTTPS 端口或 HTTP api 链接。

完全按照命令操作:

  • 离子服务
  • 离子构建
  • 离子构建——产品
  • cordova平台添加android

之后,停止编译并放松..现在你会发现一个名为platform的文件夹,路径如下project/platforms/android/CordovaLib/src/org/apache/cordova/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);
  }
}
Run Code Online (Sandbox Code Playgroud)

最后

  • cordova 构建 --release android

之后,常用命令 jarsiner 和 zipalign

您的 apk 应该使用您的自签名证书在 SSL 中的 HTTPS 端口中运行。

  • 嗯,这不是解决方案,而是解决方法。您只是完全禁用了证书信任的任何验证,因此实际上您将自己暴露在中间人类型的攻击之下。我想要的是一种只信任设备上的_my_自签名证书的方法,而不信任任何证书。 (5认同)