Google m'a informé que l'implémentation de l'interface X509TrustManager dans mon application Android était dangereuse et que je devais modifier mon code comme suit:
Pour gérer correctement la validation du certificat SSL, modifiez votre code dans le fichier Méthode checkServerTrusted de votre interface X509TrustManager personnalisée vers déclenchez CertificateException ou IllegalArgumentException à chaque fois que le certificat présenté par le serveur ne correspond pas à votre attentes. Pour les questions techniques, vous pouvez poster sur Stack Overflow et utilisez les balises «Android-security» et «TrustManager».
Comment le code suivant peut-il être modifié pour résoudre le problème ci-dessus?
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);
}
J'ai résolu ceci en utilisant le code suivant:
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
try {
chain[0].checkValidity();
} catch (Exception e) {
throw new CertificateException("Certificate not valid or trusted.");
}
}
Si vous rencontrez cela à partir de la bibliothèque externe que vous utilisez, vérifiez si appache libraray en est la cause.
Pour moi, la bibliothèque Apache a provoqué l’erreur suivante: j’utilisais une classe obsolète - MultipartEntity . Cette classe utilise SSLContextBuilder Qui utilise TrustManagerDelegate . TrustManagerDelegate implémente X509TrustManager, ce qui provoque l'erreur "implémentation non sécurisée de TrustManager" lors du téléchargement de l'application sur Google Play Store.
La solution est la suivante: au lieu de obsolète MultipartEntity class, utilisez MultipartEntityBuilder .
Par exemple :
MultipartEntity httpMultipart = new MultipartEntity();
String contentType = httpMultipart.getContentType().getValue();
Sera remplacé par:
MultipartEntityBuilder httpMultipart = new MultipartEntityBuilder();
String contentType = httpMultipart.build().getContentType().getValue();
J'ai rencontré ce problème.Si votre code est comme ça:
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;
}
};
il acceptera tout le certificat et c’est une mauvaise idée, c’est pourquoi google vous envoie un courrier . Nous pouvons modifier l’acceptation du certificat auto-signé aussi . Je l’ai résolu, voici ma question et ma solution