質問

C#アプリケーションでHttpListenerクラスを使用して、ミニWebサーバーでSSL経由でコンテンツを提供しようとしています。これを行うには、httpcfgツールを使用する必要があります。公開キーと秘密キーのペアを含む.pfxファイルがあります。このキーペアをmmcを使用してローカルマシンストアに手動でインポートすると、すべて正常に機能します。ただし、X509Storeクラスを使用してこのキーペアをプログラムでインポートすると、ミニWebサーバーに接続できません。どちらの方法でも、証明書はLocalMachineのMYストアにインポートされることに注意してください。奇妙なことに、プログラムでインポートした後、mmcで証明書を表示できます。表示すると、この証明書で秘密キーも使用できることがUIに示されます。

少し掘り下げて、キーペアを手動でインポートすると、 C:\ Documents and Settings \ All Users \ Application Data \ Microsoft \ Crypto \ RSA \ MachineKeysに新しいファイルが表示されることがわかりますが、プログラムでインポートすると表示されません。関連する注意事項として、手動でインポートした証明書を削除しても、対応する秘密鍵ファイルは前述のディレクトリから削除されません。

最後に、私の質問は次のとおりです。証明書をストアにプログラムで追加すると、秘密キーはどこに保存され、HttpListenerクラス(HttpApi)にアクセスできないのですか?

この質問は少し関連していますが、許可はすべて同じWindowsユーザーとして行われているため、許可は問題ではないと思います。 .NETからX.509証明書の秘密鍵ファイルに読み取り許可を設定する方法

役に立ちましたか?

解決

わかりました、わかりました。証明書オブジェクトのキーストレージパラメータに関係していました。この問題が発生した場合は、 X509KeyStorageFlags.PersistKeySet および X509KeyStorageFlags.MachineKeySet <を使用して、ストアに追加する X509Certificate2 オブジェクトを必ず作成してください。 / code>フラグ。これにより、 HttpApi で必要なマシンキーセットの場所に秘密キーが保持されます( HttpListener はこれをラップします)。

他のヒント

これは双方向SSLですか?その場合、マシンで生成されたSSL証明書要求ファイルを送信しましたか?この証明書要求ファイルはSSLの作成に使用され、それらが一緒に公開秘密鍵ペアを形成します。

また、Webアプリの実行に使用されているユーザーアカウントに証明書権限を割り当てようとしましたか?これを行うには、Microsoft WSE 3.0ツールを使用します。

質問に対する正確な答えではありませんが、他の人がこの道をたどるのを参照するためにここにあります:

こちらは、サンプルを提供するMSチャットへのリンクですhttpcfgの機能を実行するC#コード。これにより、展開時にツールが不要になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top