2008-10-07 6 views
8

웹 브라우저 컨트롤을 사용하여 "신뢰할 수없는 인증서"로 HTTPS 사이트에 로그인하고 있습니다. 내가 눌러 Y을 제목으로이 창을 찾아 + Alt 키를 보내야 할웹 브라우저 컨트롤에서 "보안 경고"창을 비활성화하는 방법

Security Alert window

예 : 하지만 신뢰할 수없는 인증서에 대한 팝업 등의 standart 창에 "보안 경고"얻을

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

사용자는이 창을 깜박일 수 있습니다.

이 경고는 어떻게 무시합니까?
웹 브라우저 컨트롤에서이 "신뢰할 수없는 인증서"확인을 비활성화 하시겠습니까?

+0

중복 가능성 [WebBrowser 컨트롤 - SSL 오류를 무시 (http://stackoverflow.com/questions/6933254/webbrowser-control-ignore-ssl-errors) –

+0

참고 항목 : 콘솔 앱용 WebBrowser 컨트롤의 SSL 오류 http://stackoverflow.com/questions/17698002/ignoring-web-browser-ssl-security-alerts-in-console-application/21008529 –

답변

4

이 그것을 수행해야합니다

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

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate); 

은 물론, 눈부시게 인증서를 허용하면 보안 위험이 있습니다. 조심해.

+3

나는 이것을 얻을 수 없었다. WebBrowser 컨트롤로 작업하십시오. 그것은 나일지도 모르지만,이 솔루션은 System.Windows.Forms.WebBrowser 컨트롤이 .NET을 통해 요청을 보내지 않아 적용 할 수 없다고 생각됩니다. –

+1

@DanielBallinger 그것은 당신뿐이 아닙니다. 나는 [같은 문제가] 있습니다 (http://stackoverflow.com/q/12999735/1357272). – ih8ie8

+0

이것은 관리 객체 전용입니다. 웹 브라우저 컨트롤은 래핑 된 관리되지 않는 컨트롤입니다. 이것이 작동하지 않는 이유입니다. – Odys

6

문서가 코드 프로젝트에 있습니다. http://www.codeproject.com/KB/shell/WebBrowserControlDialogs.aspx 이 정보가 도움이되기를 바랍니다.

+0

HI @BimJearn, 훌륭한 작품. 이것은 모든 팝업 메시지를 잡는 매우 흥미로운 방법입니다.주의 사항 : 메시지 텍스트의 내용을 사용하여 팝업 유형을 결정하므로 Window OS 언어가 영어 이외의 언어 인 경우에는 작동하지 않습니다. –

+0

이것이 내가 찾은 유일한 방법이다. 언급했듯이, 언어에 따라 다르지만, StringConstants 클래스가 다른 언어를 수용하기 위해 쉽게 편집 될 수있는 것처럼 보입니다. +1 – smitty1

1

인증서가 신뢰할 수있는 인증 기관 (프롬프트의 첫 번째 지점)이 아닌 경우 문제가되는 PC의 신뢰할 수있는 루트 인증 기관 아래에 인증서를 설치할 수 있습니다.

인증서보기에서이 작업을 수행 할 수 있습니다.

모든 인증서를 허용하는 코드를 변경할 필요가 없기 때문에 어떤면에서는 더 간단한 솔루션 일 수 있습니다. 그러나 응용 프로그램을 사용할 때마다 인증서를 설치해야합니다. 내가 false로 WebBrowser.ScriptErrorsSuppressed 속성을 설정하면

+0

좋은 생각처럼 보이지만, 나는 그것을 시험해 보았다. [그것은 나를 위해 일하지 않았다] (http://stackoverflow.com/q/12999735/1357272). 어떤 아이디어? – ih8ie8

0

, 내가 여기에 더 이상 이러한 팝업

+0

이렇게하면 숨 깁니다. 예를 클릭하지 않습니다 – Odys

+0

이것에 대해 확실합니까? 내 코드가 문제없이 몇 달 동안 계속 실행되었습니다. – Adil

+0

예, 페이지를 OP 케이스에로드하지 못하도록합니다. –

1

를 얻을하지 않습니다, 우리는 솔루션과 함께 할 것입니다 : 내가 기본으로 Browser_Navigated 이벤트에서 실행 그때까지 activeX 구성 요소는 null입니다.

참조 :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 }); 

    }