android - javax.net.ssl.SSLHandshakeException : No enabled protocols

标签 android ssl https angular2-nativescript

当我从我的 nativscript 应用程序调用 http post 到我的节点服务器时,我遇到了这个问题。我无法弄清楚此错误消息的含义。我正在我的 Android KitKat 设备 (API 19) 上运行该应用程序。

System.err: javax.net.ssl.SSLHandshakeException: No enabled protocols; SSLv3 is no longer supported and was filtered from the list
System.err:     at com.google.android.gms.org.conscrypt.SslWrapper.initialize(:com.google.android.gms@12521003@12.5.21 (000306-189987672):7)
System.err:     at com.google.android.gms.org.conscrypt.ConscryptFileDescriptorSocket.startHandshake(:com.google.android.gms@12521003@12.5.21 (000306-189987672):6)
System.err:     at com.google.android.gms.org.conscrypt.KitKatPlatformOpenSSLSocketImplAdapter.startHandshake(:com.google.android.gms@12521003@12.5.21 (000306-189987672))
System.err:     at com.android.okhttp.Connection.upgradeToTls(Connection.java:146)
System.err:     at com.android.okhttp.Connection.connect(Connection.java:107)
System.err:     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:294)
System.err:     at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255)
System.err:     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206)
System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345)
System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:89)
System.err:     at com.android.okhttp.internal.http.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:161)
System.err:     at org.nativescript.widgets.Async$Http$HttpRequestTask.doInBackground(Async.java:543)
System.err:     at org.nativescript.widgets.Async$Http$1.run(Async.java:482)
System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
System.err:     at org.nativescript.widgets.Async$PriorityThreadFactory$1.run(Async.java:52)
System.err:     at java.lang.Thread.run(Thread.java:841)

到目前为止,这是我在 main.ts 中尝试的内容:(Edit2)

import { platformNativeScriptDynamic } from "nativescript-angular/platform";

import { AppModule } from "./app.module";

import { android as androidApp, AndroidApplication, AndroidActivityBundleEventData } from "application";
import { ad } from "utils/utils";

declare let com: any;

if (androidApp) {
    const context = ad.getApplicationContext();

    androidApp.on(AndroidApplication.activityCreatedEvent, function (args: AndroidActivityBundleEventData) {
        let builder = new android.os.StrictMode.VmPolicy.Builder();
        android.os.StrictMode.setVmPolicy(builder.build());                

        // Needed for corner cases with HTTP request using TSL on Android API19
        com.google.android.gms.security.ProviderInstaller.installIfNeededAsync(
            context,
            new com.google.android.gms.security.ProviderInstaller.ProviderInstallListener({
                onProviderInstalled: () => {
                    console.log("Provider Installed!");
                    const sslContext = javax.net.ssl.SSLContext.getInstance("TLSv1.2");
                    sslContext.init(null, null, null);
                    const engine = sslContext.createSSLEngine();
                },
                onProviderInstallFailed: (errorCode, intent) => {
                    console.log("Error: " + errorCode);
                }
            }));
    });
}

最佳答案

该错误表明您需要启用 SSLv3 协议(protocol)进行通信。

转到您的 jdk/jre/lib/security/java.security 并从 jdk.tls.disabledAlgorithms 此列表中删除 SSLv3 协议(protocol)。

然后重启应用!!!

关于android - javax.net.ssl.SSLHandshakeException : No enabled protocols,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49839353/

相关文章:

ssl - 更改 AutoSSL 后服务器上的网站重定向到 defaultwebpage.cgi

ssl - 使用 wireshark 捕获 google plus https 流量?

android - 如何设置应用程序 :layout_scrollFlags for Toolbar programmatically

android - 使用 IntelliJ IDEA 时是否有任何简单的方法来混淆 Android 应用程序?

ssl - LittleProxy 和公司证书

javascript - (由于 Chrome 53 问题)Yahoo weather api 得到了一个不安全的证书,导致 jquery ajax 请求失败

java - 当我从抽象父类(super class) Activity 调用子类的方法时,发生了什么?

Android Hilt - 两个 fragment 之间的共享 ViewModel

tomcat - 尝试使用 HTTP 访问 Tomcat 6 HTTPS 连接器时出现意外结果

asp.net - 如何使网站仅使用 https