証明書/信頼されたルート証明機関にインポートする必要があり、対応する秘密鍵を持つ証明書があります。
コードからキーに実際にアクセスするには、秘密キーのアクセス許可を設定して、特定の 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 にアクセス許可を設定する方法です。
ルート ストアを信頼し、個人用ではないのはなぜですか?
この特定のストアでこの証明書にアクセスするビルド済みのアセンブリがあるため、証明書を個人ストアに配置するだけではうまくいきません。そのため、信頼されたルート証明書の秘密鍵に信頼のアクセス許可を設定することが不可欠です。