WebSurfer's Home

トップ > Blog 1   |   ログイン
APMLフィルター

IIS Express で SSL 通信

by WebSurfer 2018年9月9日 14:12

Visual Studio Community 2015 で ASP.NET Web アプリケーションの開発を行う際、IIS Express で SSL 通信を利用できるようにする方法を書きます。

IE11 の実行画面

上の画面は、Visual Studio での設定完了後、Web Forms アプリケーションを IIS Express 上で実行させて IE11 に表示させたものです。

赤枠で囲ったアドレスバーに示される URL が https で始まっているのが分かるでしょうか? IE11 と Edge の場合は上の画像のように警告なしで表示されます。

そのための Visual Studio での設定方法は以下の通りです。

プロジェクトのプロパティ設定

Visual Studio のテンプレートを使って Web アプリケーションのプロジェクトを作成したら、ソリューションエクスプローラーでプロジェクトのノードをクリックしてプロパティを表示します。

プロパティウィンドウで[SSL 有効]を True に設定します。すると、[SSL URL]に自動的に SSL 通信用のプロジェクトの URL が設定されます。上の画像を見てください。

その操作を行う際に警告ダイアログが出て(正確なタイミングとダイアログの内容は忘れました)、自動的にフレンドリ名 IIS Express Development Certificate というサーバー証明書が発行されます。

サーバー証明書

上の画像で赤枠で囲ったものが発行されたサーバー証明書です。発行場所は上の画像の通り「現在のユーザー」です。MMC で確認する場合は、スナップインを追加する際[ユーザーアカウント(M)]を選んでください。

サーバー証明書なので発行されるのは最初の一回だけです。この後、新たに別のプロジェクトを作って同じ操作を行ってもダイアログは出ませんし証明書は発行されませんので注意してください。

仮想ディレクトリの作成

Visual Studio のソリューションエクスプローラーで Properties を右クリックして開きます。表示される画面で[Web]タブをクリックし、上の画像のように[プロジェクトの URL(J)]のテキストボックスに、プロジェクトのプロパティウィンドウの[SSL URL]に設定された URL をコピーします。

その後[仮想ディレクトリの作成(Y)]ボタンをクリックすると「仮想ディレクトリは正しく作成されました」というダイアログが出ます。

binding の設定

作成された仮想ディレクトリは applicationHost.config ファイルの binding タグを見ると確認できます。上の画像の赤枠部分を見てください。

applicationHost.config ファイルはプロジェクトのフォルダにあります。詳しくは先の記事「ApplicationHost.config の場所」を見てください。

以上の設定後、[ファイル(F)]⇒[すべて保存(L)]してから、[デバッグ(D)]⇒[デバッグの開始(S)]または[デバッグなしで開始(H)]で、上の画像のように既定のブラウザが立ち上がって SSL 通信で要求・応答が行われ、結果が表示されます。

Chrome の実行画面

Chrome などの他のブラウザでも、上の画像のような警告は出ますが、Visual Studio を使って IIS Express で SSL 通信を行っての開発は可能なようです。

全てのブラウザで、IE11、Edge を使った場合と同様か、100% 問題ないかはまでは確認していませんが。

Tags: ,

DevelopmentTools

IIS Express で Windows 認証

by WebSurfer 2018年8月19日 14:10

IIS Express でも Visual Studio でプロジェクトのプロパティを設定することで Windows 認証が使えるという話を書きます。

プロパティの設定

上の画像は Visual Studio Community 2015 のテンプレートで[空]の Web Forms アプリケーションプロジェクトを作り、「ソリューションエクスプローラー」ウィンドウでプロジェクトを選択し、その「プロパティ」ウィンドウで[Windows 認証]の設定をデフォルトから変えて[有効]にしたところです。

上の画像では[匿名認証]の設定もデフォルトから変えて[無効]に設定していますが、そうしておかないと、匿名のままアクセスできてしまう(Windows 認証はスルーされてしまう)ので注意してください。

