7

証明書/信頼されたルート証明機関にインポートする必要があり、対応する秘密鍵を持つ証明書があります。

コードからキーに実際にアクセスするには、秘密キーのアクセス許可を設定して、特定の IIS アプリケーション プールへのフル アクセスを許可する必要があります。私はそれを完全に理解していますが、問題は、これは個人証明書にのみ設定でき、信頼されたルート証明書には設定できないことです.

同じ証明書を個人ストアに追加しようとしましたが、次のコードは壊れません:

X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);

foreach (X509Certificate2 cert in store.Certificates)
{
    if (cert.HasPrivateKey)
    {
        // access private key here
    }
}

store.Close();

StoreName.Rootに変更すると、個人ストアの証明書に対するアクセス許可の設定が機能しStoreName.Myます。そこにアクセスできます。しかし、ルートでアクセスできません。それはただ言う:

キーセットが存在しません

助言がありますか?

追加情報

アプリケーション プール ID をローカル システム(マシンに対する完全なアクセス許可を持つ) に設定すると、秘密キーに正常にアクセスできます。したがって、主な問題は、信頼されたルート ストア内の証明書の秘密キーにアクセスできるように、アプリケーション プール ID にアクセス許可を設定する方法です。

ルート ストアを信頼し、個人用ではないのはなぜですか?
この特定のストアでこの証明書にアクセスするビルド済みのアセンブリがあるため、証明書を個人ストアに配置するだけではうまくいきません。そのため、信頼されたルート証明書の秘密鍵に信頼のアクセス許可を設定することが不可欠です。

4

3 に答える 3

7

信頼されたルート証明機関でこれを試したことはありませんが、他の証明書ストアで行う最も簡単な方法は、証明書を個人用ストアにドラッグ アンド ドロップし、権限を設定してからドラッグ アンド ドロップで元に戻すことです。オリジナル証明書ストア。あなたの場合、信頼されたルート証明機関。

証明書 MMC を使用する手順:

  1. 必要なストアに証明書をインポートし、キーをエクスポート可能としてマークします。(これをバイパスして個人ストアに直接インポートできるかもしれませんが、私は試していません。)
  2. インポートした証明書を個人ストアにドラッグ アンド ドロップします。
  3. 個人ストアで証明書を右クリックし、コンテキスト メニューで [すべてのタスク] をクリックし、サブメニューで [秘密鍵の管理] をクリックします。ステップ 1 で参照したように、アプリ プールに従って適切なアクセス許可を設定します。
  4. アクセス許可が設定されたら、証明書を元のストア (この場合は信頼されたルート証明機関) にドラッグ アンド ドロップします。
于 2012-05-15T04:24:43.563 に答える
4

解決

個人証明書ストア以外の証明書に信頼アクセス許可を設定することは可能ですが、MMC 経由でアクセス許可を設定することはできません。少なくともその店に直接ではありません。受け入れられた回答は、証明書を移動して同じ結果を達成する単純化されたアプローチを示しています。

こうしなきゃ…

ツールの入手

  1. Microsoft からWF_WCF_Samplesファイルを入手します。これは自己解凍アーカイブですが、すべてを解凍する必要はありません。そう...
  2. 任意のアーカイバー ツールでファイルを開き、FindPrivateKeyソリューション/プロジェクトのみを抽出します。
  3. Visual Studio で開き、コンパイルします。

秘密鍵を見つける

  1. MMC を開き、証明書スナップインを追加します。追加するときは、必ず [コンピューター] と [ローカル コンピューター] を選択してください。

  2. 秘密鍵付きの証明書があるストアを選択します。

  3. 秘密鍵を開き、その拇印をコピーします

  4. コマンド プロンプトを開き、FindPrivateKeyツールをコンパイルしたフォルダーに移動します。

  5. このコマンドを入力してください

    FindPrivateKey YourStoreName LocalMachine -t "ThumbprintWithSpaces" -a
    ie.
    FindPrivateKey ルート LocalMachine -t "83 45 22 ..." -a

  6. パスとともにファイルをコピーします (2 行にまたがるため、メモ帳にコピーして連結します)。

証明書の信頼を付与する

  1. コマンド プロンプトを開き、次のように入力します。

    icacls "FullPathOfYourPrivateKey" /grant:r "UserFQDN":f
    ie.
    icacls "c:\ProgramData..." /grant:r "IIS AppPool\ASP.NET v4.0":f

  2. 終わり。

これにより、証明書の秘密キーの完全な信頼がユーザーに付与されます (私の場合、上記のアプリケーション プール ID) ため、キーを使用してデータに署名したり、必要なことを行うことができます。

完全な権限が必要ない場合は、コロンの後の最後の部分を簡単に変更できます。さまざまな設定ができるので、icacls コマンドのヘルプを確認することをお勧めします。

于 2012-05-14T15:19:56.583 に答える
3

Windows Server 2003を使用している場合、証明書の下に秘密キーの管理タスクが表示されないことに気付くでしょう。

Microsoft WSE 2.0をマシンにインストールすると、 X509 Certificate Toolというツールを使用できます。証明書を検索するだけで、ローカル マシン/パーソナル ストアにある可能性が高くなります (またはあるはずです)。

注: 証明書が現在のユーザー/個人ストア (多くの場合デフォルト) にある場合、現在ログインしているユーザーのみがアクセスできます。つまり、Web サーバーにアクセスさせたい場合はアクセスできません。 AppPool へのアクセス許可を変更せずに。

秘密鍵へのアクセス許可を非常に簡単に変更できるはずです。デフォルトでは、Web サーバー上の AppPool はNETWORK SERVICEを使用して Web アプリケーションを実行します。そのため、セキュリティに NETWORK SERVICE を追加するだけで、デフォルトで、BouncyCastle などが秘密鍵を読み取ってドキュメントに署名できるようにするのに十分な読み取りおよび読み取り / 実行アクセス許可が設定されます。

お役に立てれば。

ここに画像の説明を入力

于 2012-09-26T14:12:28.690 に答える