让我们加密证书以使用android api< 20

时间:2018-02-22 14:11:03

标签: android ssl react-native websocket lets-encrypt

我有一个使用Let的加密CA的节点服务器,它托管在zeit.now上。 客户端使用react-native开发。 我尝试使用websockets连接到它。

在iOS和更新的Android版本(API> 20)上,它成功连接。

在较旧的Android版本(在模拟器和实际设备上)上运行时,它永远不会连接。

我尝试使用较旧的Android版本连接到不使用Let的加密CA的服务器(但是使用来自其他提供商的ssl - 托管在heroku上),并且它也成功连接。 / p>

所以我相信旧的Android版本和让我们加密证书有问题。

有人可以帮忙吗?我已经失去了5天研究这个问题,而且我对JAVA了解不多。

编辑: 我尝试使用websocket连接

    ws.onerror = (e) => {
      // an error occurred
      console.log(e.message);
    };

此日志:

Connection closed by peer

和这个方法:

    ws.onclose = (e) => {
      // connection closed
      console.log(e.code, e.reason);
    };

日志:

undefined, undefined

2 个答案:

答案 0 :(得分:0)

我修好了!见comment。 基本上我需要安装与Google Play服务捆绑在一起的最新安全修复程序

答案 1 :(得分:0)

我通过向Gradle添加以下依赖项来解决此问题:

implementation 'com.google.android.gms:play-services-safetynet:17.0.0'

然后致电

public void onCreate() {
    super.onCreate();
    try {
          ProviderInstaller.installIfNeeded(this);
    } catch (GooglePlayServicesRepairableException e) {
        // Don't forget exception handling!
    } catch (GooglePlayServicesNotAvailableException e) {
        // Do something clever  
    }
    SoLoader.init(this, /* native exopackage */ false);
    initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
}