none
httpsへのページ遷移について RRS feed

  • 質問

  • こんにちは、VBでASP.NET4.0のwebサイトを開発しています。

    1点分からない個所があります。どなたか詳しい方教えていただけると有難いです。

     

    TOPページや商品を紹介するようなページでは、先頭がhttpのURLですが、

    個人情報を入力するページはhttpsで始まるURLにしたいと思います。

    そこで開発端末のIIS上にwebサイトを配置し、自己署名入り証明書を作成して、SSL設定を行いました。

    そして遷移先のURLの指定方法を次のように変更しました。

    変更前:

    <a id="A1" href="~/Top.aspx" runat="server">HOME</a>

    <a id=" A2 " href="~/toiawase/Toiawase.aspx" runat="server">お問合せ</a>

    変更後:

    <a id="A1" href="http://localhost/MyWeb/Top.aspx" runat="server">HOME</a>

    <a id="A2" href="https://localhost/MyWeb/toiawase/Toiawase.aspx" runat="server">お問合せ</a>

    こうすると、変更後の書き方ではIIS上では、「id=A1」も「id=A2」も動作するのですが、

    VSでのデバッグ時には両者ともエラーになってしまいます。

    しかも「id=A1」は「404 not found」エラーで、「id=A2」の方は違ったエラーで、

    「正常に接続できませんでした

    localhost のサーバへの接続を確立できませんでした。

      このサイトが一時的に利用できなくなっていたり、サーバの負荷が高すぎて接続できなくなっている可能性があります。しばらくしてから再度試してください。

      他のサイトも表示できない場合、コンピュータのネットワーク接続を確認してください。

      ファイアーウォールやプロキシでネットワークが保護されている場合、Firefox による Web アクセスが許可されているか確認してください。」

    と表示されます。
    ズバリの回答も有難いですが、httpとhttpsのページが混在しているサイトを開発する時は、
    こうするといいよ、という方法でも構いません。
    よろしくお願い致します。

    2012年1月5日 6:39

