2009-05-01 7 views
12

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

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

最終的に私の質問は次のとおりです。私はプログラムにストアに証明書を追加すると、秘密鍵はどこに格納されていますか、なぜHttpListenerクラス(HttpApi)にアクセスできないのですか?この質問は少し関連していることを

注意が、私はこれがすべて同じWindowsユーザーとして行われているので、許認可が問題だとは思わない: How to set read permission on the private key file of X.509 certificate from .NET

答えて

28

わかりました。これは、証明書オブジェクトの主要な記憶域パラメータと関係していました。この問題に遭遇する他の人は、X509KeyStorageFlags.PersistKeySetX509KeyStorageFlags.MachineKeySetフラグを使用して、ストアに追加するオブジェクトをX509Certificate2に構成してください。これにより、秘密鍵は、HttpApiHttpListenerがこれをラップする)によって必要とされるマシンキーセットの場所に保持されます。

+0

回答としてマークしてください – Developer

+0

残念ながら私は48時間待つ必要があります。その時点で私はそれをするのを忘れるでしょう。 :( – Jason

+6

"X509KeyStorageFlags.MachineKeySet&X509KeyStorageFlags.PersistKeySet"が動作していなかった理由を調べるのに約30分かかりました。もちろん、 "X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet"である必要があります。 –

0

が、これは2ウェイのSSLますか?そうであれば、あなたのマシンで生成されたSSL証明書要求ファイルを送信しましたか?この証明書要求ファイルはSSLの作成に使用され、共に公開秘密鍵ペアを形成します。

また、Webアプリケーションの実行に使用されているユーザーアカウントの証明書のアクセス許可を割り当ててみましたか?これを行うには、Microsoft WSE 3.0ツールを使用します。

+0

私はちょうど現時点でテストするために自己生成キーペアを使用していますので、この証明書リクエストが含まれています。私はこのすべてが同じユーザー(証明書のインポートとWebサーバーの実行)として実行されているので、関連する権限はまだありません。 IISや何か関係するものはありません。 – Jason

+0

これは、 "関連する証明書要求はありません"と読みます。 – Jason

0

ない正確にあなたの質問への答えが、ここでは他の人がこの道を下って行くの参照のために:

Hereは、このように必要性を排除し、Httpcfgのが何を行うには、サンプルのC#コードを与えるMSチャットへのリンクです展開時のツールについて

+0

ありがとう、それは良いリンクです。私は簡単にそれを調べましたが、URLACL_SET構造体を使用する方法と、シナリオでSSL構成を管理するために必要なSSL_SET構造体を使用する方法のみに入ります。残念ながら、SSL_SET構造体はかなり複雑ですので、作業が面倒になり、httpcfg実行ファイルがより便利になりました。 – Jason

関連する問題