标签: trustmanager

针对不安全的TrustManager的Google Play安全警报

在我的一个应用程序中,我使用带有自签名证书的HTTPS,并按照Android开发人员培训网站(https://developer.android.com/training/articles/security-ssl.html#UnknownCa)中的示例代码进行操作.

我最近得到了以下警报,说当前的实施不安全:

安全警报

您的应用程序正在使用与Apache HTTP客户端的X509TrustManager接口的不安全实现,从而导致安全漏洞.有关详细信息,请参阅此Google帮助中心文章,其中包括修复漏洞的截止日期.

有人可以提供更多详细信息,除了上面链接的示例代码之外应该更新什么?

我应该实现自定义TrustManager吗?如果是这样,它应该验证什么?

security ssl android android-security trustmanager

22
推荐指数
2
解决办法
9271
查看次数

如何在Android应用中修复X509TrustManager的不安全实现

谷歌已经建议我在我的Android应用程序中有一个不安全的接口X509TrustManager实现,需要更改我的代码如下:

要正确处理SSL证书验证,请在自定义X509TrustManager接口的checkServerTrusted方法中更改代码,以便在服务器提供的证书不符合您的期望时引发CertificateException或IllegalArgumentException.对于技术问题,您可以发布到Stack Overflow并使用标签"android-security"和"TrustManager".

如何修改以下代码以解决上述问题?

public EasySSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
    super(truststore);

    TrustManager tm = new X509TrustManager()  {
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }

        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }

        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }
    };

    mContext.init(null, new TrustManager[] { tm }, null);
}
Run Code Online (Sandbox Code Playgroud)

android-security trustmanager

20
推荐指数
1
解决办法
2万
查看次数

如何使用由未知CA自签名的证书使Android Volley执行HTTPS请求?

在提出问题之前,我找到了一些链接,我逐一检查了这些链接,但没有一个链接给我一个解决方案:

我到目前为止唯一找到的链接是这一个,它提供了两种方法:使用Android Volley发出HTTPS请求

  • 1º指示将某些类导入到您的应用程序中,确实存在必须导入的另一个类,并且这些类使用来自"apache.org"的弃用库
  • 2ºNUKE所有SSL ceriticates的一个例子(非常糟糕的主意......)


我也找到了这个博客,其中有很多解释,但最后,我意识到这些例子都使用了来自"apache.org"的弃用库,而博客本身也没有Android Volley的内容. https://nelenkov.blogspot.mx/2011/12/using-custom-certificate-trust-store-on.html


还有来自Android的链接和"未知证书颁发机构"部分的代码,它给出了解决方案的一个好主意,但代码本身在其结构中缺少一些东西(Android Studio抱怨...):https:// developer.android.com/training/articles/security-ssl.html

但是这个链接的引用似乎是解决问题的核心概念.

"TrustManager是系统用于验证来自服务器的证书的方法,并且通过从具有一个或多个CA的KeyStore创建一个证书 - 那些将是该TrustManager信任的唯一CA.给定新的TrustManager,该示例初始化一个新的SSLContext它提供了一个SSLSocketFactory,您可以使用它来覆盖HttpsURLConnection的默认SSLSocketFactory.这样连接将使用您的CA进行证书验证."



现在,这是我的问题:我有一个使用自签名证书的网络服务器,我根据其证书创建了一个"BKS信任库".我已将de BKS信任库导入我的Android APP,现在,我的应用程序上有以下代码(我刚刚在这里发布了MainActivity,这是迄今为止唯一与此主题相关的类,我想):

package com.domain.myapp;


import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;

import android.widget.EditText;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.HurlStack;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import java.io.InputStream;
import java.security.KeyStore;
import java.util.HashMap;
import java.util.Map;

import javax.net.ssl.SSLContext; …
Run Code Online (Sandbox Code Playgroud)

ssl https android android-volley trustmanager

14
推荐指数
2
解决办法
1万
查看次数

您正在使用X509TrustManager的不安全实现

我在Google Play上有一个应用程序,今天我收到了Google的一封邮件说:

Google Play警告:您正在使用X509TrustManager的不安全实施

它说明了SSL证书问题以及解决问题的方法.

因为好奇,我问这个问题,

  1. 实际上这个警告到底是什么?
  2. 我没有在我的应用程序中使用任何与网络相关的活动(这是一个本地数据库驱动的应用程序),为什么我的应用程序出现了这个警告?

更多细节:

我的应用程序是使用Appcelerator Titanium构建的,google说这个实现是在ti.modules.titanium.network.NonValidatingTrustManager;.我确信我的代码中从未使用过这样的类.

android appcelerator android-security appcelerator-titanium trustmanager

12
推荐指数
2
解决办法
5280
查看次数

java.security.cert.CertPathValidatorException:未找到证书路径的信任锚。在 api 上少于 24

com.android.volley.NoConnectionError: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
Run Code Online (Sandbox Code Playgroud)

我在 19 到 24 的 api 上的 logcat 中收到此错误,并且我的应用程序中没有从服务器加载数据我搜索了该错误并找到了解决方案

 @SuppressLint("TrulyRandom")
