Signtoolエラー:Windowsストアアプリで指定されたすべての条件を満たす証明書が見つかりませんでしたか?


294

私が持っているpfxファイルでWindows 8 appxパッケージに署名しようとしています。私はそのようなコマンドを使用しています:

signtool.exe sign /fd sha256 /f "key.pfx" "app.appx"

そしてこれから、私は得ます:

SignToolエラー:指定されたすべての条件を満たす証明書が見つかりませんでした。

私が満たしていない「基準」は何ですか?これはテスト専用であるため、これらは自己署名証明書です。キーをインポートして署名しようとしましたが、常に同じエラーが発生します。どうすれば修正できますか?


Signtool信頼されたルート証明書ストアで証明書を見つけようとしていると思いますが、そこにコード署名証明書はありません。
crea7または2014

15
署名に使用された証明書の有効期限が切れたため、このエラーが発生しました
Mark Homer

1
同様の問題があり、ここに回答を投稿しました。お役に立てれば。
SurenSaluka

回答:


590

Visual Studioでこのエラーが発生したのは、最初に開発されたコンピューターと一致する署名証明書の設定があったためです。

これを確認するには、プロジェクトのプロパティ> [署名]タブに移動し、証明書の詳細を確認します。

[ClickOnceマニフェストに署名する]チェックボックスをオフにして、署名を無効にすることができます。

署名プロパティ

このオプションをオフにしたくない場合は、証明書をインストールする必要があります。


12
@JDandChipsが提案したものに追加するだけです。デバッグとテストの目的で、上のスクリーンショットに示されている[テスト証明書の作成]ボタンをクリックして、一時的なテスト証明書を使用することもできます。
ナム2015

「証明書をインストールする」とはどういう意味ですか?
Sean Kendle 2016年

私の状況では、証明書は最初に開発されたマシンから入手できたので、「ファイルから選択...」を選択して、不足している証明書をインストールしました。または、常に新しいものを作成して使用することもできます!
JDandChips 2016年

@JDandChips新しい証明書をどのように作成しますか?
erotavlas

3
VS初心者向け。ソリューションではなくプロジェクトを右クリックしてください。これにより、まったく異なるメニューがポップアップします。
B5A7 2017年

109

/ debugで試してください。1,2のように:

signtool sign /debug /f mypfxfile.pfx /p <password> (mydllexectuable).exe

それはあなたが何が起こっているかを見つけるのに役立ちます。次のような出力が得られるはずです。

The following certificates were considered:
    Issued to: <issuer>
    Issued by: <certificate authority> Class 2 Primary Intermediate Server CA
    Expires:   Sun Mar 01 14:18:23 2015
    SHA1 hash: DD0000000000000000000000000000000000D93E

    Issued to: <certificate authority> Certification Authority
    Issued by: <certificate authority> Certification Authority
    Expires:   Wed Sep 17 12:46:36 2036
    SHA1 hash: 3E0000000000000000000000000000000000000F

After EKU filter, 2 certs were left.
After expiry filter, 2 certs were left.
After Private Key filter, 0 certs were left.
SignTool Error: No certificates were found that met all the given criteria.

証明書が機能しない原因となっているフィルター、または証明書が考慮されていないかどうかを確認できます。

ハッシュやその他の情報を変更しましたが、あなたはアイデアを理解するはずです。お役に立てれば。


1 注意:オプションの配置signtool場所に特に注意してください/debugsignステートメントの後に行く必要があります。
2 注:この/debugオプションは、の一部のバージョンでのみ機能しますsigntool。WDKバージョンにはオプションがありますが、Windows SDKバージョンにはありません。


3
私のために働く。signtoolからの応答を理解しているわけではありませんが、/ debugは必要な処理を行いました。賛成投票!
noelicus

1
このコマンドは、/ debugを配置した場所に特有です。順序を乱すと、エラーが報告されます。
ダニエル

12
/ debugは、signtool.exeの特定のバージョンでのみ機能します。WDKに付属しているものにはこのオプションがあり、Windows SDKにはありません。
Paul Kertscher、2015

3
また、/ debugはsigntoolの記号の後にではなく、その後に置く必要があります。
Denis V

証明書の有効期限が切れていることを示しています。よくやった。
avantprime 2015

36

ほとんどの証明書には有効期限があるため、常に証明書の有効期限を最初に確認してください。私の場合、証明書の有効期限が切れており、プロジェクトをビルドしようとしていました。


