Inno Setup:使用第三方工具 DwinsHs 忽略 SSL 证书错误

Inno Setup: Ignore SSL Certificate errors using the third party tool DwinsHs

我使用名为 DwinsHs 的第三方工具进行 Inno Setup。

此第三方工具为我提供了在安装过程中下载文件的功能。

我想使用函数 DwinsHs_ReadRemoteURL.
发送 HTTPS 请求 我希望请求忽略所有 TLS (SSL) 证书错误,但我找不到方法。

此第三方工具是开源的,此功能在 dwinshs.iss 中定义,您可以通过下载第三方工具获得。

如何在第三方工具 DwinsHs 中使用 DwinsHs_ReadRemoteURL 忽略 HTTPS 请求中的所有 SSL 证书错误?

dwinshs.iss 使用 WinInet API。使用此 API,要忽略未知的 CA 错误,您必须调用 InternetSetOption function.

这有点复杂,因为它需要一个指向带有安全标志的整数的指针作为其参数。 Inno Setup 不支持指向整数的指针。但它支持 pointers to structures (正如您所评论的)。所以你可以把整数包装成一个结构。

您需要为 InternetSetOption 声明一个替代名称,该名称采用结构而不是字符串(同样是因为 Inno Setup 不支持通用指针,否则单一声明就足够了)。

const
  INTERNET_OPTION_SECURITY_FLAGS = 31;
  SECURITY_FLAG_IGNORE_UNKNOWN_CA = [=10=]000100;

type
  TInteger = record
    Value: Integer;
  end;

function InternetSetOptionInt(
  hInet: HINTERNET; dwOption: DWORD; var lpBuffer: TInteger; dwBufferLength: DWORD): BOOL;
  external 'InternetSetOptionA@wininet.dll stdcall delayload setuponly';

并像这样使用它:

SecurityFlags.Value := SECURITY_FLAG_IGNORE_UNKNOWN_CA;
InternetSetOptionInt(
  hRequest, INTERNET_OPTION_SECURITY_FLAGS, SecurityFlags, SizeOf(SecurityFlags))

(在dwinshs.iss中分配hRequest之后)。


或者改用纯 HTTP。设置为忽略证书错误的 HTTPS 无论如何都不安全。


或者使用不同的库来下载文件。

Inno Download Plugin 可以忽略所有证书错误:

idpSetOption('InvalidCert', 'ignore');