キーファイル「blah.pfx」をインポートできません-エラー「キーファイルはパスワードで保護されている可能性があります」


392

Visual Studio 2008プロジェクトをVisual Studio 2010にアップグレードしました。すべてのアセンブリは、Verisignコード署名証明書を使用して強力に署名されました。アップグレード以降、次のエラーが継続的に発生します。

次のキーファイルをインポートできません:companyname.pfx。鍵ファイルはパスワードで保護されている場合があります。これを修正するには、証明書を再度インポートするか、証明書を厳密な名前のCSPに次のキーコンテナー名で手動でインストールしてください:VS_KEY_3E185446540E7F7A

これは、一部の開発者マシンでは発生しますが、他のマシンでは発生しません。これを修正するために使用されていたいくつかの方法は、次のとおりです。

  • Windowsエクスプローラーからのキーファイルの再インストール(PFXファイルを右クリックして[インストール]をクリック)
  • 新しいマシンに初めてVisual Studio 2010をインストールすると、プロジェクトを初めて開いたときにパスワードの入力を求められ、その後機能します。Visual Studio 2008からアップグレードしたマシンでは、このオプションは利用できません。

エラーメッセージが示唆するように、SN.EXEユーティリティ(Strong Name Tool)を使用してキーを厳密名CSPに登録しようとしましたが、Visual Studio 2010に付属するバージョンを使用してオプションを指定してツールを実行すると、SN .EXEは、何もせずにコマンドライン引数をリストするだけです。これは、どの引数を指定しても発生します。

なぜこれが起こっているのですか?それを修正する明確な手順は何ですか?ClickOnceのインストールとMicrosoftのコード署名をあきらめるところです。

回答:


447

私もこの問題に遭遇していました。実行することで問題を解決することができました
sn -i <KeyFile> <ContainerName>名前付きコンテナーにキーペアをインストールします)。

sn通常、Windows SDKの一部としてインストールされます。例えばC:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe。ほとんどの場合、この場所は標準環境の検索パス上にありません。ただし、Visual Studioによってインストールされる「開発者コマンドプロンプト」は、通常は正しい場所を含む追加情報を追加します。

あなたの投稿は次のようになります

sn -i companyname.pfx VS_KEY_3E185446540E7F7A

これは、PFXファイルの場所から実行する必要があります。ソリューションがVS 2010に読み込まれている場合は、ソリューションエクスプローラーでpfxファイルを右クリックし、[コマンドプロンプトを開く]を選択すると、.net 2010コマンドプロンプトツールが起動します。正しいディレクトリ。

このsnコマンドを実行する前に、pfxを右クリックしてインストールを選択しましたが、機能しませんでした。ソリューションを提供したのは両方の組み合わせである可能性があるため、注意する必要があります。

これが問題の解決に役立つことを願っています。


5
ブランドンに感謝します-はい、これは、キーファイルの「一種の」手動での再インストールのように、問題を解決します。問題は、キーファイルをチェックインするとすぐに、このチェックインされたキーファイルの最新情​​報を取得する他のすべてのユーザーがこのバグを経験するようになることです。これらのユーザーのいずれかが「修正」をチェックインして最新の状態になったら、私のマシンは再び壊れてしまいます...など。マイクロソフトはこれについてトラブルチケットを開始し、VS2010チームとVSSチームに割り当てました。
JasonD 2010年

2
面白い。新しいCSPにpfxを追加するとき、私はその問題に遭遇しませんでした。私の知る限りでは、SN -iはpfxファイルを変更しないので、後で何もチェックする必要はありません。ただし、パスワードのリセットなど、pfxファイルを変更すると、pfxファイルが変更されるため、問題が発生します。あなたのソリューションは、他のマシンからのそのpfxファイルでビルドしますか?その場合、pfxファイルは正しく、ビルドの問題が発生しているマシンで正しいCSPに設定されていません。
ブランドンマンチェスター

3
最初はsn -iの部分だけを試しましたが、パスワードは間違っていた(それは正しいものの)と不満がありました。証明書を削除して再インストールすると、sn -i ...が機能しました。基本的に私にとって、両方の手順が必要であることを確認しました。証明書を再インストールしてから、snコマンドを実行します。
Dodgyrabbit

1
VSSとTFSの両方で、sn -iコマンドを実行しても、PFXファイルをチェックアウトしないと機能せず、チェックインすると、ネットワーク上の他の開発者には機能しないことがわかりました。再インストール証明書を試してから、sn -iコマンドを実行する必要があります。オフィスのすべての開発者マシンで作業するために必要です。
JasonD 2010

