當我們的系統時間不正常,比如設置一個日期-1999年9月9日,會引發證書問題。 系統時間不正常-IE有概率能訪問 觸發NavigateError事件,異常代碼INET_E_INVALID_CERTIFICATE -- 這是一個必要不充分條件,系統時間不正常時IE有相關證書異常,更新時間能解決此類異常 ...
當我們的系統時間不正常,比如設置一個日期-1999年9月9日,會引發證書問題。
系統時間不正常-IE有概率能訪問
觸發NavigateError事件,異常代碼INET_E_INVALID_CERTIFICATE
-- 這是一個必要不充分條件,系統時間不正常時IE有相關證書異常,更新時間能解決此類異常
系統時間不正常-Cef完全無法訪問
1.使用Cef-Demo,異常顯示如下:
2.ChromiumWebBrowser控制項,此類異常也會觸發LoadError事件
異常Code是CefErrorCode.Aborted,文件下載取消等異常信息也是Aborted類型,所以無法判斷當前異常是否證書相關異常。
那麼有沒有Cef瀏覽器有沒有其它相關異常事件,可以準確獲知相關證書異常呢?
Cef系統時間不正常的修複方案
Cef有請求委托RequestHandler對象,可以在本地定製相關實現
_cefBrowser.RequestHandler = new ChromeBrowserRequestHandler();
新建ChromeBrowserRequestHandler,繼承預設RequestHandler,把相關事件暴露給外界調用
1 public class ChromeBrowserRequestHandler : DefaultRequestHandler 2 { 3 /// <summary> 4 /// 證書異常 5 /// 有很多種,比如系統時間不正確引發證書異常 CertDateInvalid 6 /// </summary> 7 public event EventHandler<(string url, CefErrorCode errorCode)> CertificateError; 8 public override bool OnCertificateError( 9 IWebBrowser browserControl, 10 CefSharp.IBrowser browser, 11 CefErrorCode errorCode, 12 string requestUrl, 13 ISslInfo sslInfo, 14 IRequestCallback callback) 15 { 16 callback.Dispose(); 17 //證書異常 18 CertificateError?.Invoke(this,(requestUrl,errorCode)); 19 return false; 20 } 21 }
獲取到證書異常的觸發時機,如何解決系統時間不正常?
詳見我的博客:C# 同步更新系統時間
註:更新系統時間,需要管理員許可權。相關app.manifest添加設置 ,見: