2008-10-07 11 views
8

Tôi đang sử dụng điều khiển Webbrowser để đăng nhập vào trang HTTPS bằng "chứng chỉ không đáng tin cậy". nhưng tôi nhận được cửa sổ bật lên cửa sổ standart như "Security Alert" về giấy chứng nhận không tin cậy:Cách tắt cửa sổ "Cảnh báo bảo mật" trong điều khiển Webbrowser

Security Alert window

Tôi phải tìm cửa sổ này theo tiêu đề và gửi nó Alt + Y nhấn :

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

nhưng người dùng có thể thấy nhấp nháy của cửa sổ này.

Tôi làm cách nào để bỏ qua cảnh báo này?
Hoặc tắt kiểm tra "chứng chỉ không đáng tin cậy" này trong điều khiển Webbrowser?

+0

thể trùng lặp của [điều khiển WebBrowser - bỏ qua lỗi SSL] (http://stackoverflow.com/questions/6933254/webbrowser-control-ignore-ssl-errors) –

+0

Xem thêm: Lỗi SSL trong điều khiển WebBrowser cho các ứng dụng giao diện điều khiển http://stackoverflow.com/questions/17698002/ignoring-web-browser-ssl-security-alerts-in-console-application/21008529 –

Trả lời

4

này nên làm điều đó:

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

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate); 

Rõ ràng, blindingly phép giấy chứng nhận là một nguy cơ bảo mật. Hãy cẩn thận.

+3

Tôi không thể thực hiện việc này làm việc với điều khiển WebBrowser. Nó có thể chỉ là tôi, nhưng tôi nghi ngờ giải pháp này không được áp dụng như kiểm soát System.Windows.Forms.WebBrowser không gửi yêu cầu thông qua .NET. –

+1

@DanielBallinger Nó không chỉ là bạn. Tôi đang gặp [vấn đề tương tự] (http://stackoverflow.com/q/12999735/1357272). – ih8ie8

+0

Đây chỉ dành cho các đối tượng được quản lý. Điều khiển Webbrowser là một điều khiển được quản lý không được quản lý. Đây là lý do tại sao điều này không hoạt động. – Odys

6

Ok, bài viết nằm trong dự án mã - xem http://www.codeproject.com/KB/shell/WebBrowserControlDialogs.aspx Hy vọng điều này sẽ hữu ích.

+0

HI @BimJearn, công việc tuyệt vời. Đây là một cách rất thú vị để bẫy tất cả các tin nhắn popup.Một lời cảnh báo mặc dù: vì bạn đang dựa vào nội dung của tin nhắn văn bản để xác định loại popup, điều này sẽ không hoạt động nếu bạn Window OS ngôn ngữ là bất cứ điều gì khác hơn là tiếng Anh. –

+0

Đây là điều duy nhất tôi tìm thấy làm việc cho tôi. Như đã đề cập, nó là ngôn ngữ cụ thể, nhưng có vẻ như lớp StringConstants có thể được chỉnh sửa khá dễ dàng để chứa các ngôn ngữ khác. +1 – smitty1

1

Nếu chứng chỉ không phải từ cơ quan chứng nhận tin cậy (điểm đầu tiên trong lời nhắc) thì bạn có thể cài đặt chứng chỉ dưới Tổ chức phát hành chứng chỉ gốc đáng tin cậy trên PC được đề cập.

Bạn có thể thực hiện việc này trong Chế độ xem chứng chỉ.

Trong một số cách, đây có thể là giải pháp đơn giản vì không yêu cầu bất kỳ thay đổi mã nào chấp nhận bất kỳ và tất cả chứng chỉ nào. Tuy nhiên nó yêu cầu chứng chỉ được cài đặt bất cứ nơi nào ứng dụng được sử dụng.

+0

Trông giống như một ý tưởng tuyệt vời, nhưng tôi đã thử nó và [nó không hiệu quả đối với tôi] (http://stackoverflow.com/q/12999735/1357272) vì một lý do nào đó. Bất kỳ ý tưởng tại sao? – ih8ie8

0

Khi tôi thiết lập thuộc tính WebBrowser.ScriptErrorsSuppressed false, tôi không có được những popup nữa

+0

Điều này sẽ ẩn nó. Nó sẽ không bấm YES – Odys

+0

bạn có chắc chắn về điều này? mã của tôi đã được chạy trong một vài tháng nay mà không có vấn đề – Adil

+0

Có nó sẽ chỉ ẩn nó để trang sẽ không tải trong trường hợp OP –

1

Ở đây, chúng tôi đi với các giải pháp: Tôi chạy nó trên các sự kiện Browser_Navigated như tiềm ẩn thành phần activeX là null cho đến lúc đó.

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 }); 

    }