我正试图从Inno Setup安装程序为我的Web服务配置HTTPS连接。以前,我正在做下一件事:
makecert
certmgr
GetSHA1OfFile
方法获取其指纹/散列。netsh http add sslcert
命令但是现在我从makecert
切换到OpenSSL,并且还引入了先前生成的CA证书,并作为我的服务器证书的颁发者。我现在在做什么:
certmgr
CertUtil
现在,问题是,在使用OpenSSL生成证书时,似乎它的sha1哈希与其指纹不同,因此我不能再使用GetSHA1OfFile
。
所以,问题是 - 如果GetSHA1OfFile
不能用于此目的,我如何以编程方式在Inno Setup中获取证书哈希,将其分配给端口?
答案 0 :(得分:1)
使用certutil.exe -dump
command并阅读其输出。
我不确定,您所追踪的是哪个指纹,但我认为它是标有Cert Hash(sha1)
的指纹。
var
Key: string;
I: Integer;
TempFile: string;
Lines: TArrayOfString;
Hash: string;
ResultCode: Integer;
PfxFile: string;
Params: string;
begin
PfxFile := '...\my.pfx';
TempFile := ExpandConstant('{tmp}\certdump.txt');
Params := '/c certutil.exe -dump "' + PfxFile + '" > "' + TempFile + '"';
if not Exec('cmd.exe', Params, '', SW_HIDE, ewWaitUntilTerminated, ResultCode) then
begin
Log('Failed to run certificate dump');
end
else
if not LoadStringsFromFile(TempFile, Lines) then
begin
Log('Failed to read certificate dump');
end
else
begin
Key := 'Cert Hash(sha1):';
Hash := '';
for I := 0 to GetArrayLength(Lines) - 1 do
begin
if CompareText(Copy(Lines[I], 1, Length(Key)), Key) = 0 then
begin
Hash := Trim(Copy(Lines[I], Length(Key) + 1, Length(Lines[I]) - Length(Key)));
StringChange(Hash, ' ', '');
end;
end;
DeleteFile(TempFile);
if Hash = '' then
begin
Log('Hash not found in certificate dump');
end
else
begin
Log('Certificate hash: ' + Hash);
end;
end;
end;