You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TWebBrowser.Silent设为True仍弹出证书吊销信息提示,如何解决?

解决TWebBrowser设置Silent=True仍弹出证书吊销提示的问题

设置TWebBrowser.Silent = True仅能抑制网页脚本弹窗,而“此网站安全证书的吊销信息不可用。是否继续?”属于系统级安全提示,不受Silent属性控制。以下提供两种无需修改客户端Internet选项的编程解决方案,适合批量分发场景:

方案一:自定义证书验证策略

通过实现ICertificatePolicy接口,覆盖系统默认的证书验证逻辑,跳过吊销信息检查:

  1. 定义并实现自定义证书策略类
type
  ICertificatePolicy = interface(IUnknown)
    ['{79EAC9D0-BAF9-11CE-8C82-00AA004BA90B}']
    function CheckPolicy(pMsg: PMsg; dwCertPolicyError: DWORD): HRESULT; stdcall;
  end;

  TCustomCertificatePolicy = class(TInterfacedObject, ICertificatePolicy)
  public
    function CheckPolicy(pMsg: PMsg; dwCertPolicyError: DWORD): HRESULT; stdcall;
  end;

function TCustomCertificatePolicy.CheckPolicy(pMsg: PMsg; dwCertPolicyError: DWORD): HRESULT;
begin
  // 忽略证书吊销及常见证书错误,允许继续访问
  if dwCertPolicyError in [CERT_E_REVOKED, CERT_E_UNTRUSTEDROOT, CERT_E_CN_NO_MATCH,
    CERT_E_DATE_INVALID, SEC_E_CERT_REVOKED, SEC_E_UNTRUSTED_ROOT] then
    Result := S_OK
  else
    Result := E_FAIL;
end;
  1. 在程序启动时注册该策略
var
  CertPolicy: ICertificatePolicy;
begin
  CertPolicy := TCustomCertificatePolicy.Create;
  CoInternetSetCertificatePolicy(nil, CertPolicy);
end;

方案二:直接禁用证书吊销检查

通过CoInternetSetFeatureEnabledAPI全局禁用当前进程的证书吊销检查:

procedure TForm1.Button1Click(Sender: TObject);
const
  FEATURE_DISABLE_CERT_REVOCATION_CHECK = 21;
begin
  CoInternetSetFeatureEnabled(FEATURE_DISABLE_CERT_REVOCATION_CHECK, SET_FEATURE_ON_PROCESS, True);
  WebBrowser1.Silent := True;
  WebBrowser1.Navigate('http://...');
end;

注意事项

  • 方案一灵活性更高,可针对不同证书错误做精细化处理;方案二实现更简洁。
  • 部分客户端出现提示是因为系统默认启用了严格的证书吊销检查策略,其他客户端可能已通过组策略等方式禁用。

内容的提问来源于stack exchange,提问作者Héctor C.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 22:03:13