web-dev-qa-db-ja.com

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

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

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

これは一部の開発者のマシンで起こり、他のマシンでは起こりません。この問題を解決するために使用されるいくつかの方法は、次のようなものを含みます。

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

エラーメッセージが示すように SN.EXE ユーティリティ(厳密名ツール)を使用して厳密名CSPにキーを登録しようとしましたが、私はVisual Studio 2010に同梱されているバージョンを使用して任意のオプションを指定してツールを実行します。SN.EXEは何もせずにコマンドライン引数を一覧表示するだけです。これは私がどんな引数を指定しても関係ありません。

なぜこれが起こっているのか、そしてそれを修正するための明確なステップは何ですか?私は ClickOnce のインストールとMicrosoftのコード署名をあきらめようとしています。

381
JasonD

私もこの問題に遭遇しました。実行することで問題を解決できました
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によってインストールされた「Developer Command Prompt」が通常正しい場所を含む追加情報を追加します。

あなたの投稿に基づいて

sn -i companyname.pfx VS_KEY_3E185446540E7F7A

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

このsnコマンドを実行する前に、私はそれを右クリックしてインストールを選択することによってpfxを再インストールしました、しかしそれはうまくいきませんでした。それが解決策を提供したのは両方の組み合わせかもしれないので注意すべきこと。

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

435

私はあなたがマルチ開発者環境でうまく構築できるようにする修正を発見しました:

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

私たちのビルドサーバーマシンでアセンブリを署名させるのにはまだ問題があります。同じエラーが表示されますが、sn.exe -iメソッドを使用してもbuildserverの問題は解決されません。

122
MagicBox

私は同じ問題を抱えていたし、店を削除して読んでもうまくいきませんでした。私は次のことをしなければなりませんでした。

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

  • 以下を実行してキーファイルにエクスポートします。

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

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

40
Beached

私はあまりにも早く話しました!再構築するとエラーが発生します。

私はこれがうまくいった - Solution Explorer を右クリックしてプロジェクトから除外します。クリックすべてのファイルを表示して右クリックし、もう一度プロジェクトに含めます。保留中の変更を元に戻します...

何らかの理由でこれは私のためにそれを整理し、比較的痛みがなかった!

34
Mike F

VSCommands 2010(Visual Studio用のプラグイン)はこれを自動的に修正できます - エラーを右クリックしてメニューからApply Fixをクリックします。あなたは Visual Studioのギャラリー からそれを入手することができます。

31
Jarek Kardas

場合によっては、このキーを削除するように​​してくださいあなたはそれをインストールします。それで、以下をしてください:

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

これらすべての解決策(そしてそれ以上のもの)を試した後、私は問題がどこか別の場所にあることを知りました。証明書を購入した後に私と同じ悲惨さを経験する人々のために、私は私の問題に対する解決策を共有します。

動作

'sign'はDLLやEXEにauthenticodeではなく厳密な名前を適用することを理解しています。この場合、signtoolは動作しますが、Visual Studioの 'sign'は機能しません。

理由

過去にVerisignの証明書を使った経験があります。証明書にはKeySpec=2があります。これは、Visual Studioの「署名」機能で使用されます。これらの証明書は、Visual Studioとsigntoolの両方で正常に機能します。

私は今、Comodoから証明書を購入しました。それはコード署名証明書に間違ったKeySpec=1を持っています。つまり、これらの証明書はsigntool(authenticode)では正常に機能しますが、厳密な命名(サインドロップダウン)では機能しません。

解決策

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

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

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


この解決策が将来紛失しないようにするために、解決策2の手順を次に示します。

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

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

26
atlaste

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

9
Romeo

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

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

enter image description here

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

enter image description here

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

  • 「存在しないトークンを参照しようとしました」というエラーメッセージが表示された場合は、無視して次の手順に進みます。

  • [パスワードの変更]ボタンをクリックしてください。

enter image description here

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

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

詳細情報..

7
Bala Kumar

回避策として、私は管理者としてVisual Studio 2010を実行しようとしました、そしてそれは私のために働きました。

これが役に立つことを願っています。

5
user350076

Connect bugレポートの回避策の最初の作者として、このメッセージには2つの変種があります(後で発見しました)。

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

Certmgrを使用してインポートするもう1つの方法は、クリックワンス展開などのコード署名をしている場合です(両方の目的で同じ証明書を使用できます)。

お役に立てれば。

4
PeterI

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

「Visual Studio Project Designerの署名ページを使用したClickOnceマニフェストの署名および厳密な名前のアセンブリの署名、アセンブリの署名」を参照してください。 。

3
Samuel

私の問題は、TFS Build Controllerがネットワークサービスとして実行されていたことと、何らかの理由でVisual Studio Build Hostサービス証明書が使用されていない理由を理解できなかったことです。私は、Visual Studio BuildサービスのIDをより管理しやすいものに変更し、それがTFSサーバーに対する権限を持っていることを確認し、そしてMMCを使用して手動で証明書を追加しました。

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

2
Sentinel

私のWindowsインストールを SSD に移動した後も同じ問題がありました。他の解決策のどれも私のために働きませんでした。

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

2
GoalMaker

コンボボックスでキーファイルを選択し直してパスワードを入力すると、これが役に立ちます。

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

2
user1113289

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

両方のプロジェクトを開いた状態で、新しいものにコピーペーストします。プロジェクトのプロパティに移動して[ビルド]を選択します。私はVisual Studioを開いたり閉じたりしました。また、新しいプロジェクトから削除した後で、古いプロジェクトからコピーして選択しました。プロジェクトをコピーしてビルドしようとしたときに、最初にこの記事の冒頭でエラーを受け取りました。

1
Jason Robertson

私は似たような問題を抱えていましたが、 "厳密な名前のキーファイル" ComboBoxでpfxを選択してパスワードを入力した後、私はまだ似たようなエラーを受けました(コンテナ名の部分なし)

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

また、「Sign the ClickOnceマニフェスト」証明書情報パネルには入力されていませんでした。

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

1
surfen

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

アカウントを自分の管理者アカウントに変更した後は、すべて正常に機能しています。

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

1

これは私の問題を解決しました:あなたのVSプロジェクトを開く

Package.appxmanifestをダブルクリック

[梱包]タブに移動します

証明書の選択をクリック

証明書の設定をクリックします

ファイルから選択し、その団結か他のものを作成したexample.pfxを使用してください

1
Milad Xandi

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

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

0
Hamit YILDIRIM

私は自分自身でこの問題を解決し、Visual Studioプロジェクトの.csprojファイルの次の行を変更しました。

これは 'インポートできない'というエラーを投げました:

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

値をfalseに変更するとエラーは消えました。

0
Kyle Julé