2016-12-07 9 views
0

アイデンティティ・サーバー用の証明書を設定しようとしていますが、「秘密鍵へのアクセス権がありません」というエラーが表示されます。 がidentityserverからそれを取ると、次のコードは、アクセス拒否エラーアイデンティティ・サーバーが自己署名証明書をロードできない

static X509Certificate2 GetCertificateFromDisk() 
{ 
    using (var stream = File.Open(@"patht-to-pfx", FileMode.Open)) 
    { 
     var cert = new X509Certificate2(ReadStream(stream), "password", X509KeyStorageFlags.MachineKeySet); 
     return cert; 
    } 
} 

管理者としてのコードを実行している場合は、自分のアカウントの下でそれを実行している場合、それは正常に動作し、ではないがスローされます。最終的に私はlocalsystemとしてそれを実行したい。

ローカルコンピュータ証明書ストアの証明書秘密鍵のアクセス許可の下に「Everyone」を追加しました。 ...まだ例外があります。

ここで何が間違っていますか?以下の答えでCryptoGuyからそれ

更新

大きなヒントに夢中行きます。 重要な注意:ファイルを開くことが正しくないストアで証明書を取得するときにIdentityServ3がまだ失敗しました。それは、Keith Sparkjoy's tool SerfCertを使用して証明書を再生成することでした。私の以前の証明書はpowershellを使って生成されました。したがって、PowerShell証明書には秘密鍵のアクセス可能性に関する問題があることに注意してください。ツールのキースのおかげで!

+0

標準ユーザーには、ローカルコンピュータの証明書ストアに書き込み権限がありません。適切な(管理)アカウントでコードを実行して、LocalMachineストアを変更します。 – Crypt32

+0

@CryptoGuyしかし、私は読み取りアクセスが必要です、私のソフトウェアは、トラフィックを暗号化できるようにするためには、この証明書を開く必要があります。私は管理者アカウントの下でそれを実行することができません、それは安全ではないでしょう.. – Arjan

+0

ドキュメントは、MMC(証明書のプライベートキーオプションを管理する)で権限を追加するとこれを許可するはずですが、うまくいかないようです... https: //technet.microsoft.com/en-us/itpro/mdop/appv-v4/how-to-modify-private-key-permissions-to-support-management-server-or--streaming-server – Arjan

答えて

0

考慮すべき点はほとんどありません。

1)ローカルマシンストアへの書き込みアクセスを実行しています。 X509KeyStorageFlags.MachineKeySetローカルマシンストアに秘密鍵を保存しようとします。したがって、そこに書き込むには管理者権限が必要です。あなたは

ドキュメントは、MMCに権限を追加する(これを許可する必要があります)証明書の秘密鍵・オプションを管理することを言います)読み取り専用アクセス

2を実行するには、このフラグを削除する必要がありますが、それはいないようです

すでに保存されている秘密鍵で動作します。

実際に行うべきことは、ローカルマシンストアに証明書と秘密鍵をインポートし、インストールされた証明書を参照するようにアプリケーションを構成することです。

3)アプリケーションが権限のないアカウントで実行され、そのキーを共有する必要がない場合は、現在のユーザーストアを使用する必要があります。

+0

私のアプリはidentityserver3です私は鍵が必要なので、私はローカルマシンが必要です。私は[Keith SparkjoyのSelfCert](https://www.pluralsight.com/blog/software-development/selfcert-create-a-self-signed-certificate-interactively-gu-or-programmatically-in- net)..そして今それは動作します:(私はpowershellを使用して以前の証明書を生成しました。あなたの助けをありがとう – Arjan

+0

証明書に問題があるのは、PowerShellの 'New-SelfSignedCertificate'コマンドレットが、キーストレージプロバイダを使って秘密鍵を格納するということです。不幸にも、.NETはCNG/KSPをうまくサポートしません。 – Crypt32

関連する問題