回答

  • web.config ファイルの appSettings 要素を,、開発環境では以下
    のように設定して、本番環境で実際のドメインに書き換えてはい
    かがですか?

    <appSettings>
      <add key="Domain" value="localhost"/>
    </appSettings>


    a 要素への設定は以下のようにします(WebConfigurationManager が
    属する名前空間の参照を忘れずに)。

    <a href="https://<%=WebConfigurationManager.AppSettings["Domain"]%>/default.aspx">default.aspx</a>

     


    • 編集済み SurferOnWww 2012年1月5日 13:46 訂正
    • 回答としてマーク ボビン 2012年1月10日 6:26
    2012年1月5日 13:44
  • SSLのページから通常のページに戻るときにはhtt://というプロトコルを付けることも必要ですよね? トータルとして以下の記事が参考になると思います。

    [ASP.NET]Webページに含まれるリンクを動的に変更するには?[C#、VB]
    http://www.atmarkit.co.jp/fdotnet/dotnettips/699httpfilter/httpfilter.html

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク ボビン 2012年1月10日 6:26
    2012年1月6日 1:02
    モデレータ

すべての返信

  • httpとhttpsの問題というより、localhostという記述が問題なのだと思います。デバッグを行う場合、localhostはそのデバッグを行っているコンピュータになりますが、そのコンピュータにおけるwebサーバーの設定はどのようになっているのでしょうか?

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2012年1月5日 7:07
    モデレータ
  • trapemiyaさん、ご返信ありがとうございます。

     

    localhostという記述が問題なのだと思います。

    すみません、おかしいとは思いつつ他に思い浮かばないので、localhostで試していました。

    デバッグ時にはlocalhost:54351とポートを追加すれば、遷移はできましたが、そもそもlocalhostではダメですよね。

    <a id=" A2 " href="~/toiawase/Toiawase.aspx" runat="server" ssl="true">お問合せ</a>

    ↑このようなイメージで記述できたらいいのですが。。。


    デバッグを行う場合、localhostはそのデバッグを行っているコンピュータになりますが、そのコンピュータにおけるwebサーバーの設定はどのようになっているのでしょうか?

    私が使用している開発端末(Win7)にIIS7.5をインストールしてwebサーバとしています。

    デバッグ時のwebサーバはVSに付属している開発サーバです。

    すみません、聞かれているwebサーバの設定とは、きっとこのことではないですよね?

    お手数ですがもう少し噛み砕いていただけると助かります。


    2012年1月5日 7:37
  • もうちょっと補足で「http://localhost/~」と書いてしまっているということは、どのコンピューターから閲覧してもブラウザーが動作しているコンピューターにアクセスしてしまいます。それは意図したものなのでしょうか?
    # SSLで暗号化してまで保護したいのにコンピューター内に閉じているのは矛盾を感じます。

    次に「VSでのデバッグ」「VSに付属している開発サーバ」と書かれていますが、開発サーバーにはSSLの設定をしましたか? 設定していなければアクセスできないのは当然でしょう。

    2012年1月5日 7:44
  • 佐祐理さん、ご返信ありがとうございます。

     

    localhostがブラウザが動作しているマシンにアクセスしてしまう事は意図したものではありません。

    localhostは最終的にはwebサイトが配置されているwebサーバのIPアドレスにするつもりです。

    とりあえず自分の環境のIISと開発サーバで確認しようと思い、localhostと書きました。

     

    また、vs付属の開発サーバにはsslの設定をしていませんでした。

    設定が必要な事を思いつきませんでしたが、考えてみれば当たり前のことでした。調べて設定してみます。

    ありがとうございます。

    2012年1月5日 7:58
  • ASP.NET 開発サーバーには SSL 通信の機能はありません。

    デバッグは開発サーバーで行っているとのことですが、IIS の
    サイトまたはアプリケーションに設定してある Web アプリを
    Visual Studio から起動して、開発サーバーを使用した場合と
    同様にデバッグできます。

    以下のページは Vista + IIS7 の場合ですが Win7 + IIS7.5
    でもほぼ同じはずです。

    Windows Vista での IIS 7.0 および Visual Studio を使用した
    Web アプリケーションの実行
    http://msdn.microsoft.com/ja-jp/library/aa964620.aspx

    ただし、Home Premium 以下のバージョンに付属の IIS では、
    Windows 認証の機能がないため、デバッグはできなかったと記
    憶しています。

    その場合は IIS Express が使えるそうです。

    IIS Expressの紹介
    http://www.atmarkit.co.jp/fdotnet/scottgublog/20100702iisexpress/iisexpress.html

     


    • 編集済み SurferOnWww 2012年1月5日 12:01
    • 回答としてマーク ボビン 2012年1月5日 12:32
    • 回答としてマークされていない ボビン 2012年1月5日 12:32
    2012年1月5日 11:54
  • SurferOnWwwさん、情報ありがとうございます。

    確かに開発サーバにはSSL通信の機能がありませんでした。IISを使ってのデバッグが良さそうですね。

    バージョンはprofessionalなのでIISでのデバッグはできました。

    ただ、aタグのURLに指定する「localhost」のサーバー名の部分に何を指定すればいいかがわかりません。

    開発サーバのIPアドレスと本番稼動時のIPアドレスを置換して切り替えるのは違うと思いますし。

    皆様はどのように実装されていますでしょうか?

    asp.netではないのですが、

    <a href="https://<%= getServerName() %>/MyWeb/toiawase/Toiawase.aspx">お問合せ</a>

    のような書き方を見つけました。

     

    • 編集済み ボビン 2012年1月5日 12:44
    2012年1月5日 12:43
  • 別のアプローチでどうでしょう。IISの設定でSSL SettingsでRequire SSLと指定します。http://~でアクセスしてもhttps://~にリダイレクトされます。

    というもの、<a>タグにhttps://~とハイパーリンクを書いたとしても、ユーザーがブラウザーにhttp://~と書き直してしまっては台無しです。(まぁ暗号化しないのがユーザーの意志なので尊重すべきという考え方もありますが) Require SSLとしておけば自動的にリダイレクトされるので安心かなと。

    2012年1月5日 13:23
  • web.config ファイルの appSettings 要素を,、開発環境では以下
    のように設定して、本番環境で実際のドメインに書き換えてはい
    かがですか?

    <appSettings>
      <add key="Domain" value="localhost"/>
    </appSettings>


    a 要素への設定は以下のようにします(WebConfigurationManager が
    属する名前空間の参照を忘れずに)。

    <a href="https://<%=WebConfigurationManager.AppSettings["Domain"]%>/default.aspx">default.aspx</a>

     


    • 編集済み SurferOnWww 2012年1月5日 13:46 訂正
    • 回答としてマーク ボビン 2012年1月10日 6:26
    2012年1月5日 13:44
  • 佐祐理さん、SurferOnWwwさんありがとうございます。

     

    IISの設定でSSL SettingsでRequire SSLと指定します

    なるほど、自動的にリダイレクトする方法があるんですね。

    今開発環境がないので、明日早速試してみます。

     

    <a href="http://<%=WebConfigurationManager.AppSettings["Domain"]%>/default.aspx">default.aspx</a>

    この方法はほぼ思っていたような書き方のように思えます。

    こちらも早速明日試したいと思います。

    ありがとうございました。またご報告します。

    2012年1月5日 13:51
  • VB でしたね。上のコードは C# なので注意してください。
    2012年1月5日 14:09
  • SSLのページから通常のページに戻るときにはhtt://というプロトコルを付けることも必要ですよね? トータルとして以下の記事が参考になると思います。

    [ASP.NET]Webページに含まれるリンクを動的に変更するには?[C#、VB]
    http://www.atmarkit.co.jp/fdotnet/dotnettips/699httpfilter/httpfilter.html

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク ボビン 2012年1月10日 6:26
    2012年1月6日 1:02
    モデレータ
  • 皆様、アドバイスありがとうございます。

    おかげ様でなんとか目的を達成できました。

    今回は、SurferOnWwwさんの

    「<a href="https://<%=WebConfigurationManager.AppSettings("Domain")%>/default.aspx">default.aspx</a>」

    と、開発サーバを「IIS Webサーバーの使用」の設定で落ち着きました。

    最後にtrapemiyaさんのフィルタを使うテクニックもやりたいことに近いと思いますのでまた試してみます。

    どうもありがとうございました。

     

     

    2012年1月10日 6:25