5
これは私にとってもうまくいきましたが、私は過去にこれをする必要がありませんでした。VSは、ポップアップして各キーのパスワードを要求するだけでした。変化したこと?
Kevin Berridge

126

マルチ開発環境で正常にビルドできるようにするための修正を発見しました。

パスワードを変更する(.pfxを変更させる)代わりに、コンボボックスから.pfxファイルを再選択します。次に、パスワードダイアログを呼び出します。パスワードを入力すると、プロジェクトは正常にビルドされます。すべての開発者は、実際に.pfxファイルを変更することなく、自分のローカルマシンでこれを行うことができます。

ビルドサーバーマシンでアセンブリに署名するための問題がまだ解決していません。そこで同じエラーが発生しますが、sn.exe -iメソッドを使用してもビルドサーバーの問題は解決しません。


5
私たちのTFSビルドサーバーでもこれを機能させるのに失敗してしばらく過ごしましたが、ビルドサービスアカウントとしてではなく、自分としてログオンしていることに気付きました。
Daniel Morritt、2012年

7
現在マークされている回答はマルチ開発環境では機能しないため、これは回答としてマークする必要があります。よくやった。
Daniel McQuiston、2012

同じ.pfxファイルを使用して1つのソリューション内の複数のアセンブリ/プロジェクトに署名している場合、この手順を実行する必要があるのは1つのプロジェクトだけであり、すべてのプロジェクトに適用されます。よく働く。
Jon Comtois、

1
私の問題は、ビルドサーバーがローカルアカウントで実行されていることでした。私はオプションに行って変更しましたが、間違った場所で変更したことに気付かなかったため、もう一度確認して間違いを発見するまで何時間もトラブルシューティングを行う必要がありました。
マフィンマン

3
素晴らしい感謝。ただし、これが2017年の回避策であることを確認して悲しいです。
ビリージェイクオコナー

43

同じ問題が発生し、ストアを削除して読み込めませんでした。私は次のことをしなければなりませんでした。

  • OpenSSLのコピーを入手してください。Windowsご利用いただけます。または、ほとんどすべてが持っているLinuxボックスを使用します。

  • 次のコマンドを実行して、キーファイルにエクスポートします。

    openssl pkcs12 -in certfile.pfx -out backupcertfile.key
    
    openssl pkcs12 -export -out certfiletosignwith.pfx -keysig -in backupcertfile.key
    

次に、プロジェクトのプロパティでPFXファイルを使用できます。


1
ありがとうございました!!これでうまくいったと思います。ここでopensslを入手し
aherrick

実際の証明書をpfxに含めるオプションを追加したいと思います。opensslpkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt -keysig -keyex
Pete

opensslを管理者として実行してください。そうしないと、「「ランダムな状態」を書き込めません」というエラーが表示されます。また、opensslを実行した後も、ブランドンマンチェスターの回答を「sn -i ...」で実行する必要がありました。事。
Lee Richardson、


これが唯一の解決策であり、最終的に私に働きました。ありがとう!
ラディスラフ

37

早く話した!再構築によりエラーが再現されました...

私はこれが機能することを発見しました- ソリューションエクスプローラーで右クリックし、プロジェクトから除外します。[ すべてのファイルを表示 ]をクリックし、右クリックして、もう一度プロジェクトに含めます。保留中の変更を元に戻します...

どういうわけか、これは私のためにそれを整理し、比較的無痛でした!


Takin 'it back、助けにはなりませんでした。プロジェクト設定からpfxが削除されたことに気付きませんでした。答えはStefanからの答えにあると思いますstackoverflow.com/a/14644793/1735721
DennisWelu

この答えは素晴らしいです。それは私にとってはうまくいきました、そしてそれはとても簡単です。
ベン・ルービン

私のために働いた(VS2017 15.7.4)。素晴らしくて迅速な解決策をありがとう。
会議18年

VS2019 16.1.3で私のために働きました。ありがとう!!
JordanTDN

35

場合によっては、インストールする前にこのキーを削除してみてください。したがって、次のようにします。

  1. sn -d VS_XXXX
  2. sn -i mykey.pfx VS_XXX

1
これで解決しました!オブジェクト自体が既に存在するため、インストール自体が失敗しました。
アンディ

私もそれを試しましたが、役に立ちませんでした。証明書自体に何か問題がありますか?
トマーシュ・ザト-モニカを復活させる

2
削除は管理者として行う必要があります。通常のユーザーとして実行すると、「強力な名前のキーコンテナが見つかりません」という誤解を招くエラーが発生します。
astrowalker

