9

HttpListener私はMonoTouchを使用して非常に単純なWebサーバーを実装しました。すべてが正常に機能しています。次に、HTTPSサポートを追加する必要があります。私はからの手順に従ってみました

httpsをサポートするHttplistener

しかし、MonoTouchで証明書を設定する場所がわかりません。プレフィックス「https:// *:443」を追加するだけでは、接続は不可能であり、例外はスローされないため、役に立ちません。

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

どうすればMonoTouchでそれを行うことができますか?

4

1 に答える 1

7

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

HttpCfg.exe解決策は、Monoのソースコードを調べて、ツールがアプリケーション用にセットアップすることを期待していることを確認することです。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;

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

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

于 2012-11-14T19:17:32.633 に答える