Установка поля UAC "Publisher" для установщика NSIS
Когда я открываю мой установщик (который я создал с помощью NSIS), появляется диалоговое окно UAC с информацией о моем установщике. Полевой издатель "неизвестен". Я слышал о цифровой подписи приложения, знаете ли вы, как это сделать в NSIS?
Как установить поле/атрибут Publisher в "Мой установщик" или какой-либо другой текст?
Я думаю, что следующий код должен установить поле Publisher, но он этого не делает, он все еще остается "неизвестным":
InstallDir "abc"
Name "def"
OutFile "def.exe"
VIProductVersion "1.0.0.0"
VIAddVersionKey ProductName "def"
VIAddVersionKey Comments "MY DESCRIPTION"
VIAddVersionKey CompanyName "My Installer"
VIAddVersionKey LegalCopyright "MY COMPANYNAME"
VIAddVersionKey FileDescription "MY DESCRIPTION"
VIAddVersionKey FileVersion 1
VIAddVersionKey ProductVersion 1
VIAddVersionKey InternalName "def"
VIAddVersionKey LegalTrademarks "PTY LTD"
VIAddVersionKey OriginalFilename "def.exe"
Section
DetailPrint "Hello World"
SectionEnd
Ответы
Ответ 1
Вам понадобится Authenticode sign установщик с сертификатом, которому доверяют окна (if вы хотите быть частью Winqual, тогда вам нужен специальный сертификат, и MS разрешает вам использовать VeriSign), потому что это поле извлекается из цифрового сертификата (если таковое существует), а не из информации о версии PE.
Чтобы подписать как часть процесса сборки, вы можете использовать этот взломать, или если вы используете вилку Unicode, тогда вы можете использовать команду !finalize
.
Ответ 2
Чтобы дать более подробную информацию об этой команде, это строки, которые я использовал с версией NSIS 3.03 с командой !finalize
.
Важно: Вам потребуется предоставить пароль сертификата кодового знака в файле passwd.txt, расположенном в том же каталоге, что и ваш файл certificate.pfx.
!define PRODUCT_NAME "def"
!define PRODUCT_VERSION "1.0.0.0"
!define OutputFileName "def.exe"
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "${OutputFileName}"
InstallDir "abc"
ShowInstDetails show
!define /file OutFileSignPassword ".\CodeSign\passwd.txt"
!define OutFileSignCertificate ".\CodeSign\certificate.pfx"
!define OutFileSignSHA1 ".\CodeSign\signtool.exe sign /f ${OutFileSignCertificate} /p ${OutFileSignPassword} /fd sha1 /t http://timestamp.comodoca.com /v"
!define OutFileSignSHA256 ".\CodeSign\signtool.exe sign /f ${OutFileSignCertificate} /p ${OutFileSignPassword} /fd sha256 /tr http://timestamp.comodoca.com?td=sha256 /td sha256 /as /v"
!finalize "PING -n 1 127.0.0.1 >nul" # Delay Next Step to ensure File isn't locked by previous Process
!finalize "${OutFileSignSHA1} .\${OutputFileName}" # CodeSigning with SHA1/AuthentiCode
!finalize "PING -n 5 127.0.0.1 >nul" # Delay Next Step to ensure File isn't locked by previous Process
!finalize "${OutFileSignSHA256} .\${OutputFileName}" # CodeSigning with SHA256/RFC 3161
CRCCheck on
Section
DetailPrint "Hello World"
SectionEnd
После этого вы сможете увидеть вывод, похожий на эти строки:
The following certificate was selected:
Issued to: Your Company
Issued by: COMODO RSA Code Signing CA
Expires: Sun Mar 15 00:59:59 2020
SHA1 hash: 0A12223C465069798D940317273C4F56A9BCC6D9
Done Adding Additional Store
Successfully signed: .\def.exe
Number of files successfully Signed: 1
Number of warnings: 0
Number of errors: 0
Ответ 3
Кажется важным подписать файл установщика двумя подписями, как это реализовал svcabre :
Использование обоих алгоритмов sha1
с одной стороны
"c:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe"
sign /f "YourCertificateFileHere.pfx" /p YourPasswordHere
/fd sha1 /t http://timestamp.comodoca.com /v "YourInstallerFilePathHere"
и sha256
с другой стороны
"c:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe"
sign /f "YourCertificateFileHere.pfx" /p YourPasswordHere
/fd sha256 /tr http://timestamp.comodoca.com?td=sha256
/td sha256 /as /v "YourInstallerFilePathHere"
С этой опцией, также окна 10 правильно показали владельца сертификата.