ありがとうございます。
Rikin Patel、

31

VSCommands 2010(Visual Studioのプラグイン)は、これを自動的に修正できます。エラーを右クリックして、メニューから[修正の適用]をクリックするだけです。Visual Studioギャラリーから入手できます


1
私はこれがプロバージョン用だと思います-私のライトバージョンにはこのオプションはありません
アダムバトラー

2
2011年9月にダウンロードしたバージョンには、このオプションが付属しています。
ジムは2011年

4
それでもプロライセンスが必要です。
John Baughman、2011年

27

これらのソリューションをすべて試してみたところ、問題が別の場所にあることがわかりました。証明書を購入した後、私と同じ惨めさを経験した人のために、私の問題の解決策を共有します。

動作

「署名」は、DLLまたはEXEにオーセンティケートではなく、厳密な名前を適用することを理解しています。この場合、signtool 機能しますが、Visual Studioの「sign」は機能しません。

理由

過去には、Verisignからの証明書の経験がありました。彼らは持っているKeySpec=2Visual Studioで「記号」機能で使用される-証明書に。これらの証明書は、Visual Studioとsigntoolの両方で正常に機能します。

現在、Comodoから証明書を購入しKeySpec=1ましたが、コード署名証明書に誤りがあります。つまり、これらの証明書はsigntool(authenticode)では正常に機能しますが、厳密な名前(signドロップダウン)では機能しません。

解決

この問題を解決するには2つの方法があります。

  1. を使用して、厳密な名前の個別の証明書を作成しますsn -k [name].snk。snkを使用してアセンブリに署名し、その後、signtoolをコード署名証明書と共に使用して、authenticode署名でDLL / EXEに署名します。これは奇妙に思えますが、厳密な名前はauthenticodeとは異なる目的を持っているため、これは証明書を処理する正しい方法であると私は理解しています(これがどのように機能するかの詳細については、このリンク参照してください)。
  2. として証明書をインポートしますKeySpec=2。この手順の詳細はここにあります

複数の厳密な名前を使用するため、現在オプション(1)を使用していますが、オプション(2)も機能します。


このソリューションが将来失われないようにするために、ソリューション2の手順を次に示します。

  1. 「Certifiates」MMCを使用して、既存のキーセット(KeySpec=1)をPFXファイルにエクスポートします。注:このファイルを安全な場所にバックアップし、本当に安全に再生したい場合は、別のマシンでファイルをインポートできるかどうかをテストしてください。
  2. 暗号ストア(MMCを使用したstlll)から既存の証明書を削除します。
  3. CMDプロンプトを開きます。
  4. 次のコマンドを使用してPFXファイルをインポートします。
    1. certutil -importPFX -user <pfxfilename> AT_SIGNATURE
    2. プロンプトが表示されたら、pfxのパスフレーズを入力します。

これで、のキーセット/証明書が必要KeySpec=2です。必要に応じて、もう一度MMCを使用してこれを別のPFXファイルにエクスポートできます。


あなたの#2ソリューションが私にとって(唯一のコマンドラインツールまたはプロセスを使用せずに)機能した唯一のものでした。ありがとうございます。
Bron Davies、

1
ええ、なぜここでいくつかの解決策が非常に多くの票を投じているのか本当に理解できません。これが実際に私にとって有効な唯一のことであり、CS証明書を購入するほとんどの人が同じ問題を抱えているはずです。まあ...
atlaste 2014

1
これが私にとって有効な唯一の解決策です。また、.pfxファイルには、アセンブリに署名するための証明書チェーン情報を含めることはできません。
Shih-Wen Su

そんな細かい指示ありがとうございます。すべてのステップが正確に説明されています。
ドミトリー

1
最初のソリューションは、ここで理解することが重要です。高価なパスワードで保護された証明書を使用してアセンブリに厳密に署名する必要はまったくありません。これを理解し、単にsnkファイルを使用すれば、この問題は完全になくなります。ここここの警告メモを参照してください。
ポール

11

Visual Studio 2012でこの問題を解決するには、プロジェクト、プロパティ-> [署名]を右クリックし、[ClickOnceマニフェストに署名する]をオフにします。


2
署名の必要がない場合、これは完全な答えです。プロジェクトに署名する必要がなくなります。
トムアンダーソン

8

