web-dev-qa-db-ja.com

PFXとVisual Studioを使用して厳密な名前でアセンブリに署名する

ここに問題があります。コード署名証明書を購入することにしました。p12形式のGodaddyから証明書を購入しました。

調べたところ、p12とpfxは同じで拡張子が異なることがわかったので、名前をpfxに変更しました。 spcファイルとp7cファイルも入手しましたが、それらをどうするかわかりません。

とにかく、私は自分の証明書をVisual Studio 2013ソリューションに追加しようとしました。

  • 最初にパスワードプロンプトが表示され、パスワードを入力するとエラーメッセージが表示される

    "An attempt was made to reference a token that does not exist."
    
  • Pfxをインストールする2番目の試行で、プロンプトやエラーメッセージはまったく表示されませんが、ビルドするとエラーが表示されます

    "Cannot import the following key file: something.pfx 
    The key file may be password protected.
    To correct this, try to import the certificate again or 
    manually install the certificate to the Strong Name CSP with the following
    key container name: VS_KEY_33FA18307607ECFB"
    
  • だから私はそれを使ってやっています

    sn -i something.pfx VS_KEY_33FA18307607ECFB
    

    これはエラーなしで完了しますが、もう一度ビルドしようとすると、同じコンテナ名でまったく同じエラーが発生します。

    "Cannot import the following key file: something.pfx ....
    

Goddadyサポートが代替として推奨するsigntoolを使用しようとしましたが、議会に署名しますが、必要な強力な命名を提供していません。

私はまた、証明書をpfxからsnkに抽出しようとしました

    sn -p something.pfx key.snk

遅延署名を選択しましたが、プロジェクトはさらに多くのエラーで再構築されませんでした。

修辞的な質問:なぜこれがそんなに難しいのですか?多くの人がこれに問題を抱えています。

誰か助けてくれますか?

24
Ares

同じ問題が発生しました この記事 ベーコンを保存しました!

KeySpecを2(AT_SIGNATURE)に設定してコード署名証明書を再作成するだけで、VS(2013)がアセンブリをインポートしてエラーなしで署名します。 :-D

これはあなたのシナリオとは少し違うと思いますが、これが何らかの形で役立つことを願っています...

23
SmithPlatts

私はComodo(.p12)証明書を所有していて、同じ問題に遭遇し、@ SmithPlattsの回答と@Aresのコメントに基づいて解決しました。証明書に精通していない人(私のような)向けの詳細なウォークスルーを以下に示します。

  1. 管理者権限でコマンドプロンプトを開きます。
  2. コマンドを入力:certutil -importPFX "<certFilepath>\<certFilename>.p12" AT_SIGNATURE(AT_SIGNATUREは、[。p12ファイルを右クリック]する代わりにこれを機能させるものです-> 'Install PFX')
  3. 任意のパスワードを入力します。
  4. Mmc.exeを管理者特権で開き、[ファイル]-> [スナップインの追加と削除...]をクリックします。
  5. 「証明書」を追加
  6. 「コンピュータアカウント」を選択します
  7. Console Root/Certificates(Local Computer)/ Personal/Certificatesで、手順2でインストールした証明書を見つけます。
  8. [証明書]/[すべてのタスク]/[エクスポート]を右クリックし、[次へ]/[はい、秘密鍵をエクスポートします]
  9. 「個人情報交換-PKCS#12(.PFX)」に移動します
  10. [すべての証明書を含める...]をオフにします。重要!チェックすると、VSは署名時に「証明書と復号化用の秘密鍵が見つかりません」というメッセージを生成します。
  11. [すべての拡張プロパティをエクスポートする]をオンにします(オプション)。
  12. 今後、再エクスポートする予定がない場合は、[秘密キーを削除...]をオンにできます。
  13. パスワードにチェックを入れ、ステップ3のパスワードを入力します。
  14. エクスポートされた(.pfx)証明書のファイルパスとファイル名を選択します。
  15. エクスポートされた.pfxファイルを使用して、VSからアセンブリ/プロジェクトに署名します。
  16. プロジェクトをビルドして、pfxが正しく機能することを確認します。
23
GDS

この問題が発生したため、管理者としてVisual Studioを開いて修正しました。

9
Matthew Green

Opensslで-keysigオプションを使用してPFXを再作成するこの問題を解決しました。

openssl pkcs12 -export -out "MyPfx.pfx" -keysig -inkey "MyKey.key" -in "MyCer.cer"
3
Fabio Landi

この問題、およびおそらく人々が言及した関連する問題に遭遇していました。

大規模なIT部門内の開発部門の企業環境で作業しているため、ローカル管理者の完全な権限がありません。そのため、VSを実行すると、ローカル管理者として実行されません。

VS 2013/2015を実行するショートカットを設定すると、アセンブリを歌うときに発生していた問題が消えました。

これも、誰かの時間を節約するだけでなく、髪の毛を根元から引き出すことからも節約できます。

1
Steve