2

私はこのチュートリアルに正確に従いました:

http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx

しかし、ローカルで実行していて、https以外のページ(ホーム/インデックスなど)から[RequireHttps]で装飾したページに移動しようとすると、一般的な「SSL接続エラー」メッセージが表示されます。

私はそのような一般的な質問を投稿するのは嫌いですが、私が見逃したことは何か考えられますか?これは大規模なasp.netmvc4アプリケーションであり、プロジェクトでsslを有効にしました。これにより、sslのURLが表示されます。手動でSSLURLに移動することもできません。

HALP!

注:VisualStudio2012でIISExpressを使用する

コメントによると、私が得ているエラーはSSL接続を確立できませんです。

4

3 に答える 3

5

ローカルでテストする場合は、Httpsを使用しないでください。独自のHttpsFilterを作成しました。このフィルターは、ローカルホスト内のすべてのローカルトラフィックを無視し、ステージング環境とライブ環境のいずれかでのみ機能します。必要に応じてコードを変更できます。

public class RequireSSLAttribute : FilterAttribute, IAuthorizationFilter {
    public virtual void OnAuthorization(AuthorizationContext filterContext) {
        if(filterContext == null) {
            throw new ArgumentNullException("filterContext");
        }

        if(!filterContext.HttpContext.Request.IsSecureConnection) {
            HandleNonHttpsRequest(filterContext);
        }
    }

    protected virtual void HandleNonHttpsRequest(AuthorizationContext filterContext) {
        if(filterContext.HttpContext.Request.Url.Host.Contains("localhost")) return;


        if(!String.Equals(filterContext.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase)) {
            throw new InvalidOperationException("The requested resource can only be accessed via SSL");
        }

        string url = "https://" + filterContext.HttpContext.Request.Url.Host + filterContext.HttpContext.Request.RawUrl;
        //ignore if the request is from a child action
        if(!filterContext.IsChildAction) {
            filterContext.Result = new RedirectResult(url);
        }
    }
}

そして、これはあなたがそれを使う方法です...

[RequireSSL(Order=1), Authorize(Order=2)]
public PartialViewResult AccountHeader() {

blah...blah...

}
于 2012-12-04T03:01:26.760 に答える
4

すでに回答済みですが、他の回答では省略されている元のエラーの原因を指摘したいと思いました。

IIS ExpressでSSLを有効にすると、サイトは2つのポートでホストされます。1つはhttp用、もう1つはhttps用です。Visual Studioでデバッグする場合、通常、ポートは明示的に指定されます。サイトのリンクではポート番号が指定されていない可能性があるため、プレーンなhttpページからhttpsページにリンクする場合、ポート番号は変更されず、プレーンなhttpポートでhttpsページをリクエストします。これがSSL接続エラーが発生する理由です。

実サーバーでは、ポート番号は暗黙的である必要があるため、問題は発生しませんが、ローカルでデバッグする場合は、正しいポートを使用していることを確認する必要があります。

于 2014-03-18T09:09:52.293 に答える
3

IISのサイトインスタンスにSSL証明書を追加する必要があります。証明書を作成してIIS7に追加するには、次のチュートリアルを試してください:http ://technet.microsoft.com/en-us/library/cc753127(v=ws.10).aspx

作成後、Webサイトに追加できるようになります。IISで開きます'あなたのウェブサイト'->バインディング->新しいホストヘッダーを追加して追加します。https、ポート443を選択し、作成された証明書を選択します。

于 2012-12-03T18:26:49.383 に答える