クライアント側の証明書を使用して ASP.NET アプリケーションをセキュリティで保護する方法

文書翻訳 文書翻訳
文書番号: 315588 - 対象製品
この記事は、以前は次の ID で公開されていました: JP315588
すべて展開する | すべて折りたたむ

目次

概要

インターネット バンキング サイトなど、高度のセキュリティで保護された Web アプリケーションを作成するために、ユーザー名とパスワードの組み合わせよりも安全なユーザー認証のためのソリューションを実装することができます。この資料の手順では、クライアント側のデジタル証明書を使用してユーザーの身元を確認します。さらに、必要に応じてクライアント側のデジタル証明書をサーバーの Windows アカウントにマップできます。

要件

次の一覧は、推奨する必要なハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、および Service Pack です。
  • Microsoft Windows 2000 Server Service Pack 2
  • Microsoft Internet Explorer 6.0
  • Microsoft Visual Studio .NET
  • Microsoft Certificate Services (独自の証明書を作成する必要がある場合)
この資料は、次のトピックについて詳しい知識のある読者を対象としています。
  • Visual Basic または Visual C# を使用した ASP.NET 開発
  • Microsoft Internet Information Services (IIS) の構成

ASP.NET Web アプリケーションを作成する方法

ここでは、簡単な ASP.NET アプリケーションを作成します。「証明書に基づいた認証を行うように Web サーバーを構成する方法」以下では、クライアント側の証明書の認証を使用してこのアプリケーションをセキュリティで保護します。
  1. Visual Studio .NET を起動し、新しい ASP.NET Web アプリケーション プロジェクトを作成して SecureSite という名前を付けます。
  2. ツールボックスから [Label] コントロールを WebForm1.aspx の Web フォームにドラッグして [ID] プロパティに greetingLabel と入力します。
  3. 2 つ目の [Label] コントロールを WebForm1.aspx にドラッグして [ID] プロパティに certDataLabel と入力します。
  4. 次のコードを Page_Load イベント プロシージャに追加します。
    'Visual Basic
    Dim username As String
    userName = User.Identity.Name
    greetingLabel.Text = "Welcome " & userName
    Dim cert As HttpClientCertificate = Request.ClientCertificate
    If cert.IsPresent Then
    	'Get the Organization (O) field from the Subject section.
    	certDataLabel.Text = cert.Get("Subject O")
    Else
    	certDataLabel.Text = "No certificate was found."
    End If
    
    //Visual C#
    string userName;
    userName = User.Identity.Name;
    greetingLabel.Text = "Welcome " + userName;
    HttpClientCertificate cert = Request.ClientCertificate;
    if (cert.IsPresent)
        certDataLabel.Text = cert.Get("SUBJECT O");
    else
        certDataLabel.Text="No certificate was found.";
    
  5. プロジェクトをビルドして保存し、Visual Studio を終了します。
  6. Internet Explorer を起動して次のページを参照します。
    http://localhost/SecureSite/WebForm1.aspx
    ページに "Welcome" と "No certificate was found" というメッセージが表示されます。 ユーザーが認証されなかったので、このページにはユーザー名が表示されません。
  7. Internet Explorer を終了します。

証明書に基づいた認証を行うように Web サーバーを構成する方法

ここでは SecureSite プロジェクトを構成して、認証に証明書を使用します。クライアント側の証明書を使用するには、サーバー側の証明書をインストールする必要があります。任意の証明機関が発行した既存のサーバー証明書を使用するか、Microsoft Certificate Services を使用してサーバー側の証明書を生成できます。

サーバー側の証明書要求の作成

  1. [スタート] メニューの [プログラム]、[管理ツール] を順にポイントして、[インターネット サービス マネージャ] をクリックします。
  2. サーバーのノードを展開して [既定の Web サイト] をクリックします。
  3. [操作] メニューの [プロパティ] をクリックします。
  4. [ディレクトリ セキュリティ] タブをクリックして、[サーバー証明書] をクリックします。ウィザードで、以下の手順に従います。
    1. ウィザードの最初のページで [次へ] をクリックします。
    2. [サーバー証明書] ページで、[証明書の新規作成] をクリックして [次へ] をクリックします。
    3. [要求の送信] ページで [証明書の要求を作成して後で送信する] をクリックし、[次へ] をクリックします。
    4. [名前とセキュリティの設定] ページで、デフォルトの設定のまま [次へ] をクリックします。
    5. [組織に関する情報] ページで、[組織] ボックスに MSDN と入力し、[部門] ボックスに How To Articles と入力します。[次へ] をクリックします。
    6. [サイトの一般名] ページで localhost と入力して [次へ] をクリックします。
    7. [地理情報] ページで、国、都道府県、市区町村を入力し、[次へ] をクリックします。
    8. [証明書の要求ファイル名を入力してください] ページで、デフォルトのファイル名 (通常は c:\certreq.txt) のまま [次へ] をクリックします。
    9. [要求ファイルの概要を請求] ページで、すべての項目が正しいことを確認して [次へ] をクリックします。
    10. [完了] をクリックして、ウィザードを終了します。
  5. 生成された証明書ファイルを開き、内容をすべてクリップボードにコピーします。

