19

(NSISを使用して作成した)インストーラーを開くと、UACダイアログが表示され、インストーラーに関する情報が示されます。フィールドPublisherは「不明」です。アプリケーションにデジタル署名することを聞いたことがありますが、NSISでこれを行う方法を知っていますか?

フィールド/属性パブリッシャーを「マイインストーラー」またはその他のテキストに設定するにはどうすればよいですか?

次のコードは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
4

3 に答える 3

21

Windowsによって信頼されている認証局でインストーラーにAuthenticode 署名する必要があります( Winqualの一部になりたい場合は、特別な証明書が必要です。MSではVeriSignのみを使用できます)。そのフィールドはデジタル証明書から抽出されるためです( 1つは存在します)、PEバージョン情報からではありません。

ビルドプロセスの一部として署名するには、このハックを使用できます。または、NSIS v3を使用している場合は、!finalizeコマンドを使用できます。

于 2012-05-14T16:11:39.993 に答える
5

そのコマンドの詳細を説明するために、これらはバージョンNSIS3.03で!finalizeコマンドを使用して使用した行です。

重要:certificate.pfxファイルと同じディレクトリにあるpasswd.txtファイル 内にcodesign証明書のパスワードを入力する必要があります。

!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
于 2018-10-08T14:50:30.533 に答える
1

svcabreが実装したので、2つの署名でインストーラーファイルに署名することが重要であるように思われます。

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"

このオプションを使用すると、Windows10でも証明書の所有者が正しく表示されます。

于 2019-09-20T06:53:43.633 に答える