開発用の自己署名証明書を作成する方法についての前回の投稿を読んで、「やった!すばらしい!」と思われたことでしょう。 しかし、実際にどのように使用するのでしょうか? このブログ記事では、PC または Windows Server 上の IIS を設定し、IIS クライアント証明書マッピング認証と共に自己署名証明書を使用するための手動プロセスを順を追って説明します。
私の例では、私のローカルホスティングと任意のドメイン名を使用していますが、インターネット サービス プロバイダまたはドメイン ホスティング企業から固定 IP アドレスを持っており、ファイアウォール、ルーターなどを正しく設定し、そのアドレスにドメイン名を指定すれば、実際のサーバー上の IIS でもこれを実行できることを確認しておいてください。 しかし、私はあなたのクライアント/ユーザーは、あなたの自己署名されたルートとクライアント証明書を受信し、インストールする意思がない限り、自己署名証明書と一緒にどちらかをお勧めしません。 この良い例が、閉じたイントラネットで、すべてのエンドユーザーのコンピュータにアクセスできる場合です。そうすれば、彼らのマシンに証明書をインストールすることができます。 もし、商業生産に適したソリューションをお探しなら、自己署名の代わりに証明書を購入することをお勧めします。 Windows 8.1 Pro、IIS 8.5、Visual Studio Premium 2013を搭載したPCを使用しています。 (PC 上の Windows Server 2012 R2 Hyper-V VM でもテストしました)。
IIS のインストール
ホスト サーバーとして機能するマシンにまだ IIS をインストールしていない場合は、PC の Windows ボタンを押して「Windows の機能のオンとオフを切り替える」で検索してインストールしてください (またはコントロール パネルで検索してください)。 インターネット インフォメーション サービスと以下の子ノードを確認します。
(If you are running on .NET 3.5 you need to check the .NET Extensibility 3.5 and ASP.NET 3.5, and ASP.NET 3.5).5)
Windows Server 2012 の場合、サーバー マネージャー ダッシュボードに移動します ➜ 役割と機能の追加をクリックします ➜ 役割ベースまたは機能ベースのいずれかを選択します ➜ 役割と機能ベースのいずれかを選択します。Web Server (IIS) というサーバーの役割と次の子要素を有効にします
また、次の子要素でアプリケーション開発にチェックが入っていることを確認します
OK をクリックして Windows にインストールします。
サンプル プロジェクトの作成
このデモのために、ローカル IIS でホストする本当に簡単なミニ アプリケーションを作成します。 (Github で私のものを直接フォークすることもできます)
Visual Studio で、新しい空の Web アプリケーションを作成し、web api
私たちには、非常にシンプルなコントローラが必要です:
using System.Web.Http;namespace IISWithCertificatesSample.WebApi.Controllers{ public class CatsController : ApiController { public IHttpActionResult Get() { return Ok("A lot of cats meowing for food"); } }}
これで両方のルートを実行し (F5) /api/cats でローカルホストに移動できるはずです (私のものは http://localhost:62172/api/cats と同じ)。 素晴らしい、ローカルの IIS を使用してこのアプリケーションをホストできます。
NOTE: IIS Express を使用するように設定されている Visual Studio (F5) から直接アプリケーションを実行することはもうありません。 サンプルアプリケーションを含む新しいWebサイトとアプリケーションプールを追加します。 (右クリックでサイト ➜ ウェブサイトの追加) パスは、Webサイトのドキュメントがあるフォルダーを指定する必要があるので、Webサイトを公開している場合は、そこにパスを指定します。 この非常に単純な例では、Visual Studio のプロジェクトに直接パスを使用します。
次に、ホスト名、別名、ドメイン名を指定して、このサイトをローカルにホストしてみましょう。
ローカルでホストするだけなので、ローカル ホスト IP アドレスをホスト名にバインドするために、ローカル ホスト ファイルにサイトを追加する必要があります。 これは、管理者としてメモ帳を実行し、パスにある hosts ファイルを開くことで行われます: %systemroot%System32³³driversetc
最後に以下を追加します。 127.0.0.1 yourdomain.com www.yourdomain.com
ow whenever I surf to yourdomain.com and www.yourdomain.com on my machine it will resolve the site with my newly added bindings to the 127.0.0.1 IP address (which is localhost’s IP).
Let’s add the www.Yourdomain.com www.yourdomain.com Let’s added www.Yourdomain.1.0 IP addresses (localhost’s IP).
Let’s add your world.com www.yourdomain.com Let’s add your world.com www.yourdomain.com のバインディングをIISマネージャーでも追加しましょう
バインディングで設定したドメイン名へwwwあり、なしを選択して /api/cats という末尾を追加すればニャンニャン猫が出るはずです。 (キャッシュを空にしない場合)
重要: Host ファイルを変更して、追加したドメイン名への要求をローカル ホスト IP アドレスにリダイレクトしたため、これはローカル マシン上でのみ発生します。 これは開発用で、実際の Web ホスティング サーバーに展開する前に変更をテストすることができます。
SSLでサーバーを保護する
今度は、サーバーに SSL 証明書を追加して、猫を保護します。
IIS マネージャーでサーバーに移動 (左側の木の一番上) ➜ スクロールダウンして、サーバー証明書をダブルクリックします。
(自己署名証明書がすでにここにある場合は、バインディングの手順に進みます)
SSLによるhttps通信を有効にするには、自己署名サーバー証明書をインポートする必要があるので、[インポート…]をクリックします
…[include]をクリックして、.server certを検索してください。pfxファイルを見つけ、パスワード(コマンドバッチファイルの-poパラメータ)を記入し、OKをクリック
あなたの証明書が追加されました
新しく追加した証明書をダブルクリックして信頼されているか確認(あなたの自己署名証明書は前回の記事で正しい店舗へ追加されていますので、もう一度です。 今迷っているなら、それを読んでください;-))
ここまで、順調です! 先ほどと同じ方法で、ポート 443 の https を選択し、ホスト名として自分のドメインを選択し、ドロップダウンリストから自己署名証明書を探します
サーバー名表示ボックスをチェックして、ホスト名を SSL ハンドシェークの最初のステージで送信して同じ IP アドレスに複数の証明書がインストールされることを可能にします。 同じ手順を繰り返して、www.yourdomain.MySQLにSSLを追加します。com の SSL を追加しますが、CN 名がドメイン名と一致する証明書またはワイルドカード証明書
Our bindings are complete for now
ただいまhttps://yourdomain.com/api/catsと https://www.yourdomain.com/api/cats
NOTE.NETWORK を使用することが可能です。 Firefox は Windows 証明書ストアを使用しないので、ルート CA を手動で追加する必要があります。 Firefox の設定 ➜ オプション ➜ 詳細 ➜ 証明書の表示 ➜ 認証局 ➜ CARoot.cer ファイルのインポート
IIS Client Certificate Mapping Authentication
ルートおよびサーバー証明書の使用方法を確認してきましたが、以前の投稿で作ったクライアント証明書はどうすればいいのかと思われることでしょう。 これは、例えば、ユーザーログインとパスワードのアプローチではなく、サーバーがクライアントに証明書の提示を求め、それが正しいものであればクライアントにログインを許可するという方法でクライアントを認証する必要がある場合に使用されます。 これは、Many-To-One または One-To-One マッピングで行うことができ、IIS Manager で両方を手動で行う方法を紹介します。
サーバーにクライアントからの SSL 証明書を要求するようにします
次に、検証する必要のあるクライアント証明書をサーバーに知らせるように設定する必要があります。 で、Configuration EditorでiisClientCertificateMappingAuthenticationセクションを選択します(path systemを入力することもできます。webServer/security/authentication/iisClientCertificateMappingAuthentication を Section フィールドに入力することもできます)
Many-To-One Mappings
1 人のユーザーに対して複数のクライアント証明書をマップしたい場合は、この方法が必要です。 また、クライアント証明書がマッピングのルール基準に一致する限り、クライアント証明書 (および自己署名証明書であるため CA ルート) をどのマシン上の他のユーザーにもインストールし、アクセスすることによって、このようにクライアント証明書を共有することができます。
Enable the client certificate mapping authentication
To add a mapping click the … of the manyToOneMappings
ここでアクセスを許可するユーザを追加することができます。
マッピングのプロパティを入力し、アクセスまたは拒否を設定する各ユーザーについて繰り返します。
IMPORTANT: これを機能させるためには、有効なユーザー名とパスワードを入力する必要があり、私のコンピューターがサーバーなので、認証情報は私の Windows ユーザー名とパスワードになります。 ルールのプロパティと … ボタンをクリックします
例として、サーバーがクライアント証明書をチェックして、正しい CA ルートによって署名されているかを確認するルールを 1 つ追加してみます。 さらに安全性を高めるために、さらにルールを追加してください。詳細なドキュメントについては、IIS Many-To-One Mapping のリファレンスを参照してください。
IISマネージャーで変更を適用することを忘れないように、ルールとマッピングウィンドウを閉じ、適用
新しいシークレット ブラウザー ウィンドウを開き、キャッシュとクッキーを白紙から始めるようにして、URLを /api/cats で入力してブラウザーを見ると証明書を求めていることがわかります。 ClientCertを選択してokをクリックすると、catsにアクセスできるようになります。
これが機能しない場合、クライアント証明書が、ブラウザの証明書ストアと同様に CurrentUser/Personal ストアにあることを確認してください。 はい」の場合は、コントロールパネル ➜ インターネットオプション ➜ コンテンツ で、「SSLの状態を消去する」をクリックします。
新しいシークレット ウィンドウを開いて再試行すると、ブラウザはクライアント証明書の入力を求めるはずです。
NOTE: 先に説明したように、Firefox には独自の証明書ストアがあるので、これを使用するには、クライアント証明書を [証明書] にインポートする必要があります。 この方法では、各ユーザー マッピングに個別のクライアント証明書が必要になります。 多対一マッピングを無効にして、同じ証明書とユーザーを使用するか、新しいものを作成することができます。 Configuration Editorに戻り、iisClientCertificateMappingAuthenticationセクションを再度開きます。 oneToOneMappingsの…をクリックします。
証明書にマッピングを追加するために、クライアント証明書ファイルの公開キーをエクスポートする必要があります。 これは、マシン管理コンソール (Windows ボタンを押して mmc を検索) からエクスポートできます。ローカル マシンの証明書のパーソナル ストアにスナップインし、秘密鍵なしで使用するクライアント ssl 証明書を base64 形式でエクスポートします。
新しくエクスポートした証明書を右クリックし、メモ帳で開く。 証明書自体の改行をすべて削除します。
次に、それをマッピングの証明書プロパティ フィールドにコピーし、残りを記入します。
IMPORTANT: これを動かすには、有効なユーザー名とパスワードを入力しなければならず、私のコンピューターがサーバーなので、認証情報は Windows ユーザー名とパスワードになるでしょう。
そして、試してみて、プロンプトが表示されたら、先ほどマップしたユーザーにマップした証明書を選択します。
この記事がお役に立ったことを願っています。次の記事では、自己署名証明書を Windows Azure とともに使用する方法と C# コードで IIS を構成する方法を説明します。 http://blog.jayway.com/2015/04/21/configure-a-windows-azure-cloud-service-to-use-your-self-signed-certificates-for-iis-client-certificate-mapping-authentication/
Have a good one =)
.