サーバー側の証明書要求の送信

  1. Internet Explorer を起動して次のページを参照します。
    http://localhost/CertSrv
    : Microsoft Certificate Services がインストールされている必要があります。
  2. ウィザードで、以下の手順に従います。
    1. [証明書の要求] をクリックして [次へ] をクリックします。
    2. [要求する種類の選択] ページで [要求の詳細設定] をクリックして [次へ] をクリックします。
    3. [証明書の要求の詳細設定] ページで [Base 64 エンコード PKCS #10 ファイルを使用して証明書の要求を送信するか、または Base 64 エンコード PKCS #7 ファイルを使用して更新の要求を送信します] をクリックして、[次へ] をクリックします。
    4. [保存した要求の送信] ページの [Base 64 エンコード証明書の要求 (PKCS #10 または #7)] ボックスの中をクリックして Ctrl キーを押しながら V キーを押し、前の手順でクリップボードにコピーした証明書要求を貼り付けます。[送信] をクリックします。
  3. Internet Explorer を終了します。

サーバー側の証明書の発行

  1. [スタート] ボタンの [プログラム] をクリックして [管理ツール] をポイントし、[証明機関] をクリックします。
  2. 証明機関のノードを展開して [保留中の要求] をクリックします。
  3. 送信した証明書要求をクリックします。[操作] メニューの [すべてのタスク] をポイントして [発行] をクリックします。
  4. [発行した証明書] フォルダに証明書が表示されることを確認し、その証明書をダブルクリックして参照します。
  5. [詳細設定] タブをクリックして、[ファイルにコピー] をクリックします。ウィザードの手順に従って、証明書を Base-64 encoded X.509 形式の証明書として C:\Servercert.cer に保存します。
  6. [証明書] ダイアログ ボックスを閉じます。
  7. 証明機関ツールを終了します。

サーバー側の証明書のインストール

  1. [スタート] メニューの [プログラム]、[管理ツール] を順にポイントして、[インターネット サービス マネージャ] をクリックします。
  2. サーバーのノードを展開して [既定の Web サイト] をクリックします。
  3. [操作] メニューの [プロパティ] をクリックします。
  4. [ディレクトリ セキュリティ] タブをクリックして、[サーバー証明書] をクリックします。ウィザードで、以下の手順に従います。
    1. ウィザードの最初のページで [次へ] をクリックします。
    2. [保留中の要求を処理し、証明書をインストールする] をクリックし、[次へ] をクリックします。
    3. 前の手順で保存した C:\Servercert.cer 証明書ファイルを参照します。[次へ] を 2 回クリックして [完了] をクリックします。
  5. [OK] をクリックして [プロパティ] ダイアログ ボックスを閉じます。

SSL 対応の SecureSite サイトとクライアント側の証明書の構成

  1. インターネット サービス マネージャで、[SecureSite] サブ Web をクリックして [操作] メニューの [プロパティ] をクリックします。
  2. ウィザードで、以下の手順に従います。
    1. [ディレクトリ セキュリティ] タブをクリックして [セキュリティ保護された通信] の [編集] をクリックします。
    2. [保護されたチャンネル (SSL) を要求する] チェック ボックスをオンにします。これにより、このサブ Web への通信が暗号化されます。
    3. [クライアント証明書を要求する] チェック ボックスをオンにします。これにより、クライアント側の証明書をインストールしたユーザーのみがこのサイトを参照できるようになります。
    4. [クライアント証明書のマッピングを有効にする] チェック ボックスをオンにします。これは、クライアント証明書を Windows ユーザー アカウントにマップするために行います。
    5. [編集] をクリックします。1 つの証明書を 1 つの Windows アカウントにマップすることも、多数の証明書を同じ Windows アカウントにマップすることもできます。
    6. [多対一] タブをクリックして [追加] をクリックし、マッピングの規則を追加します。規則の名前として Mapping Rule と入力し、[次へ] をクリックします。
    7. [新規作成] をクリックし、証明書の [サブジェクト] セクションの [0] (組織) サブ フィールドで、条件として "MSDN" を指定する新しい規則を作成します。[OK] をクリックします。これで、このマッピングが "MSDN" という組織属性を含む証明書を持つユーザーに適用されます。実稼動環境では、マッピングの規則はより厳格であり、多くの場合サブジェクトと同様に証明書発行者の正当性も証明します。[次へ] をクリックします。
    8. [マッピング] ページで、[ログオン認証としてこの証明書を受諾] をクリックします。[参照] をクリックして MSDN ユーザーをマップする Windows アカウントをクリックします。この資料の例では、Administrator アカウントを使用します (実際のアプリケーションでは、制限付きの権限を持つ専用の Windows アカウントを作成します)。正しいパスワードを入力します。
    9. [完了] をクリックし、パスワードを確認します。
  3. [OK] をクリックして [アカウント マッピング] ダイアログ ボックスを閉じます。
  4. [OK] をクリックして [セキュリティ保護された通信] ダイアログ ボックスを閉じます。子のファイルとフォルダにこの設定を適用することを確認するメッセージが表示される場合は、[すべて選択] をクリックして [OK] をクリックします。
  5. [OK] をクリックして [SecureSite のプロパティ] ダイアログ ボックスを閉じます。

証明書に基づいた認証の検証

  1. Internet Explorer を起動して次のページを参照します。
    https://localhost/SecureSite/WebForm1.aspx
    セキュリティで保護されたプロトコルである https を使用します。
  2. このページにはクライアント証明書が必要であるというメッセージが表示されることを確認します。
  3. Internet Explorer を終了します。

クライアント証明書をインストールする方法

ここでは、クライアント側の証明書をインストールします。任意の証明機関から発行された証明書を使用するか、Microsoft Certificate Services を使用して独自の証明書を生成できます。

クライアント側の証明書の要求

  1. Internet Explorer を起動して次のページを参照します。
    http://localhost/CertSrv
  2. ウィザードで、以下の手順に従います。
    1. [証明書の要求] をクリックして [次へ] をクリックします。
    2. [要求する種類の選択] ページで [Web ブラウザ証明書] をクリックして [次へ] をクリックします。
    3. 必要な情報を入力します。[会社] ボックスには必ず MSDN と入力します。
    4. [送信] をクリックして要求を完了します。
  3. Internet Explorer を終了します。

クライアント側の証明書の発行

  1. [スタート] ボタンをクリックして [管理ツール] をポイントし、[証明機関] をクリックします。
  2. 証明機関のノードを展開して [保留中の要求] をクリックします。
  3. 送信した証明書要求をクリックします。[操作] メニューの [すべてのタスク] をポイントして [発行] をクリックします。
  4. [発行した証明書] フォルダに証明書が表示されることを確認し、その証明書をダブルクリックして参照します。
  5. [詳細設定] タブをクリックして [ファイルにコピー] をクリックします。ウィザードの手順に従って、証明書を Base-64 encoded X.509 形式の証明書として C:\Clientcert.cer に保存します。
  6. 証明書の [プロパティ] ダイアログ ボックスを閉じます。
  7. 証明機関ツールを終了します。

クライアント側の証明書のインストール

  1. Windows エクスプローラを開き、Clientcert.cer をダブルクリックして証明書ファイルを参照します。
  2. 以下の証明書のインポート ウィザードの手順に従います。
    1. [証明書] ダイアログ ボックスの [全般] タブで [証明書のインストール] をクリックして [次へ] をクリックします。
    2. [証明書の種類に基づいて、自動的に証明書ストアを選択する] をクリックして [次へ] をクリックします。
    3. [完了] をクリックし、ウィザードを終了します。
  3. 確認のメッセージ ボックスを閉じ、[OK] をクリックして証明書を閉じます。

動作の検証

ここでは、会社に "MSDN" を指定した証明書を使用するクライアント アプリケーションが、SecureSite サイトを参照できることを検証します。ユーザーは、マッピングの規則で指定したアカウントにマップされます。
  1. Internet Explorer を起動して次のページを参照します。
    https://localhost/SecureSite/WebForm1.aspx
  2. 以下のことを確認します。
    • Web ページが表示される。
    • 適切な Windows アカウントが使用されている。
    • 証明書の組織に "MSDN" と表示されている。

関連情報

SSL (Secure Sockets Layer) を使用して Web サイトをセキュリティで保護する方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
298805 Web サイトにアクセスするすべてのクライアントの SSL を有効にする方法

プロパティ

文書番号: 315588 - 最終更新日: 2005年10月13日 - リビジョン: 4.3
この資料は以下の製品について記述したものです。
  • Microsoft ASP.NET (included with the .NET Framework)
  • Microsoft Internet Information Services 5.0
キーワード:?
kbgrpdsasp kbhowto kbhowtomaster kbsecurity KB315588
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"
サポート期間が終了した「サポート技術情報」資料に関する免責事項
この資料は、マイクロソフトでサポートされていない製品について記述したものです。そのため、この資料は現状ベースで提供されており、今後更新されることはありません。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com