上記のように設定してから、Visual Studio で[デバッグ(D)]⇒[デバッグなしで開始(H)」(または[デバッグの開始(S)])をクリックすると Web アプリは IIS Express 上で実行され、以下の画像のように認証情報を入力するダイアログが表示されます。(2020/11/26 追記: いつの間のかこのダイアログは出なくなっていました。詳しくは下の追記を見てください)

認証ダイアログ

そのダイアログに有効な Windows アカウント名とパスワードを入力して[OK]をクリックすれば認証は通って画面が表示されます。User.Identity.Name でアカウント名も取得できます。(そのあたりの動作は IIS を使った時のものと同じ)

実は自分は IIS Express で Windows 認証が使えることを知らなくて、わざわざローカル IIS を使って Windows 認証のテストをしてました。(汗)

MSDN Forum のスレッド「Request.ServerVariables("REMOTE_USER")が空の文字列を返す」の Q&A の際に調べて初めて知った次第です。

なお、Windows 認証は Windows の機能に依存するもので、IE と IIS の組み合わせでなければ実現できないそうですので注意してください。(他の組み合わせでできたとしてもたまたまで、Microsoft が保証しているわけではなさそうです)


----- 2020/11/26 追記 -----

いつの間にか認証ダイアログが出ないまま Windows 認証が通るようになっていました。下の Fiddler での要求・応答のキャプチャ画像を見てください。

Windows 認証

シングルサインオンで認証済みのユーザ���のアクセスしてくるとかでない限り、最初の要求で応答が返ってきた時(上の画像の #1 が該当)に認証ダイアログが出るはずなのですが、なぜか出ないまま自動的に認証が進んでログインできてしまいます。

Page.User.Identity で取得できる認証関係の情報は、以下の画像の通り Windows 認証が通ったときものになっています。

Windows 認証

OS は同じ Windows 10 Pro 64-bit で、ブラウザも同じ IE11、Visual Studio のバージョンも同じ 2015 で試したのですが・・・ 違いは OS のバージョンが 20H2 にアップデートされたぐらいしか思い当たりません。それで何か変わったのでしょうか。

上記は IIS Express で ASP.NET アプリを動かして試したときの話です。IIS ではどうなのかは未確認です。

Tags: ,

DevelopmentTools

LocalDB で Northwind と Pubs を利用

by WebSurfer 2017年5月16日 20:43

Microsoft が提供するサンプルデータベース Northwind と Pubs を LocalDB にアタッチして使うにはどうすればいいかということを書きます。

VS2015 から Pubs に接続

今年の 1 月に買った Windows 10 Pro 64-bit のノート PC に Visual Studio 2015 Communuty Update 3(以下、VS2015 と書きます)をインストールして使い始めました。

自分の環境では、VS2015 をインストールした際 SQL Server 2016 Express LocalDB(以下、LocalDB と書きます)も同時にインストールされたので、特に何もしていないのですが LocalDB が使えます。

VS2015 のテンプレートを使ってフォーム認証用の ASP.NET プロジェクトを作ると、ASP.NET Identity 用のデータベース(.mdf, .ldf ファイル)が EF Code First と LocalDB を使って App_Data フォルダに自動生成されるということで、LocalDB を使うのが VS2015 でのデフォルトのようです。

というわけで、少なくとも開発の初期段階では LocalDB を使うのが便利だと思って自分も使い始めました。

でも、実は最近になって、SQL Server Express が使えれば、LocalDB を使う必要はなさそうだと思い始めているのですが。LocalDB の使い方を勉強する時間がもったいないかも。(笑)

(上に書いた EF Code First で DB を生成するのは SQL Server Express でもできます。プロジェクトが生成された直後に web.config の接続文字列を SQL Server Express を使うように変更すれば、DB を生成して SQL Server Express の既定のインスタンス(または名前付きインスタンス)にアタッチしてくれます)

(もう一つ、ローカル IIS を使って開発を行う場合、LocalDB は使えないという問題があります。詳しくは MSDN Blog の記事「Using LocalDB with Full IIS, Part 1: User Profile」を見てください。その記事のPart 2「Using LocalDB with Full IIS, Part 2: Instance Ownership」に書いてあるような解決方法はあるそうですが、無理に LocalDB を使うより SQL Server Express を使った方がよさそうだと思います)

SQL Server Express が使えれば、LocalDB で Northwind と Pubs を使う必要はなさそうです。でも、せっかく考えたので書いておきます。この先 LocalDB しか使えないという環境もあるかもしれませんし。

さて、Northwind と Pubs ですが、それらは Microsoft が無償で提供している SQL Server 2000 用のサンプルデータベースです。MSDN ライブラリなどのチュートリアルでよく利用されており、自分もお世話になっています。

ファイルは Microsoft のダウンロードサイト Northwind and pubs Sample Databases for SQL Server 2000 から SQL2000SampleDb.msi というインストーラー形式で入手できます。

インストーラーを実行すると C:\SQL Server 2000 Sample Databases というフォルダ下に .mdf ファイル、.ldf ファイル、.sql ファイルが生成されます。

VS2015 から LocalDB を利用する場合、MSSQLLocalDB という名前の自動インスタンス(他に名前付きインスタンスというのもあるそうです)に特定の .mdf ファイル名を接続文字列の AttachDbFileName に指定してアタッチし、それに接続するのが一般的だと思います。

しかしながら、ダウンロードした NORTHWND.MDF や PUBS.MDF をアタッチしようとすると、SQL Server 2000 の .mdf ファイルなので SQL Server 2016 と互換性がないため、以下のようなエラーとなって失敗します。(この画像の前に「データベースを今すぐアップグレードしますか?」と出るので、そこで[はい]をクリックした結果です)

エラーメッセージ

ダウンロードした NORTHWND.MDF や PUBS.MDF を SQL Server 2016 と互換性を持つようにアップグレードできないかいろいろ調べましたが、自分が調べた限りでは方法は見つかりませんでした。

上の画像のエラーメッセージ "You must re-create the database" の通りデーターベースを作り直す他方法はなさそうです。

NORTHWND.MDF や PUBS.MDF と一緒にダウンロードされたスクリプトファイル instnwnd.sql(Northwind 用)と instpubs.sql(Pubs 用)を使えば作り直すことが可能です。問題はどのようにスクリプトを実行するかです。

実は知らなかったのですが、SQL Server Management Studio(以下、SSMS と書きます)を LocalDB に接続できるのでした。SSMS を利用すれば容易にスクリプトを実行できます。

下の画像は SQL Server 2008 の SSMS ですが、LocalDB に接続し、赤丸で囲った[ファイルを開く]アイコンをクリックして instnwnd.sql を開いたところです。

SSMS を LocalDB に接続

スクリプトには SQL Server 2016 では使用できないストアドプロシージャ sp_dboption が使われていますので、実行する前にその部分の修正が必要です(instnwnd.sql に 2 行、instpubs.sql に 1 行あります)。上の画像の赤の四角で囲った部分が instnwnd.sql の場合の訂正箇所です。

ストアドプロシージャの説明は MSDN ライブラリの sp_dboption (Transact-SQL) を見てください。チュートリアルに使うだけならコメントアウトするだけでもいいと思います。

同等の設定にするなら、alter database <データベース名> set recovery simple に書き換えればよさそうです。

訂正してから[実行(X)]をクリックするとスクリプトが走ってデーターベースが生成され、SSMS でデータベースを開いて操作できるようになります。

データベースが生成されると VS2015 からも接続できるようになります。下の画像は VS2015 のサーバーエクスプローラーからデータ接続の追加で、LocalDB 上に生成してアタッチされた Pubs に接続しているところです。

VS2015 を LocalDB に接続

上の画像で[データソース(S)]が既定のインスタンス(または名前付きインスタンス)に接続するためのものになっており、[サーバー名(E)]が LocalDB の MSSQLLocalDB という名前の自動インスタンスになっている点に注意してください。

それらが正しく選択されていれば[データベース名の選択または入力(D)]に上の画像のように接続可能な候補一覧が表示されるはずです。ここで Pubs を選択して[OK]をクリックした結果が一番上の画像です。

もちろんアプリケーションからも接続できます。既定のインスタンス(または名前付きインスタンス)に接続する時と同様な接続文字列で、Data Source を (LocalDB)\MSSQLLocalDB にすれば OK です。

Tags: , ,

DevelopmentTools

About this blog

2010年5月にこのブログを立ち上げました。主に ASP.NET Web アプリ関係の記事です。

Calendar

<<  2024年4月  >>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

View posts in large calendar