2
証明書の有効期限を確認するには、コマンドラインに移動し、証明書がある場所に移動して、と入力しcertutil -dump mycertificate.pfxます。最初のエントリはCAであり、コード署名証明書ではないため、最後のエントリを見てください。
HockeyJ 2017年

23

アプリに署名する必要がない場合は、プロジェクトを右クリックします

Project Properties -> Signing -> uncheck "Sign the ClickOnce Manifest"

この MSの記事を示唆して、

Visual Studio 2008を使用していて、.NET 3.5を対象としていて自動更新を使用している場合は、証明書を変更して新しいバージョンをデプロイするだけです。


1
テスト証明書の作成をクリックして続行することもできます。ありがとう
MindRoasterMir

16

プロジェクトのプロパティの署名タブから「ワンクリックマニフェストに署名する」のチェックを外すだけでエラーが削除され、そこから新しいエラーを作成できます。


15

同じ問題が発生し、証明書の秘密鍵に権限がないことが判明しました。
修正するには-証明書の管理を開き、証明書を見つけて右クリック-> [秘密キーの管理]を選択し、セキュリティの一番上にユーザーが追加されていて、権限が与えられていることを確認してください。


15

私の場合、関連付けようとしている証明書のタイプが間違っています。
私が持っていた「サーバ認証」ではなく「コード署名を」
これは、目的のセクションの証明書スナップで確認できます。
その後は問題なく動作します。


1
はい、つまり、私はこの答えを探すために2日間も苦労していました。
HakanFıstık2017年

14

他の誰かがこれに遭遇した場合:私の問題は、signtool.exeアプリを使用する前に管理者としてコマンドプロンプトを実行する必要があるということでした。その後、すべてが素晴らしく機能します。


11
私の場合は役に立ちませんでした。
bgplaya 2014年

1
VS2015からsigntoolをスクリプトとして実行していますが、同じ問題に直面していました。私はVS2015を管理者として実行し、signtoolがファイルに署名できました>
hamaney

10

コンソールアプリケーションの開発でも同じ問題が発生しましたが、簡単な回避策として、

行きproject properties、その後、

signingタブをクリックして、「ClickOnceマニフェストに署名する」のチェックを外します。

画像の説明:

ここに画像の説明を入力してください

ここに画像の説明を入力してください

参考までに、この1分未満のビデオソリューションもご覧ください。上記の写真はビデオから撮影したものです。


1
テスト証明書の作成をクリックして続行することもできます。ありがとう
MindRoasterMir

9

これを解決/smするには、デフォルトのMy(ローカルユーザー)ストアではなく、フラグを使用してマシンストアを検索するように指定しました。また、を使用してsigntoolのデバッグをオンにすることもできます/debug


8

私はこの問題を抱えていて、以下のどのステップがそれを機能させたのか完全にはわかりませんが、これが誰かを助けることを願っています...これは私がやったことです:

  • ダウンロードした証明書(.crt)を証明書(「個人用」ストアに入れます)にインストールします。.crtファイルを右クリックし、[ 証明書のインストール ] クリックします
  • ファイル名を指定して実行certmgr.mscし、エクスポートプライベートキー、および拡張プロパティを含むPFXファイルとして(あなたは第一工程で使用される方の店で見つかった)証明書を(おそらく不要)
  • プロジェクトに署名するときにエクスポートされた.pfxファイルを使用する
  • signtoolの例:signtool sign /f "c:\mycert.pfx" /p mypassword /d "description" /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetPath)
    パスワードはエクスポート中に提供されたものと同じです

1
ありがとう、これでうまくいきました。.crt証明書をインストールしてからエクスポートする代わりに、Comodoから提供されたファイルを使用していました.pfx
Joshua Pinter

1
どうもありがとうございます!
Bruno Soares

6

私は同じ問題を抱えており、いくつかの回答(ここに投稿されています)を読んでいますが、証明書の有効期限が切れているのがわかりました。

私の開始プロジェクトから新しいものを作成するだけです。次に、証明書マネージャーで期限切れの証明書を削除しました。

これですべてが正常にコンパイルされます。


5

基準には、アカウント名(関連付けられている秘密キー)、ドメイン、会社、有効期限、使用目的などが含まれます。