public static void handleSSLHandshake() {
    try {
        TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
            public X509Certificate[] getAcceptedIssuers() {
                return new X509Certificate[0];
            }

            @Override
            public void checkClientTrusted(X509Certificate[] certs, String authType) {
            }

            @Override
            public void checkServerTrusted(X509Certificate[] certs, String authType) {
            }
        }};

        SSLContext sc = SSLContext.getInstance("SSL");
        sc.init(null, trustAllCerts, new SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
        HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
            @Override
            public boolean verify(String arg0, SSLSession …
Run Code Online (Sandbox Code Playgroud)

android android-volley android-security trustmanager x509trustmanager

8
推荐指数
0
解决办法
3240
查看次数

谷歌界面X509TrustManager的不安全实现

我在谷歌播放应用程序,我收到了谷歌的一封邮件说:

您在此电子邮件末尾列出的应用使用了界面X509TrustManager的不安全实现.具体而言,在与远程主机建立HTTPS连接时,实现会忽略所有SSL证书验证错误,从而使您的应用容易受到中间人攻击.

要正确处理SSL证书验证,请在自定义X509TrustManager接口的checkServerTrusted方法中更改代码,以便在服务器提供的证书不符合您的期望时引发CertificateException或IllegalArgumentException.

我的应用使用"https",我checkServerTrusted()的内容如下:

 TrustManager tm = new X509TrustManager() {
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }

        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {

        }

        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }
    };
Run Code Online (Sandbox Code Playgroud)

然后我修改这个功能:

 TrustManager tm = new X509TrustManager() {
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }

        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            if (chain == null) {
                throw new IllegalArgumentException("checkServerTrusted: X509Certificate array is null");
            }

            if …
Run Code Online (Sandbox Code Playgroud)

java android sslsocketfactory android-security trustmanager

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

接口X509TrustManager的不安全实施 - Google Play服务

首先,我应该说,我主要是一名PHP开发人员.我在Google Play上有一个相对老旧的应用程序,该应用程序是在2012年底针对API 15构建的.

在此处查看了其他与Google Play界面X509TrustManager警报的不安全实施相关的问题,但似乎没有一个适用于我.我不是通过SSL提出请求,也不是在Google Play服务之外使用任何外部库.

警报说问题是apache.http.具体来说它说:

您的应用程序正在使用与Apache HTTP客户端的X509TrustManager接口的不安全实现,从而导致安全漏洞.有关详细信息,请参阅此Google帮助中心文章,其中包括修复漏洞的截止日期.

由于我没有使用SSL连接,我不知道如何继续.事实上我没有使用SSL来解决Google遇到的问题吗?我与服务器交换的数据实际上不能被视为敏感 - 丢失并找到宠物列表.

该应用程序所涉及的网站是自愿的,自筹资金的,并且在共享主机上,因此添加SSL是我不希望在此时被强制使用的内容.实施SSL是我唯一的前进方向吗?

android android-security trustmanager

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

使用 OkHttp 进行真实 HTTP 请求的 Robolectric 测试抛出 java.lang.NullPointerException: 未为 PKCS#12 KeyStore 提供密码

我正在使用Robolectric 4.3.1( testImplementation "org.robolectric:robolectric:4.3.1") 为我的集成测试创建一个 Android sqlite 环境。我的系统使用OkHttp( implementation 'com.squareup.okhttp3:okhttp:3.14.7') 来处理真实的 HTTP 请求。我不使用MockWebServer.

升级到 Android 10 SDK 后,我必须根据 Robolectric 说明将单元测试 JVM 更新到 JDK 9 :

在 Android API 29 上运行测试现在严格要求 Java9 运行时或更新版本。如果您在通过 Android Studio 在 API 29 上运行测试时看到有关不受支持的 Java 版本的错误;您可以使用“运行配置”对话框中的“JRE”字段来配置更新的 Java 运行时。有关更多背景信息,请参阅https://developer.android.com/studio/run/rundebugconfig

但是,现在我的集成测试失败了:

java.lang.NullPointerException: No password supplied for PKCS#12 KeyStore.

    at org.bouncycastle.jcajce.provider.keystore.pkcs12.PKCS12KeyStoreSpi.engineLoad(Unknown Source)
    at java.base/java.security.KeyStore.load(KeyStore.java:1479)
    at java.base/sun.security.ssl.TrustStoreManager$TrustAnchorManager.loadKeyStore(TrustStoreManager.java:367)
    at java.base/sun.security.ssl.TrustStoreManager$TrustAnchorManager.getTrustedCerts(TrustStoreManager.java:315)
    at java.base/sun.security.ssl.TrustStoreManager.getTrustedCerts(TrustStoreManager.java:59)
    at java.base/sun.security.ssl.TrustManagerFactoryImpl.engineInit(TrustManagerFactoryImpl.java:51)
    at java.base/javax.net.ssl.TrustManagerFactory.init(TrustManagerFactory.java:278)
    at okhttp3.internal.Util.platformTrustManager(Util.java:640)
    at …
Run Code Online (Sandbox Code Playgroud)

android jsse robolectric okhttp trustmanager

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

无法使用 OKHTTP3 在 IBM JRE8 上提取信任管理器

任何人都可以帮忙解决这个问题吗?

我还使用OKHTTP3 版本 4.8.1编写HTTP2 客户端。它可以在 Oracle JDK 8 上运行,但不能在 IBM JRE 8 上运行。

错误消息:java.lang.IllegalStateException:无法在 okhttp3.internal.Platform@e85a0ce8 上提取信任管理器,sslSocketFactory 是类 com.ibm.jsse2.SSLSocketFactoryImpl。

谢谢

okhttp trustmanager ibm-jre x509trustmanager

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