J'essaie de trouver un moyen approprié de gérer les erreurs de certificat SSL dans l'Android Webview. Mon objectif est de fournir un moyen de charger des pages avec des erreurs de certificat SSL, mais laissez l'utilisateur choisir de charger la page après l'avoir averti de la sécurité chaque fois qu'il essaie de charger une URL avec des erreurs de certificat.Gestion des erreurs de certificat dans Android Webview
Les plus proches solutions que j'ai trouvé dans les discussions suggèrent redéfinissant la WebViewClient comme suit:
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError(final WebView view, final SslErrorHandler handler, final SslError error) {
handler.proceed();
}
});
Cependant cette opération désactive essentiellement SSL dans le WebView sans le consentement de l'utilisateur.
Pour référence ici sont les fils où je trouve cette solution:
Android WebView SSL 'Security Warning'
Does the Web View on Android support SSL?
Android WebView not loading an HTTPS URL
android webview with client certificate
Web view shows blank/white page after loading URL when using WIFI in Android
Unable to load a specific webpage on Android webview
WebView displays a blank view for certain links
Android WebView blocks redirect from https to http
Ignore ssl certificate requests in webview
Je suis allé de l'avant et mis en œuvre une version légèrement différente qui invite l'utilisateur:
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError(final WebView view, final SslErrorHandler handler, final SslError error) {
//Showing a first confirmation dialog
AndroidUtils.showYesNoDialog(
//First confirmation message
"WARNING - THIS PAGE IS NOT SECURE! Are you sure you want to continue loading it?",
//First confirmation "YES" option runnable
new Runnable() {
@Override
public void run() {
//Showing a second confirmation dialog
AndroidUtils.showYesNoDialogWithResId(
//Second confirmation message
"You chose to load an unsecure page, are you sure you want to do that?",
//Second confirmation "YES" option runnable
new Runnable() {
@Override
public void run() {
//Disregard the error and proceed with the bad certificate anyways
handler.proceed();
}
},
//Second confirmation "NO" option runnable
new Runnable() {
@Override
public void run() {
//Cancel loading the page with that certificate error
handler.cancel();
}
}
);
}
},
//First confirmation "NO" option runnable
new Runnable() {
@Override
public void run() {
//Cancel loading the page with that certificate error
handler.cancel();
}
});
}
});
Cette implémentation demande à l'utilisateur deux fois si h e veut charger la page, s'il dit oui deux fois, alors l'erreur est ignorée et la page se charge, sinon le chargement de la page est annulé.
La première fois une URL avec des charges d'erreur de certificat, WebViewClient.onReceivedSslError
est appelée, si l'utilisateur procède à l'erreur de certificat et SslErrorHandler.proceed()
est appelé, les temps suivant les mêmes charges d'URL, WebViewClient.onReceivedSslError
est jamais appelé à nouveau: tuer seulement l'application réinitialise ce comportement.
Je voudrais que WebViewClient.onReceivedSslError
soit appelé systématiquement lorsqu'une URL avec une erreur de certificat se charge, pas seulement la première fois. J'ai essayé d'appeler ces méthodes sans succès:
/** JAVADOC QUOTE: Clears the SSL preferences table stored in response to proceeding with SSL certificate errors.*/
webView.clearSslPreferences();
//Those other methods I tried out of despair just in case
webView.clearFormData();
webView.clearCache(true);
webView.clearHistory();
webView.clearMatches();
Quelqu'un sait comment faire l'appel WebView WebViewClient.onReceivedSslError
plus d'une fois pour la même URL, après SslErrorHandler.proceed()
a été appelé?
Vous avez des solutions?> –
Non je n'ai encore trouvé aucune solution. – androidseb
@KingofMas la nuit prend si longtemps dans votre pays? Je plaisante, pouvez-vous poster s'il vous plaît? J'ai besoin de cela ... – user2582318