web-dev-qa-db-ja.com

Windowsでコード署名用の自己署名証明書を作成するにはどうすればよいですか?

Windows SDKのツールを使用して、コード署名用の自己署名証明書を作成するにはどうすればよいですか?

204
Roger Lipscombe

更新された回答

次のWindowsバージョン以降を使用している場合:Windows Server 2012、Windows Server 2012 R2、またはWindows 8.1の場合 MakeCertは非推奨になりました 、Microsoftは PowerShell CmdletNew-SelfSignedCertificate .

Windows 7などの古いバージョンを使用している場合は、MakeCertまたは別のソリューションを使用する必要があります。一部の人々 提案公開鍵インフラストラクチャPowershell(PSPKI)モジュール

元の回答

自己署名コード署名証明書(SPC- Software Publisher Certificate )を一度に作成できますが、次のことを行うことをお勧めします。

自己署名認証局(CA)の作成

makecert -r -pe -n "CN=My CA" -ss CA -sr CurrentUser ^
         -a sha256 -cy authority -sky signature -sv MyCA.pvk MyCA.cer

(^ =バッチコマンドラインで行を折り返すことができます)

これにより、エクスポート可能な秘密キー(-pe)を使用して、自己署名(-r)証明書が作成されます。 「My CA」という名前で、現在のユーザーのCAストアに配置する必要があります。 SHA-256 アルゴリズムを使用しています。キーは署名用です(-sky)。

秘密鍵はMyCA.pvkファイルに、証明書はMyCA.cerファイルに保存する必要があります。

CA証明書のインポート

信頼できない場合、CA証明書を取得しても意味がないため、Windows証明書ストアにインポートする必要があります。あなたはcan証明書MMCスナップインを使用できますが、コマンドラインから:

certutil -user -addstore Root MyCA.cer

コード署名証明書(SPC)の作成

makecert -pe -n "CN=My SPC" -a sha256 -cy end ^
         -sky signature ^
         -ic MyCA.cer -iv MyCA.pvk ^
         -sv MySPC.pvk MySPC.cer

上記とほとんど同じですが、発行者のキーと証明書(-icおよび-ivスイッチ)を提供しています。

また、証明書とキーをPFXファイルに変換します。

pvk2pfx -pvk MySPC.pvk -spc MySPC.cer -pfx MySPC.pfx

PFXファイルを保護する場合は、-poスイッチを追加します。そうでない場合、PVK2PFXはパスフレーズなしでPFXファイルを作成します。

コードの署名に証明書を使用する

signtool sign /v /f MySPC.pfx ^
              /t http://timestamp.url MyExecutable.exe

タイムスタンプが重要な理由を見る

PFXファイルを証明書ストアにインポートする場合(PVKIMPRTまたはMMCスナップインを使用できます)、次のようにコードに署名できます。

signtool sign /v /n "Me" /s SPC ^
              /t http://timestamp.url MyExecutable.exe

signtool /tの可能なタイムスタンプURLは次のとおりです。

  • http://timestamp.verisign.com/scripts/timstamp.dll
  • http://timestamp.globalsign.com/scripts/timstamp.dll
  • http://timestamp.comodoca.com/authenticode

Microsoftの完全なドキュメント

ダウンロード

.NET開発者ではない場合は、Windows SDKおよび.NETフレームワークのコピーが必要です。現在のリンクはこちらから入手できます: SDK&.NET (makecertをC:\Program Files\Microsoft SDKs\Windows\v7.1にインストールします)。あなたのマイレージは異なる場合があります。

MakeCertは、Visual Studioコマンドプロンプトから利用できます。 Visual Studio 2015にはそれがあり、Windows 7の[VS 2015の開発者コマンドプロンプト]または[VS2015 x64ネイティブツールコマンドプロンプト](おそらくすべてが同じフォルダーにある)の[スタート]メニューから起動できます。

344
Roger Lipscombe

ロジャーの答えはとても役に立ちました。

しかし、私はそれを使用するのに少し問題があり、赤い「Windowsはこのドライバーソフトウェアの発行元を確認できません」というエラーダイアログを取得し続けました。キーは、テストルート証明書をインストールすることでした

certutil -addstore Root Demo_CA.cer

ロジャーの答えはまったくカバーしていませんでした。

