相关疑难解决方法(0)

如何在Android中为HttpsUrlConnection禁用SSLv3?

我们在android中编写了客户端应用程序,它使用HttpsUrlConnection apis与https服务器连接.由于Poodle漏洞,我们需要在调用任何请求时从启用的协议列表中禁用SSLv3.

我们遵循oracle捕获的指南,如http://www.oracle.com/technetwork/java/javase/documentation/cve-2014-3566-2342133.html

并在调用url连接之前添加了以下行

java.lang.System.setProperty("https.protocols", "TLSv1");
Run Code Online (Sandbox Code Playgroud)

这个解决方案适用于普通的java程序.尝试连接仅适用于SSLv3协议的服务器时,我们收到了SSLHandShakeException.

但值得关注的是:同样的修复不适用于Android.我错过了什么或者我应该为Android尝试另一种方法吗?请建议.

java client android httpsurlconnection poodle-attack

17
推荐指数
4
解决办法
3万
查看次数

Android pre-lollipop设备发出错误"SSL握手中止:ssl = 0x618d9c18:系统调用期间的I/O错误,同级连接重置"

我有这个奇怪的问题,其中改造不断抛弃我

"SSL握手中止:ssl = 0x618d9c18:系统调用期间的I/O错误,同级连接重置"

在kitkat,而相同的代码在棒棒糖设备中工作正常.我使用如下的OkHttpClient客户端

public OkHttpClient getUnsafeOkHttpClient() {
    try {
        final TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
            @Override
            public void checkClientTrusted(
                    java.security.cert.X509Certificate[] chain,
                    String authType) {
            }
            @Override
            public void checkServerTrusted(
                    java.security.cert.X509Certificate[] chain,
                    String authType) {
            }
            @Override
            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                return new java.security.cert.X509Certificate[0];
            }
        } };

        int cacheSize = 10 * 1024 * 1024; // 10 MB
        Cache cache = new Cache(getCacheDir(), cacheSize);
        final SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
        sslContext.init(null, trustAllCerts,
                new java.security.SecureRandom());
        final SSLSocketFactory …
Run Code Online (Sandbox Code Playgroud)

android sslhandshakeexception android-4.4-kitkat tls1.2 retrofit2

15
推荐指数
3
解决办法
1万
查看次数

有没有办法在旧设备的Picasso库中启用TLS 1.2?

我的应用程序正在使用来自HTTPS源,Solar Dynamics天文台的图像,这些图像在Android版本上加载API 21(5.0)(我认为API 20也能正常工作)或更高版本,但我无法加载这些图像Android版本的图像从API 16(我为我的应用程序设置的最小API)到API 19.这是加载图像的代码,它非常基本 -

Picasso.with(this)
                .load("https://sdo.gsfc.nasa.gov/assets/img/latest/latest_2048_HMIIC.jpg")
                .placeholder(R.drawable.placeholdernew)
                .error(R.drawable.errornew)
                .into(mImageView, new com.squareup.picasso.Callback() {
                    @Override
                    public void onSuccess() {
                        mAttacher = new PhotoViewAttacher(mImageView); //this adds the zoom function after the picture is loaded successfully, so the user couldn't zoom the placeholder or error picture :)
                    }

                    @Override
                    public void onError() {
                        Log.d("Pic Error", "Loading Error");
                    }
                });
Run Code Online (Sandbox Code Playgroud)

如您所见,我的代码中没有错误(我认为:P).我使用SSLLabs站点检查了SDO站点,并且该站点表示此SDO服务器不接受早于API 20的Android设备上的TLS握手.有没有办法在较旧的Android版本的Picasso中启用TLS 1.2?帮助将不胜感激!提前致谢 :)

android picasso tls1.2

6
推荐指数
1
解决办法
1460
查看次数

如何让Trust锚点在Android API级别16-19上正常工作

我正在开发一个必须支持API级别16的项目,并要求我对动态URL进行网络调用.我遇到的问题是服务器最近不得不将TLS更新为1.2以实现PCI合规性,默认情况下在Android API 16-19上禁用.虽然启用此功能并不困难,但我遇到了仅针对这些API级别的X509证书问题.

我对它做了很多研究,虽然所有这些链接都很有用:

1)如何在Android应用程序中启用TLS 1.2支持(在Android 4.1 JB上运行)

2)如何使用自签名证书连接到Android(paho客户端)中的Mqtt服务器?

3)java中的SSLSocketFactory

4)允许Java使用不受信任的证书进行SSL/HTTPS连接

5)未找到Android SSL连接的信任锚

6)SSLHandshakeException:未找到证书路径的信任锚.仅适用于Android API <19

7)通过HTTPS使用HttpClient信任所有证书

他们没有解决我遇到的核心问题,即我看到了这个例外:

 com.android.volley.NoConnectionError: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
     at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:151)
     at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112)
 Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
     at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:409)
     at com.android.okhttp.Connection.upgradeToTls(Connection.java:146)
     at com.android.okhttp.Connection.connect(Connection.java:107)
     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:294)
     at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255)
     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206)
     at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345)
     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296)
     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:503)
     at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:136)
     at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:110)
     at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:96)
    ... 1 more
Run Code Online (Sandbox Code Playgroud)

当我尝试连接到需要TLS1.2的URL时,例如https://www.ssllabs.com/ssltest/viewMyClient.html. …

java ssl android x509certificate sslhandshakeexception

5
推荐指数
0
解决办法
616
查看次数

如何为 Exoplayer 启用/支持 TLS 1.1,1.2?

错误:SSL 握手中止:ssl=0x676a5680:SSL 库失败,通常是协议错误

根据此Android 文档,API 16+ 支持TLS 1.11.2 ,但在 API 20+ 之前默认不启用。我找到了一些解决方案(此处此处此处此处),用于启用 OkHttp 的 TLS 1.1 和 1.2 支持。如何启用 Exoplayer 的 TLS 1.1/1.2 支持?我发现的关于 Exoplayer TLS 1.1/1.2 支持的唯一帖子来自此 github问题,该问题建议改为在此处提出问题。

“07-27 13:21:09.817 8925-9065/com.ftsgps.monarch E/ExoPlayerImplInternal:源错误。com.google.android.exoplayer2.upstream.HttpDataSource$HttpDataSourceException:无法连接到https://liveStream/LIVE -0089000D05/manifest.mpd 在 com.google.android.exoplayer2.upstream.DefaultHttpDataSource.open(DefaultHttpDataSource.java:194) 在 com.google.android.exoplayer2.upstream.DefaultDataSource.open(DefaultDataSource.java:147) 在 com .google.android.exoplayer2.upstream.DataSourceInputStream.checkOpened(DataSourceInputStream.java:102) 在 com.google.android.exoplayer2.upstream.DataSourceInputStream.open(DataSourceInputStream.java:65) 在 com.google.android.exoplayer2.upstream .ParsingLoadable.load(ParsingLoadable.java:129) 在 com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:308) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) )在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 在 java.lang.Thread.run(Thread.java:841) 引起:javax.net.ssl.SSLHandshakeException:javax.net。 ssl.SSLProtocolException:SSL握手中止:ssl=0x722c3af8:SSL库失败,通常是协议错误错误:14077410:SSL例程:SSL23_GET_SERVER_HELLO:sslv3警报握手失败(外部/openssl/ssl/s23_clnt.c:744 0x689d8f10:0x00000 000) ”

这种情况仅发生在 API 21 …

android exoplayer tls1.2

1
推荐指数
1
解决办法
2867
查看次数