使用dwinshs.iss
WinInet 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');