ここに私のために働いたバッチファイルがあります(.infファイルが含まれていますが、含まれていません)。 GUIツールをまったく使用せずに、最初から最後まですべてを実行する方法を示しています(いくつかのパスワードプロンプトを除く)。

REM Demo of signing a printer driver with a self-signed test certificate.
REM Run as administrator (else devcon won't be able to try installing the driver)
REM Use a single 'x' as the password for all certificates for simplicity.

PATH %PATH%;"c:\Program Files\Microsoft SDKs\Windows\v7.1\Bin";"c:\Program Files\Microsoft SDKs\Windows\v7.0\Bin";c:\WinDDK\7600.16385.1\bin\selfsign;c:\WinDDK\7600.16385.1\Tools\devcon\AMD64

makecert -r -pe -n "CN=Demo_CA" -ss CA -sr CurrentUser ^
   -a sha256 -cy authority -sky signature ^
   -sv Demo_CA.pvk Demo_CA.cer

makecert -pe -n "CN=Demo_SPC" -a sha256 -cy end ^
   -sky signature ^
   -ic Demo_CA.cer -iv Demo_CA.pvk ^
   -sv Demo_SPC.pvk Demo_SPC.cer

pvk2pfx -pvk Demo_SPC.pvk -spc Demo_SPC.cer ^
   -pfx Demo_SPC.pfx ^
   -po x

inf2cat /drv:driver /os:XP_X86,Vista_X64,Vista_X86,7_X64,7_X86 /v

signtool sign /d "description" /du "www.yoyodyne.com" ^
   /f Demo_SPC.pfx ^
   /p x ^
   /v driver\demoprinter.cat

certutil -addstore Root Demo_CA.cer

rem Needs administrator. If this command works, the driver is properly signed.
devcon install driver\demoprinter.inf LPTENUM\Yoyodyne_IndustriesDemoPrinter_F84F

rem Now uninstall the test driver and certificate.
devcon remove driver\demoprinter.inf LPTENUM\Yoyodyne_IndustriesDemoPrinter_F84F

certutil -delstore Root Demo_CA
19
Dan Kegel

回答で述べたように、非推奨ではない方法で独自のスクリプトに署名するには、 New-SelfSignedCertificate を使用する必要があります。

  1. キーを生成します。
    New-SelfSignedCertificate -DnsName [email protected] -Type CodeSigning -CertStoreLocation cert:\CurrentUser\My

  2. 秘密鍵なしで証明書をエクスポートします。
    Export-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0] -FilePath code_signing.crt [0]は、複数の証明書がある場合にこの機能を実行します...明らかに、インデックスを使用したい証明書と一致させるか、またはフィルター処理(thumprintまたは発行者)。

  3. 信頼できる発行元としてインポートする
    Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\TrustedPublisher

  4. ルート認証局としてインポートします。
    Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\Root

  5. スクリプトに署名します。
    Set-AuthenticodeSignature .\script.ps1 -Certificate (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)

キーをセットアップしたら、他のスクリプトに簡単に署名できます。
詳細情報とトラブルシューティングのヘルプは この記事 で入手できます。

14
chaami

PowerShell 4.0(Windows 8.1/ Server 2012 R2)以降、Windowsで makecert.exe なしで証明書を作成できます。

必要なコマンドは、 New-SelfSignedCertificate および Export-PfxCertificate です。

手順はPowerShellで自己署名証明書を作成するにあります。

12
Yishai

Powershellで New-SelfSignedCertificate コマンドを使用すると、かなり簡単です。 PowerShellを開き、これらの3つのコマンドを実行します。

1)証明書の作成
$ cert = New-SelfSignedCertificate -DnsName www.yourwebsite.com -Type CodeSigning -CertStoreLocation Cert:\ CurrentUser\My

2)それにパスワードを設定します
$ CertPassword = ConvertTo-SecureString -String "my_passowrd" -Force –AsPlainText

3)エクスポート
Export-PfxCertificate -Cert "cert:\ CurrentUser\My\$($ cert.Thumbprint)" -FilePath "d:\ selfsigncert.pfx" -Password $ CertPassword

証明書selfsigncert.pfxは@ D:/に配置されます


オプションの手順:また、システム環境変数に証明書パスワードを追加する必要があります。そのためには、cmdに以下を入力します:setx CSC_KEY_PASSWORD "my_password"

12
JerryGoyal