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 False 到 Result 参数时,报告证书问题的请求将被立即取消。当您 return True 到 Result 参数时,请求导航将继续。但是,除了您必须说出继续请求(即上面代码中的调用 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;
我不鼓励使用这种方式,因为导航到有证书问题的内容可能不安全。
我使用 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 False 到 Result 参数时,报告证书问题的请求将被立即取消。当您 return True 到 Result 参数时,请求导航将继续。但是,除了您必须说出继续请求(即上面代码中的调用 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;
我不鼓励使用这种方式,因为导航到有证书问题的内容可能不安全。