[厳密な名前のキーファイルを選択]ドロップダウンボックスでKey(pfx)ファイルを再選択し、[パスワードの入力]ポップアップウィンドウでパスワードを入力しました。プロジェクトを保存して、rebuildを実行しました。buildは成功しました。

  • プロジェクトのプロパティを開きます。
  • [署名]セクションをクリックします。
  • 「厳密な名前のキーファイルを選択してください」と表示されている場合は、ドロップダウンボックスから現在の値を再度選択します。

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

  • Visual Studioからパスワードの入力を求められます。入力してください。

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

  • プロジェクトを保存して、再構築します。

  • エラーメッセージが表示された場合:「存在しないトークンを参照しようとしました」無視して、以下の手順を続行します

  • 「パスワードの変更」ボタンをクリックします。

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

  • 3つのボックスすべてに元のパスワードを入力し、[OK]をクリックします。パスワードを変更したい場合(または古いパスワードが複雑さの要件を満たしていない場合)は、ここで変更できます。

  • プロジェクトを保存して、再構築します。

より詳しい情報..


3
このエラー全体は解決するのが完全にランダムであるように見えますが、この解決策は私にとってはうまくいきました。他の誰かがこのページの一番下まで来た場合、私はすべてを試すことのみを提案できます。
DeusExMachina25 2015

6

回避策として、管理者としてVisual Studio 2010を実行してみましたが、うまくいきました。

これがお役に立てば幸いです。


何らかの理由で動作しなくなりました。これが実際に問題を解決したとは信じられませんでした。ありがとうございました!!!
Gerhard Powell

4

接続バグレポートの回避策の元の作成者として、このメッセージには2つの変種があります(後で発見しました)。

1つのバリアントでは、sn.exeを使用して(通常は厳密な名前を付けている場合)、キーを厳密な名前のストアにインポートします。

certmgrを使用してインポートするもう1つのバリアントは、クリックワンス展開などのコード署名を行う場合です(両方の目的で同じ証明書を使用できることに注意してください)。

お役に立てれば。


ええ、マイクロソフトのサポートを利用してそれを試しましたが、これがコード署名のインポートを行う方法です。問題は、チェックインプロセスのソースセーフ中に証明書パスワードが失われることです。しかし、これは本当の問題ではないようです。Widnows 7マシン#1に証明書の詳細を入力し、そのまったく同じファイルを別のマシンに移動して登録すると、登録は機能しますが、ビルドは失敗します。マイクロソフトはまだ調査中です。現時点では、リリース中にコード署名を無効にし、手動で署名する必要がありました。
JasonD

3

何もうまくいきませんでしたが、次に証明書マネージャー(mmc.exe)を調べました。証明書は個人用ストアにインポートされなかったため、手動でインポートしてからプロジェクトをコンパイルしました。

ClickOnceマニフェスト署名およびVisual Studioプロジェクトデザイナーの署名ページを使用した厳密な名前のアセンブリ署名、アセンブリの署名を参照してください。


これにより、SN.exe -i修正を行った後、問題が解決しました。
CodingSamurai 2017

2

コンボボックスでキーファイルを再選択し、パスワードを入力すると、これが容易になります。

ただし、キーファイルが変更されるたびに行う必要があり、問題があるようです。


2

WindowsインストールをSSDに移動した後も同じ問題が発生しました。他の解決策はどれも私にとってはうまくいきませんでした。

私の解決策は、プロジェクトファイルをメモ帳開き、PFXキーへの参照をすべて削除することでした。ファイルを保存したら、Visual Studioでソリューションを開きます。プロジェクト->プロパティ->署名に移動します。[厳密な名前のキーファイルの選択]コンボボックスにリストされているキーは表示されません。コンボボックスでキーを参照して選択し、プロジェクトをビルドできます。


2

私の問題は、TFSビルドコントローラーがネットワークサービスとして実行されていて、なぜかVisual Studioビルドホストサービスの証明書が使用されていない理由が理解できなかったことです。Visual Studio BuildサービスのIDを管理しやすいものに変更し、TFSサーバーに対する権限があることを確認し、MMCを使用して手動で証明書を追加しました。

また、MSBuildがパスワードで保護された証明書をストアに追加できないことも問題でした。


どのストアに追加する必要がありますか?
felickz 2012

私は同じことを行い(また、証明書をこのユーザーのPersonal / Trusted Root / Trusted Pubに追加しました。どちらがそれを修正したかは不明です)、ワークスペースが競合している次のTFSエラーに移動できたので、自分も持っていたことを修正しました新しいビルドエージェントを削除して追加します。
felickz

2

同様の問題がありましたが、「Strong name key file」ComboBoxでpfxを選択してパスワードを入力した後も、同様のエラーが発生しました(コンテナー名の部分なし)。

