2012-11-14 24 views
8

MonoTouchでHttpListenerを使用する非常に単純なWebサーバーを実装しました。すべてがうまくいきます。 HTTPSサポートを追加する必要があります。私はMonteTouchでHTTPSを使用するHttpListener

Httplistener with https support

からの手順に従うことを試みたが、私はMonoTouchでに証明書を設定する場所を知りません。接頭辞「https:// *:443」を追加するだけでは、接続はできず、例外もスローされないため、役に立ちません。

http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspxによると、これはサーバー証明書( "HttpCfg.exeを使用してサーバー証明書とその他のリスナーオプションを構成できます")を指定する必要があるためです。

MonoTouchでどうすればいいですか?

答えて

7

これは非常に良い質問です。 HttpListenerの場合と同様に、.NETにはツールまたは.configファイル(System.Configurationを使用)が必要で、アプリケーションの構成を微調整する必要があります。多くの場合、APIは同じ目的を達成していますが、必ずしもそうではありません(この場合ではありません)。

解決策は、Monoのソースコードを参照して、HttpCfg.exeツールがアプリケーション用にセットアップされることを期待するものを確認することです。 githubから:

string dirname = Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData); 
string path = Path.Combine (dirname, ".mono"); 
path = Path.Combine (path, "httplistener"); 
string cert_file = Path.Combine (path, String.Format ("{0}.cer", port)); 
if (!File.Exists (cert_file)) 
    return; 
string pvk_file = Path.Combine (path, String.Format ("{0}.pvk", port)); 
if (!File.Exists (pvk_file)) 
    return; 
cert = new X509Certificate2 (cert_file); 
key = PrivateKey.CreateFromFile (pvk_file).RSA; 

だから、解決策は、(それがDocumentsディレクトリの下に指していますので、それが可能だ)同じディレクトリ構造を作成し、(.cerファイル(バイナリDERでエンコードされた証明書)と.pvkファイルをコピーすることですは、ファイル名としてポート番号を使用してmakecertが作成する形式の秘密鍵です)。

これらのファイルを使用すると、HttpListenerを起動し、SSL要求を処理するために必要な証明書と秘密鍵をロードできるようになります。

+1

.cerと .pvkファイルは、<アプリケーションのドキュメントディレクトリ> /。config/.mono/httplistener – zmit

+0

にある必要があります。 MonoTouchでこれが動作していると仮定しますか?私はそれをMonodroidで動かそうとしています。私は適切な場所に証明書とpvkファイルを取得する方法を把握することはできません。私はそれらを「資産」として追加しましたが、それはうまくいかないようです。 :-( – exvance

+0

バンドルから、またはファイルシステムから秘密鍵をダウンロードするのは簡単ではないので、HTTPSの目的を破っているのでしょうか?それとも、HTTPSの目的を破るのですか? – borrrden

関連する問題