IISは、SSLを有効にする際にHTTPSのポート44300にデフォルトでデフォルトを発揮する

StackOverflow https://stackoverflow.com/questions/3690901

質問

最初にSSLを有効にするためにIIS Expressを設定したとき、ポートを44300にデフォルトします。残念ながら、私が自分のサイトにアクセスしようとすると https://localhost/ ポート番号44300を使用しない限り、それは機能しません - https://localhost:44300/.

リンクは次のものを使用して生成されます。

<%= Html.ActionLink("Index", "Index", "Home", new { @action = "https://" + Request.Hostname + Url.Action("Index", "Home") }) %>

醜い解決策ですが、 @action キーワードは生成されたルートをオーバーライドできますが、アプリケーションは標準以外のポート(44300など)を認識する必要があるように見えることを意味します。

それに関する問題は、開発環境でのみ発生する問題を解決するために何かを書くことだということです。

だから私の質問は... ポートを443に変更して、IIS Expressのようにどのように変更できますか?

私のサイトの構成は以下にあります:

<site name="MySite" id="2" serverAutoStart="true">
  <application path="/">
    <virtualDirectory path="/" physicalPath="C:\Inetpub\MySite" />
  </application>
  <bindings>
    <binding protocol="http" bindingInformation=":80:" />
    <binding protocol="https" bindingInformation=":44300:" />
  </bindings>
</site>

よろしくお願いします。

アップデート:

この質問はそうです 答えた IISフォーラムでDivyaが並んでいます。

役に立ちましたか?

解決

この質問はそうです 答えた IISフォーラムでDivyaが並んでいます。

WebMatrixのWebサイトのSSLを有効にすると、デフォルトでポート44300になり、バックグラウンドですべてのバインディングを行います。このポートを構成ファイルで443に変更しようとしたことを願っています。それが完了して保存されたら、http.sysのバインディングを変更する必要もあります。ポート44300の既存のエントリを削除し、ポート4443のエントリを追加する必要があります。これを行うには、HTTPCFG(winxp/win2003)または「netsh http」(winvista/win2k8/win7)を使用できます。 NetSHのコマンドは次のとおりです。

1)44300の既存のエントリのAPPIDとCerthashを取得します(デフォルトでWebMatrixがインストールするのと同じ証明書を使用すると思います。証明書を変更する場合は、証明書の証明書ハッシュを取得します。証明書ストア): netsh http show sslcert. 。出力では、ポート44300のエントリを検索し、CerthashとAppidをコピーします。

2)44300のエントリを削除します。 netsh http delete sslcert ipport=0.0.0.0:44300

3)ステップ1にCerthashとAppIDがコピーされたポート443の新しいエントリを追加します。 netsh http add sslcert ipport=0.0.0.0:443 certhash=<certhash> appid=<appid>

http.sysのエントリを構成した後、変更を有効にするためにHTTPサービスを再起動する必要があります。

net stop http

net start http

他の人が指摘したように、SSL証明書を取得する素晴らしい方法がいくつかあります。

netsh http show sslcert > output.txt

または(私の好みの方法):

netsh http show sslcert | clip

他のヒント

私はこのトピックに多くの時間を費やしてきたので、私の発見を共有したいと思います。私は他の投稿からコードを引いたものからセグメントを再投稿しています。いくつかの背景と説明:

==========================================

Aroudを調査した後、私はこの問題をIIS Expressとコントローラークラスのオーバーライドで解決することができました OnAuthorization 方法(参照#1)。また、Hanselman(Ref#2)が推奨するルートを使用しました。ただし、2つの理由により、これら2つのソリューションに完全に満足していませんでした。

  1. ref#1 OnAuthorization コントローラークラスレベルではなく、アクションレベルでのみ機能します
  2. ref#2には多くのセットアップが必要です(win7 sdk for makecert), netsh コマンド、そしてポート80とポート443を使用するには、vs2010を管理者として起動する必要があります。

それで、私は次の条件で非常に単純なこのソリューションを思いつきました:

  1. 使用できるようになりたいです RequireHttps コントローラークラスまたはアクションレベルでの属性

  2. MVCにhttpsを使用してもらいたい RequireHttps 属性が存在し、HTTPが存在しない場合はHTTPを使用します

  3. 管理者としてビジュアルスタジオを実行する必要はありません

  4. IIS Expressによって割り当てられたHTTPおよびHTTPSポートを使用できるようになりたい

  5. IIS Expressの自己署名SSL CERTを再利用できます。無効なSSLプロンプトが表示されているかどうかは気にしません

=========================================

あなたは私のソリューション/コードをここで見つけることができます==> ASP.NET MVCは、生産にのみhttpsを必要とします

ポート44300はシーケンシャルです:00は、SSLが有効になっているように構成した最初のアプリケーションであることを意味します。 01は2番目のものなどになります。

また、私のウェブサイトは、を追加することによってHTTPSでのみ作業することを要求しているため [RequireHttps] グローバルな属性、私はいくつかのデバッグに苦労しました。起動すると、自動的にリダイレクトされました https://localhost/

この問題を修正するため Webサイトをデバッグするとき, 、単に新しいものを作成します RequireHttpsAttribute ポートを指定します

#if DEBUG
public class RequireHttpsAttribute : System.Web.Mvc.RequireHttpsAttribute
{
    protected override void HandleNonHttpsRequest(System.Web.Mvc.AuthorizationContext filterContext)
    {
        base.HandleNonHttpsRequest(filterContext);

        var result = (RedirectResult)filterContext.Result;

        var uri = new UriBuilder(result.Url);
        uri.Port = 44301;

        filterContext.Result = new RedirectResult(uri.ToString());
    }
}
#endif

デバッグのみをデバッグするときは、このクラスを使用します。 IIS7にデプロイされたら、URL書き換えを使用してHTTPSにリダイレクトする必要があります。

Danの答えは正しいですが、IIS Expressの構成にまだ問題がある場合は、標準ポートでHTTPとHTTPSを使用してWebサイトにサービスを提供することに問題があります。

http://www.lansweeper.com/kb/54/how-to-configure-ssl-in-iis-express.html

私の場合、IIS Express証明書を誤って削除しました。 Visual StudioでSSLを初めて使用したときに生成されたと思います(選択したプロジェクトでF4を使用してプロパティウィンドウを取得し、「SSSが有効になっている」チェックボックスをチェックします)。このチュートリアルは、証明書を作成して修正する方法を案内してくれました。

クラスを作成します

public class RequireSSLAttribute: RequireHttpsAttribute
    {
        protected override void HandleNonHttpsRequest(AuthorizationContext filterContext)
        {
            base.HandleNonHttpsRequest(filterContext);

             if (filterContext.HttpContext.Request.Url.Host.ToLower().Equals("localhost"))
            {
                // redirect to HTTPS version of page
                string localhostSSLPort = System.Configuration.ConfigurationManager.AppSettings["localhostSSLPort"];
                string url = "https://" + filterContext.HttpContext.Request.Url.Host + ":" + localhostSSLPort + filterContext.HttpContext.Request.RawUrl;
                filterContext.Result = new RedirectResult(url);
            }           
        }
    }

そして、あなたのWeb構成の中には、このようなものが追加されます

<appSettings>    
    <add key="localhostSSLPort" value="44300"/>
  </appSettings>

そして、あなたはそれをのように使用します

    [RequireSSL]            
    public class AdminController : Controller
    {
              ...
    }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top