最初にIIS Expressを設定してSSLを有効にすると、ポートはデフォルトで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 like like?
私のサイトの設定は以下の通りです:
<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によって answered されています。
この質問は、IISフォーラムでDivyaによって answered されています。
WebMatrixでWebサイトのSSLを有効にすると、デフォルトでポート44300になり、すべてのバインディングがバックグラウンドで実行されます。設定ファイルでこのポートを443に変更してみてください。それが完了して保存されたら、http.sysのバインディングも変更する必要があります。ポート44300の既存のエントリを削除し、ポート443のエントリを追加する必要があります。これを行うには、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とControllerクラスのOnAuthorization
メソッドのオーバーライド(Ref#1)を使用してこの問題を解決することができました。私はルートにも行きましたHanselman(Ref#2)が推奨しましたが、次の2つの理由により、これら2つのソリューションに完全には満足できませんでした。
OnAuthorization
はアクションレベルでのみ機能し、コントローラークラスレベルでは機能しませんmakecert
)、netsh
コマンドが必要です。ポート80とポート443を使用するには、VS2010を管理者として起動する必要があります。眉をひそめた。それで、私は次の条件で非常に単純なこのソリューションを思いつきました:
コントローラークラスまたはアクションレベルでRequireHttps
属性を使用できるようにしたい
RequireHttps
属性が存在する場合はMVCでHTTPSを使用し、存在しない場合はHTTPを使用したい
管理者としてVisual Studioを実行する必要がない
IIS Expressによって割り当てられた任意のHTTPおよびHTTPSポートを使用できるようにしたい
IIS Expressの自己署名SSL証明書を再利用できますが、無効なSSLプロンプトが表示されても気にしません
=========================================
ここで私のソリューション/コードを見つけることができます==> ASP.NET MVC RequireHttps in Production Only
ポート44300はシーケンシャルです。00は、SSL対応として構成した最初のアプリケーションであることを意味します。 01は2番目のものになります。
また、[RequireHttps]
グローバル属性を追加して、WebサイトがHTTPSでのみ動作するように要求しているため、デバッグに問題がありました。起動すると、自動的に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証明書を削除しました。VisualStudioで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);
}
}
}
そしてあなたのウェブ設定内にこのようなものを追加します
<appSettings>
<add key="localhostSSLPort" value="44300"/>
</appSettings>
そして、あなたはそれを
[RequireSSL]
public class AdminController : Controller
{
...
}