次のキーファイルをインポートできません:companyname.pfx。鍵ファイルはパスワードで保護されている場合があります。これを修正するには、証明書を再度インポートするか、証明書を手動でインストールしてください

また、「ClickOnceマニフェストに署名する」証明書情報パネルにはデータが入力されていませんでした。

私のpfxで「ファイルから選択...」を実行すると、問題が解決しました。


1

ここで説明するすべての方法は私を助けませんでした。しかし、プロジェクトから* .pfxファイルを削除して、アセンブリの署名に再度追加すると、エラーなしでプロジェクトがビルドされました。理由は説明できません。しかし、それは私のために働いた。


1

これでうまくいきました。Visual Studio 2010で管理者として古いソリューション/プロジェクトを開き、新しいまたはコピーしたソリューション/プロジェクトを開きます。管理者として、新しいVisual Studio 2010ソリューション/プロジェクトでコピーされたpfkファイルを削除し、プロジェクトのプロパティに移動して選択を解除します。

両方のプロジェクトを開いた状態で、新しいプロジェクトに貼り付けをコピーします。プロジェクトのプロパティに移動し、[ビルド]を選択します。Visual Studioを開いて閉じ、新しいプロジェクトから削除した後、古いプロジェクトからコピーして選択する前にビルドしました。この投稿の最初に、プロジェクトをコピーしてビルドしようとしたときにエラーが表示されました。


1

私のシナリオでは、ビルドサービスは、使用してキーをインポートしたのと同じユーザーアカウントを使用していませんでした sn.exe

アカウントを私の管理者アカウントに変更した後、すべてがうまくいきます。


私は同じ問題を抱えていました。あなたのコメントを読んで、私がWindows 7からWindows 10にアップグレードしていて、VSを管理者として実行する必要があるという事実を指摘しました。したがって、VSを管理者として実行しましたが、問題はありませんでした。ポインタの
おかげで

1

これで私の問題が解決しました:VSプロジェクトを開きます

Package.appxmanifestをダブルクリックします

[パッケージ]タブに移動

[証明書を選択]をクリックします

証明書の構成をクリックします

ファイルから選択し、団結またはその他作成されたexample.pfxを使用


0

Visual Studioプロジェクトの.csprojファイルの次の行を変更することで、この問題を解決しました。

これは「インポートできません」エラーをスローしました:

<PropertyGroup>
<SignManifests>true</SignManifests>
</PropertyGroup>

値をfalseに変更すると、エラーはなくなりました。


7
通常、アセンブリは目的のために署名されており、SignManifestを削除すると、一部の環境での展開に問題が発生します。したがって、それは問題の解決策ではありません
Georgy Smirnov

0

同じエラーが発生しました。私の場合、上記のすべてを試しましたが、結果を得ることができませんでした。

私の場合、エラーの原因は、証明書のパスワードが入力されていないか、正しく入力されていないことに最終的に気づきました。パスワードを動的に正しく入力すると、エラーが消えました。成功した


0

残念ながら、ここで述べたアプローチは私にとってはうまくいきませんでした。dockerコンテナーにカップルPFXを登録する必要があり、コマンドラインを介してパスワードを渡す必要があります。

そのsn.exe -i <infile> <container>ため、RSACryptoServiceProviderを使用してC#でコマンドを再開発 しました。ソースとアプリは、SnInstallPfxプロジェクトのGitHubにあります。

SnInstallPfxアプリはPFXキーとそのパスワードを受け入れます。キーコンテナー名(VS_KEY_ *)が自動的に計算され(MSBuildソースコードから借用)、厳密な名前のCSPにインストールされます。

使用法:

SnInstallPfx.exe <pfx_infile> <pfx_password>
// or pass a container name if the default is not what you need (e.g. C++)
SnInstallPfx.exe <pfx_infile> <pfx_password> <container_name>

0

誰がGitLabランナーを使用しているか:

  • ログオンできるアカウントでランナーを実行してください:(./gitlab-runner.exe install --user ".\ENTER-YOUR-USERNAME" --password "ENTER-YOUR-PASSWORD"最初に停止してアンインストールする必要がありました)
  • このガイドに従って、ビルドユーザーにサービスとしてログインする権限を付与します
  • そのようなビルドユーザーでログオン
  • 他の回答で提案されているコマンドを使用してください: sn -i certificate.pfx VS_KEY_C***6

コンテナー名は、GitLabの失敗したジョブ出力(msbuild出力)で提案されます ここに画像の説明を入力してください

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