0

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

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

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

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

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

4

1 回答 1

1

使用dwinshs.issWinInet API。使用此 API,要忽略未知 CA 错误,您必须调用InternetSetOption函数

这有点复杂,因为它需要一个以安全标志作为参数的整数指针。Inno Setup 不支持指向整数的指针。但它支持指向结构的指针(正如您评论的那样)。因此,您可以将整数包装到结构中。

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

const
  INTERNET_OPTION_SECURITY_FLAGS = 31;
  SECURITY_FLAG_IGNORE_UNKNOWN_CA = $00000100;

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))

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


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


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

Inno 下载插件可以忽略所有证书错误:

idpSetOption('InvalidCert', 'ignore');
于 2016-03-22T12:45:53.703 回答