2016-02-29 37 views
0

我在我上傳的Android版Google Play商店中獲取了安全警報。如何修復Android應用程序中X509TrustManager warrning的不安全實現

「您的應用程序使用X509TrustManager接口與Apache HTTP客戶端的不安全實現,導致安全漏洞。請參閱此Google幫助中心文章以獲取詳細信息,包括修復漏洞的最後期限。

我嘗試通過實施下面的代碼進行修復和更新我的構建

public class MySSLSocketFactory extends SSLSocketFactory { 
    SSLContext sslContext = SSLContext.getInstance("TLS"); 

    public MySSLSocketFactory(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; 
      } 
     }; 

     sslContext.init(null, new TrustManager[] { tm }, null); 
    } 

    @Override 
    public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException { 
     return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose); 
    } 

    @Override 
    public Socket createSocket() throws IOException { 
     return sslContext.getSocketFactory().createSocket(); 
    } 
} 

不過還是我收到安全警報。

還有一個問題,我不想一次又一次更新我的實時應用程序以刪除此安全警報。有沒有什麼辦法可以上傳我的版本,並且可以檢查修改是否完美,並可以使用同一個應用程序。

更新:我也加入checkServerTrusted以下行()

try { 
    chain[0].checkValidity(); 
} catch (CertificateExpiredException e) { 
    Logger.e(TAG, "CertificateExpiredException"); 
    throw new CertificateException("CertificateExpiredException"); 
} catch (CertificateNotYetValidException e) { 
    Logger.e(TAG, "CertificateNotYetValidException"); 
    throw new CertificateException("CertificateNotYetValidException"); 
} 
+0

_「是否有任何方法可以上傳我的版本,並且可以檢查更改是否完美並可以使用同一個應用程序。」_您可以將新版本發佈爲alpha版或beta版,並且只添加自己作爲betatester 。 – Michael

+0

「我嘗試通過實現以下代碼來修復它並更新我的構建」 - 這是一個不安全的'X509TrustManager'的定義。請把它刪除。 「但是我仍然得到安全警報」 - 這是因爲你沒有解決問題,反而使情況變得更糟。如果你的代碼中沒有使用'X509TrustManager'(在你做這個問題之前),那麼[這個問題可能來自一個庫](https://commonsware.com/blog/2016/02/22 /about-x509trustmanager-emails.html)。 – CommonsWare

+0

來自Google的此支持頁面:「要正確處理SSL證書驗證,請在自定義X509TrustManager接口的checkServerTrusted方法中更改代碼,以便在服務器提供的證書不符合您的期望時引發CertificateException或IllegalArgumentException。」您當前的'X509TrustManager'實現將信任它提供的任何證書。 – Michael

回答

0

如果你想查詢你的應用程序已經固定,你可以上傳爲定時發佈

如果您的新版本沒有解決上述錯誤,您會收到通知。

+0

我無法找到定時發佈的選項。但是現在我將這個應用程序發佈到Google羣組可能會有所幫助。 – PKTomar

相關問題