だから、私は私が持っているpfxファイルでWindows 8 appxパッケージに署名しようとしています。私はそのようなコマンドを使っています:
signtool.exe sign /fd sha256 /f "key.pfx" "app.appx"
そしてこれから、私は得ます:
SignToolエラー:指定された基準をすべて満たす証明書が見つかりませんでした。
私が満たしていないのはどの「基準」ですか?これはテスト専用であるため、これらは自己署名証明書です。キーをインポートしてから署名しようとしましたが、常に同じエラーが発生します。これをどのように修正しますか?
Visual Studioからこのエラーが発生した場合、それは元々開発されたコンピューターに一致するように署名証明書が設定されていたためです。
これを確認するには、プロジェクトのプロパティ>署名タブを開き、証明書の詳細を確認します。
署名を無効にするには、[ClickOnceマニフェストに署名する]をオフにします。
このオプションをオフにしたくない場合は、証明書をインストールする必要があります。
/ 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
は/debug
オプションがどこに置かれているかについて特定です。それはsign
ステートメントの後に行く必要があります。
2 また、注意してください。/debug
オプションは、一部のバージョンのsigntool
でのみ機能します。 WDKバージョンにはオプションがありますが、Windows SDKバージョンにはありません。
ほとんどの証明書には有効期限があるため、必ず最初に証明書の有効期限を確認してください。私の場合、証明書の有効期限が切れており、私はプロジェクトを構築しようとしていました。
プロジェクトプロパティの[署名]タブから[一度クリックしたマニフェストに署名する]チェックボックスをオフにすると、エラーが削除され、そこから新しいものを作成できます。
同じ問題を抱えて、証明書の秘密鍵には許可がないことがわかりました。
修正するには - 証明書管理を開き、証明書を見つけて右クリック - >秘密鍵の管理を選択してからセキュリティを確認し、ユーザーが追加され許可を与えられていることを確認します。
他の誰かがこれに遭遇した場合:私の問題は、私がsigntool.exeアプリを使用する前にコマンドプロンプトを管理者として実行する必要があるということでした。それからすべてが素晴らしく機能します。
私の場合、関連付けようとしている証明書の種類が間違っています。
"コード認証" ではなく、 "サーバー認証" を使用しました。
これは、「目的」セクションの「証明書スナップ」で確認できます。
その後、それはちょうどうまく機能します。
アプリに署名する必要がない場合は、プロジェクトを右クリックしてください。
Project Properties -> Signing -> uncheck Sign the ClickOnce Manifest
これ MSの記事も示唆しているように、
Visual Studio 2008を使用していて.NET 3.5をターゲットにしていて自動更新を使用している場合は、証明書を変更して新しいバージョンを展開するだけです。
私はこの問題を抱えていて、以下のどのステップがうまくいったか完全にはわからないが、これが他の誰かに役立つことを願っています...これが私がしたことです:
certmgr.msc
および export 証明書(最初のステップで使用したストアのいずれかにあります)を実行します(おそらく不要)。signtool sign /f "c:\mycert.pfx" /p mypassword /d "description" /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetPath)
私はこれを解決するために、デフォルトのMy(Local User)ストアの代わりに/sm
フラグを使用してマシンストアを検索するように指定しました。また、/debug
を使用してsigntoolのデバッグを有効にすることもできます。
私は同じ問題を抱えていて、いくつかの答え(ここに掲載されています)を読んでいて、証明書の有効期限が切れているのを見ました。
私のスタートプロジェクトから新しいものを作成するだけです。その後、証明書マネージャで期限切れの証明書を削除しました。
今すぐすべてが正常にコンパイルされます。
基準には、アカウント名(秘密キーが関連付けられている)、ドメイン、会社、有効期限、使用目的などが含まれます。
このエラーが発生するのには、さまざまな原因が考えられますが、既にいくつかリストされています。証明書をインポートするときは、必ず認証局(CA)から受け取った元のファイルを使用しないでください。そうしないと、一部のプロパティが失われる可能性があります。
例:最近、同じマシン上の異なるアカウントからエクスポートされた証明書をインポートしようとしました。証明書が私のアカウントに表示されるようになりましたが、私のアカウントに関連付けられていなかったため、signtool
はファイル名とパスワードを明示的に指定せずにそれを認識することを拒否しました。ビルドプロセスの一部として行われ、バッチファイルまたはソースファイルに明示的に書き出されると、これは十分に安全ではないかもしれません。 (元のCA発行の証明書をインポートすることで解決しました。)
私の問題は、私がsigntoolのオプションを理解していなかったということでした。証明書と一致しないもので/ nオプションを指定しました。私がそれを取り除いたとき、それは不満を止めました。
私もこの問題を抱えています、たくさん試してみました。 SDKとVisual Studioの署名を使用しましたが、どこにでも「指定されたすべての条件を満たす証明書が見つかりません」と表示されました。
解決策: "秘密鍵フィルタの後": '0 left'がオプションsigntool sign/debug ...と一緒に表示される場合、原因はPCにストア自体にCAがないことです。これを解決するには、最初にCA(私の場合は.crtファイル)をインストールしてから、もう一度サインを実行します。今はうまくいくはずです!
Signtoolは、要求され、同じPCが所有するCAでのみ使用できます。
私のコンピュータ名が変更され、証明書の有効期限が切れた同様の問題がありました。私は新しいテスト証明書を作成することによってこの問題を解決することができました。
Visual Studioのソリューションエクスプローラーでプロジェクトを右クリックします。プロパティを選択します。プロパティウィンドウでサインインを選択します。 「テスト証明書の作成」をクリックしてください。テスト証明書のパスワード情報を入力して[OK]をクリックします。
/ debugを使用すると、 "Private Key filterの後に0個の証明書が残っています。"というメッセージが表示された場合、pfxファイルにプライベートキーがないことが原因の可能性があります。インストールした証明書をpfxファイルにエクスポートするときは、チェックボックスを有効にして秘密キーも含めるようにしてください。
project properties
に行き、コンパイルを開始する前にFirm
からすべてのフィールドのチェックを外してください
私は同じ「 秘密鍵フィルタの後、0個の証明書が残っていました 」というメッセージを受け取り、そのメッセージが何を意味するのか理解しようとして私の人生の多くを費やしました。
問題は、証明書をWindowsの証明書ストアに誤ってインストールしたため、コード署名証明書に関連付けられた秘密キーが存在しなかったことです。
私がすべきことはこれでした:
FirefoxまたはInternet Explorerを使用して、発行者にリクエストを送信してください。これはブラウザによって静かに保存されるPRIVATE KEYを生成します(Firefoxではダイアログがほんの一瞬だけ表示されます)。他のブラウザでは動作しないかもしれないことに注意してください。あなたの人生はそれらが機能するかどうかを知るには短すぎます。
リクエストを送信し、発行者の検証フープとループを飛び越え、ヤギを生け贄に捧げ、神々に祈り、あなたの祖父母から署名された陳述を提出するなど。
証明書(.crt)をダウンロードして 同じブラウザ にインポートします。 ブラウザは秘密鍵と証明書の両方を持っています 。
ブラウザからPersonal Information Exchange(.p12)ファイルとして証明書をエクスポートします。このファイルを保護するためにパスワードを入力するように求められます。
.p12ファイルのバックアップコピーを保存してください。
証明書マネージャ(certmgr.msc)を実行し、 Personal 証明書ストアを右クリックし、 All Tasks/Import ... を選択して、.p12ファイルをWindowsにインポートします。ファイルを保護するために使用したパスワードの入力を求められます。この時点で、セキュリティ要件に応じて、キーをエクスポート可能としてマークして、Windowsストアからコピーを復元できます。バッチスクリプトを中断したい場合は、使用前にパスワードが必要であるとマークすることもできます。
Signtoolを首尾よく実行し、安堵のため息をついて、そして悪いエラーメッセージと悪いまたは足りないドキュメンテーションのためにあなたが人生のどのくらい浪費したかについて熟考してください。