2008-10-07 13 views
8

J'utilise le contrôle Webbrowser pour me connecter au site HTTPS avec "certificat non approuvé". mais je reçois la fenêtre pop-up comme standart « Alerte de sécurité » au sujet de certificat non approuvé:Comment désactiver la fenêtre "Alerte de sécurité" dans le contrôle Webbrowser

Security Alert window

Je dois trouver cette fenêtre par titre et l'envoyer Alt + Y appuyer sur Oui:

int iHandle = NativeWin32.FindWindow(null, "Security Alert"); 
NativeWin32.SetForegroundWindow(iHandle); 
System.Windows.Forms.SendKeys.Send("Y%"); 

mais l'utilisateur peut voir un scintillement de cette fenêtre.

Comment puis-je ignorer cette alerte?
Ou désactiver cette vérification "certificat non approuvé" dans le contrôle Webbrowser?

+0

double possible de [contrôle WebBrowser - ignorer les erreurs SSL] (http://stackoverflow.com/questions/6933254/webbrowser-control-ignore-ssl-errors) –

+0

Voir aussi: Erreurs SSL dans les contrôles WebBrowser pour les applications de console http://stackoverflow.com/questions/17698002/ignoring-web-browser-ssl-security-alerts-in-console-application/21008529 –

Répondre

4

Cela devrait le faire:

public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) 
{ 
    return true; 
} 

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate); 

De toute évidence, ce qui permet aveuglante certificats est un risque de sécurité. Faites attention.

+3

Je n'ai pas réussi à obtenir ceci fonctionne avec le contrôle WebBrowser. Ce n'est peut-être que moi, mais je suppose que cette solution n'est pas applicable car le contrôle System.Windows.Forms.WebBrowser n'envoie pas de requêtes via .NET. –

+1

@DanielBallinger Ce n'est pas seulement vous. J'ai le [même problème] (http://stackoverflow.com/q/12999735/1357272). – ih8ie8

+0

Ceci est réservé aux objets gérés. Le contrôle Webbrowser est un contrôle non géré encapsulé. C'est pourquoi cela ne fonctionne pas. – Odys

6

Ok, l'article est sur le projet de code - voir http://www.codeproject.com/KB/shell/WebBrowserControlDialogs.aspx Espérons que cela aide.

+0

HI @BimJearn, excellent travail. C'est une manière très intéressante d'intercepter tous les messages contextuels.Un mot d'avertissement cependant: puisque vous comptez sur le contenu du texte du message pour déterminer le type de popup, cela ne fonctionnera pas si votre langage Windows OS est autre que l'anglais. –

+0

C'est la seule chose que j'ai trouvé qui a fonctionné pour moi. Comme mentionné, il est spécifique à la langue, mais il semble que la classe StringConstants puisse être modifiée assez facilement pour s'adapter à d'autres langages. +1 – smitty1

1

Si le certificat ne provient pas d'une autorité de certification approuvée (le premier point de l'invite), vous pouvez installer le certificat sous les autorités de certification racines de confiance sur les ordinateurs en question.

Vous pouvez le faire sous Afficher le certificat.

D'une certaine manière, cela pourrait être une solution plus simple car elle ne nécessite aucune modification de code acceptant tous les certificats. Il nécessite toutefois que le certificat soit installé partout où l'application est utilisée.

+0

Cela ressemble à une bonne idée, mais je l'ai juste essayé et [cela n'a pas fonctionné pour moi] (http://stackoverflow.com/q/12999735/1357272) pour une raison quelconque. Des idées pourquoi? – ih8ie8

0

Quand je mets la propriété WebBrowser.ScriptErrorsSuppressed false, je ne, nous allons obtenir pas ces popups plus

+0

Ceci le cachera. Il ne cliquera pas sur OUI – Odys

+0

en êtes-vous sûr? mon code a fonctionné pendant quelques mois maintenant sans problèmes – Adil

+0

Oui il le cachera seulement ainsi la page ne chargera pas dans le cas d'OP –

1

Voici la solution: je cours sur l'événement Browser_Navigated comme le sous-jacent Le composant activeX est nul jusque là.

Ref:https://social.msdn.microsoft.com/Forums/vstudio/en-US/4f686de1-8884-4a8d-8ec5-ae4eff8ce6db/new-wpf-webbrowser-how-do-i-suppress-script-errors?forum=wpf

  private void Browser_Navigating_1(object sender, NavigatingCancelEventArgs e) 
     { 
     HideScriptErrors(Browser,true); 

     } 

    public void HideScriptErrors(WebBrowser wb, bool Hide) 
    { 

     FieldInfo fiComWebBrowser = typeof(WebBrowser).GetField("_axIWebBrowser2", BindingFlags.Instance | BindingFlags.NonPublic); 
     if (fiComWebBrowser == null) return; 
     object objComWebBrowser = fiComWebBrowser.GetValue(wb); 

     if (objComWebBrowser == null) return; 

     objComWebBrowser.GetType().InvokeMember(
     "Silent", BindingFlags.SetProperty, null, objComWebBrowser, new object[] { Hide }); 

    }