このエラーが発生する理由はさまざまですが、すでにいくつか挙げられています。もう1つのヒントを次に示します。証明書をインポートするときは、認証局(CA)から受け取っ元のファイルを使用してください。そうしないと、一部のプロパティが失われる可能性があります。

例:最近、同じマシンの別のアカウントからエクスポートされた証明書をインポートしようとしました。証明書は私のアカウントに表示されるようになりましたが、私のアカウントに関連付けられていなかったためsigntool、ファイル名とパスワードを明示的に提供しないと、その認識を拒否しました。これは、ビルドプロセスの一部として行われ、バッチファイルまたはソースファイルに明示的に書き込まれた場合、十分に安全ではない可能性があります。(CAが発行した元の証明書をインポートすることで解決しました。)


4

私は同じ「秘密キーフィルターの後、0証明書が残っています」というメッセージを受け取り、メッセージの意味を理解しようと私の人生の多くを費やしました。

問題は、証明書をWindows証明書ストアに誤ってインストールしたため、コード署名証明書に関連付けられた秘密鍵がなかったことです。

私がやるべきことはこれでした:

  1. FirefoxまたはInternet Explorerを使用して、発行者にリクエストを送信します。これにより、ブラウザーによってサイレントに格納されるプライベートキーが生成されます(Firefoxでは、ほんの一瞬でダイアログが表示されます)。他のブラウザでは機能しない可能性があることに注意してください。

  2. リクエストを送信し、発行者の検証フープとループをジャンプし、山羊を犠牲にし、神に祈り、偉大な祖父母からの署名された声明を提出します。

  3. 証明書(.crt)をダウンロードして、同じブラウザーにインポートします。これで、ブラウザに秘密鍵と証明書の両方が提供されます

  4. ブラウザーから証明書をPersonal Information Exchange(.p12)ファイルとしてエクスポートします。このファイルを保護するためにパスワードを入力するよう求められます。

  5. .p12ファイルのバックアップコピーを保存します。

  6. 証明書マネージャー(certmgr.msc)を実行し、個人証明書ストアを右クリックして、[ すべてのタスク/インポート...]を選択し、.p12ファイルをWindowsにインポートします。ファイルを保護するために使用したパスワードを求められます。この時点で、セキュリティ要件に応じて、キーをエクスポート可能としてマークして、Windowsストアからコピーを復元できるようにすることができます。バッチスクリプトを中断する場合は、使用前にパスワードが必要であることをマークすることもできます。

  7. signtoolを正常に実行し、安堵のため息をつき、悪いエラーメッセージと不十分または不足しているドキュメントのためにあなたの人生のどれだけを無駄にしているかを考えます。


2

私にもこの問題がありました。SDKとVisual Studioの署名を使用しましたが、どこにでも「指定されたすべての条件を満たす証明書は見つかりませんでした」というメッセージが表示されました。

解決策:「秘密鍵フィルターの後」:「0左」がオプションsigntool sign / debug ...で表示される場合、PCのCA自体がストアにないことが原因であることに注意してください。これを解決するには、最初にCA(私の場合は.crtファイル)をインストールしてから、もう一度署名を実行します。今すぐ機能するはずです!

Signtoolは、同じPCが所有し、所有されているCAでのみ使用できます。


別のPCから取得したCAでsigntoolを使用しても問題ありませんでした。
bparker 2018年

2

私の問題は、signtoolのオプションが理解できなかったということです。証明書と一致しないものを/ nオプションに指定しました。私がそれを削除したとき、それは文句を言うのをやめました。


2

コンピュータ名が変更され、証明書の有効期限が切れたという同様の問題がありました。新しいテスト証明書を作成することで、この問題を解決できました。

Visual Studioで、ソリューションエクスプローラーのプロジェクトを右クリックします。プロパティを選択します。[サインインプロパティ]ウィンドウを選択します。「テスト証明書の作成...」をクリックします。テスト証明書のパスワード情報を入力し、[OK]をクリックします。


2

/ debugを使用すると、「秘密キーフィルター後、証明書が0個残りました」というメッセージが表示された場合、pfxファイルに秘密キーがないことが原因の1つである可能性があります。インストールした証明書をpfxファイルにエクスポートする場合は、チェックボックスをオンにして秘密キーも含めるようにしてください。


1

コンパイルを開始project propertiesするFirm前に、すべてのフィールドに移動してチェックを外します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.