我在我上傳的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");
}
_「是否有任何方法可以上傳我的版本,並且可以檢查更改是否完美並可以使用同一個應用程序。」_您可以將新版本發佈爲alpha版或beta版,並且只添加自己作爲betatester 。 – Michael
「我嘗試通過實現以下代碼來修復它並更新我的構建」 - 這是一個不安全的'X509TrustManager'的定義。請把它刪除。 「但是我仍然得到安全警報」 - 這是因爲你沒有解決問題,反而使情況變得更糟。如果你的代碼中沒有使用'X509TrustManager'(在你做這個問題之前),那麼[這個問題可能來自一個庫](https://commonsware.com/blog/2016/02/22 /about-x509trustmanager-emails.html)。 – CommonsWare
來自Google的此支持頁面:「要正確處理SSL證書驗證,請在自定義X509TrustManager接口的checkServerTrusted方法中更改代碼,以便在服務器提供的證書不符合您的期望時引發CertificateException或IllegalArgumentException。」您當前的'X509TrustManager'實現將信任它提供的任何證書。 – Michael