delphi CEF4 Chromium 不显示存在安全连接错误的网站

delphi CEF4 Chromium do not show web sites with secure connection error

我使用 CEF4 Chromium 创建了一个应用程序,用于浏览本地网络中的页面。 但是我的页面有 "Secure Connection Error" 因为我的 url 以 "https" 开头。例如“https://10.36.159.212/login.html” 我的程序不在 Chromiumwindow 或 CEFWindowParent 上显示任何内容。 如果能帮助我,我将不胜感激。

默认情况下,CEF 在导航过程中出现证书问题时会取消请求。很难说你想在你的情况下做什么,但一般来说,你不应该处理有证书问题的内容。但如果您知道这对您来说是安全的,您至少可以通过以下两种方式允许您的请求继续进行:

1。处理每个请求的证书问题

您可以为 OnCertificateError event and handle each request certificate issue separately. With CEF4Delphi 库编写处理程序,例如这样:

type
  TFormMain = class(TForm)
    ChromiumWindow1: TChromiumWindow;
    procedure FormShow(Sender: TObject);
  private
    procedure ChromiumCertificateError(Sender: TObject; const browser: ICefBrowser;
      certError: TCefErrorcode; const requestUrl: ustring; const sslInfo: ICefSslInfo;
      const callback: ICefRequestCallback; out Result: Boolean);
  end;

procedure TFormMain.FormShow(Sender: TObject);
begin
  ChromiumWindow1.ChromiumBrowser.OnCertificateError := ChromiumCertificateError;
  ChromiumWindow1.CreateBrowser;
end;

procedure TFormMain.ChromiumCertificateError(Sender: TObject; const browser: ICefBrowser;
  certError: TCefErrorcode; const requestUrl: ustring; const sslInfo: ICefSslInfo;
  const callback: ICefRequestCallback; out Result: Boolean);
begin
  Result := False;

  if MessageDlg(Format('Certificate error. Code: %d. Do you want to continue?',
    [Integer(certError)]), mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  begin
    Result := True;
    callback.Cont(True);
  end;
end;

这个活动的原理很简单。当您 return FalseResult 参数时,报告证书问题的请求将被立即取消。当您 return TrueResult 参数时,请求导航将继续。但是,除了您必须说出继续请求(即上面代码中的调用 callback.Cont(True))之外,无论是在此事件中还是在稍后的某个事件中。

如果您对特定的证书错误感兴趣,请参考事件的 certError 参数,错误代码常量以 ERR_CERT_[=43 为前缀=] 在 uCEFConstants.pas module (for descriptions then see the net_error_list.h 头文件中定义)。

处理特定证书错误的另一种方法是从 sslInfo 接口获取状态并通过 CERT_STATUS_[=43 屏蔽状态值=] 标志 (uCEFConstants.pas).

2。全局忽略所有证书问题

您可以启用 ignore_certificate_errors option to globally ignore all certificate issues letting all the created CEF browsers navigate to the content despite all certificate issues (which is unsafe). For CEF4Delphi 库,您通常可以在项目源中设置全局设置,例如像这样:

GlobalCEFApp := TCefApplication.Create;
try
  GlobalCEFApp.IgnoreCertificateErrors := True;

  if GlobalCEFApp.StartMainProcess then
  begin
    Application.Initialize;
    Application.MainFormOnTaskbar := True;
    Application.CreateForm(TFormMain, FormMain);
    Application.Run;
  end;
finally
  GlobalCEFApp.Free;
end;

我不鼓励使用这种方式,因为导航到有证书问题的内容可能不安全。