SSL安卓证书问题

时间:2017-06-22 10:18:52

标签: android

我在android中使用带有https的Socket,所以我需要保证连接安全。所以我正在使用这个证书 -

  private final TrustManager[] trustAllCerts= new TrustManager[] { new X509TrustManager() {
    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
        return new java.security.cert.X509Certificate[] {};
    }
    public void checkClientTrusted(X509Certificate[] chain,
                                   String authType) throws CertificateException {
    }
    public void checkServerTrusted(X509Certificate[] chain,
                                   String authType) throws CertificateException {
    }
} };

现在一切正常并且连接也已建立,但我不理解或者我不知道使用这种类型的证书是否安全?

我应该使用这个吗?

1 个答案:

答案 0 :(得分:0)

不,这是易受攻击Man-in-the-middle攻击!

您正在使用https,因此数据在传输时会被加密,这很好。但是没有检查对方是你期望的那个,这很糟糕。

以上自定义TrustManager不进行任何检查,并隐含地信任所有内容。在代码中,它甚至被称为trustAllCerts,您明确地执行。您需要检查证书链,看它是否来自您信任的来源。

问题是攻击者可以通过在您和您的终端之间放置代理来拦截您的https流量。拦截代理可以提供自己的证书,因此可以解密流量并随意执行任何操作。它还可以与端点建立https连接,并从中读取数据。因此,攻击者可以阅读您发送的内容,可以阅读您将收到的内容,并可以更改您发送和接收的内容。