OpenSSLを使用してIISでクライアント証明書認証を構成する



こんにちは、%username%!

以前、楕円曲線を使用した証明書の生成について説明しました。

今日は、従来のRSAクライアント証明書を使用してIIS認証を簡単に構成し、サーバーとクライアントの証明書を生成する方法について説明します。 そして、いつものように、OpenSSLはこれを助けてくれます。

すべてが機能するためには、少なくとも3つの証明書が必要です。
  1. ルート証明書(認証局またはCA)。 残りすべてに署名します。
  2. ドメイン(サーバー)証明書。 IISはクライアントをチェックします。 逆に、クライアントはサーバーを認証できます。
  3. 顧客証明書


画像





作業には、 c:\ iisなどの別のフォルダーが必要です。 その中で、 シリアル拡張子なしでファイルを作成し、そこに01を書き込む必要があります。同様に、 そこに空のindex.txtファイルを作成する必要があります。 構成によっては、OpenSSLからこのフォルダー内にさらにいくつか作成するように求められる場合があります。 私の場合、それはnewcertsフォルダーでした。 また、OpenSSL.cfgで、 [CA_default]の dirをc:/ iisに変更する必要があります



1)ルート自己署名証明書を作成します。

openssl req -new -x509 -newkey rsa:2048 -days 1000 -out c:\iis\ca.crt -keyout c:\iis\ca.key







一連の簡単な質問の後、 ca.crt証明書とca.key秘密キーがiisフォルダーに表示されます



次に、IISがルートによって署名されたすべての証明書を認識するために、コンピューターの信頼できる認証局ストアにルート証明書インストールする必要があります。

  1. MMCを開始します
  2. 証明書スナップインを追加し、 コンピューターアカウントの証明書を管理することを示します 。そうしないと、何も開始されません。
  3. 「信頼されたルート証明機関」を開き、CAをそこにインポートします。


画像



できた! サーバーでの作業を開始できます。



2)IIS管理コンソールで[サーバー証明書]に移動し、右ボタンでメニューを開き、[ 新しい証明書要求を作成 ]をクリックします 。 c:\ iisにserver.csrとして保存します



ルート証明書を使用してサーバー証明書リクエストに署名します。

openssl ca -days 1000 -policy policy_anything -keyfile c:\iis\ca.key -cert c:\iis\ca.crt -in c:\iis\server.csr -out c:\iis\server.cer





-policy policy_anythingは、証明書にすべての可能なアプリケーションポリシーが提供されることを意味します。 最も簡単なオプション。 残りのパラメーターについては、説明の必要はないと思います。 主なことは、どのファイルを指定するか混乱しないことです。

その後、 server.cerサーバー証明書がc:\ iisに表示されます。これはIISにインストールする必要があります。

これを行うには、再び「サーバー証明書」に進み、「証明書のインストール要求」を選択して、c:\ iis \ server.cerを指定します。

それだけです、サーバーには証明書があります。

次に、ノードのバインディングに新しいhttpsバインディングを作成し、リストからサーバー証明書を選択する必要があります。

画像



その後、次のようにノードのSSL設定でオプションを設定する必要があります。 画像



できた! クライアントが残っています。 ただし、この段階でも、すでにhttps:// localhost /にアクセスして、証明書がないと許可されないことがわかります。



3)クライアント証明書のリクエストを生成します

openssl req -new -newkey rsa:2048 -days 1000 -keyout c:\iis\client.key -out c:\iis\client.csr





ここでは-x509を指定しなかったため、通常の証明書リクエストとクライアントの秘密キーを受け取りました。



リクエストに署名します。

openssl ca -days 1000 -policy policy_anything -keyfile c:\iis\ca.key -cert c:\iis\ca.crt -in c:\iis\client.csr -out c:\iis\client.crt





ここでもすべてが明らかです。その結果、 client.crtクライアント証明書を取得します。



ここで、キーとともにクライアント証明書をWindows証明書ストアにインポートするには、crt +キーを.pfxコンテナーに変換する必要があります。

openssl pkcs12 -export -inkey c:\iis\client.key -in c:\iis\client.crt -out c:\iis\client.pfx





やった! client.pfxを取得しました 。これをダブルクリックすると、証明書インポートダイアログを呼び出して、実際に個人ストアで発生したことをインストールできます。



すべてが正しく完了したら、証明書を個人用ストレージにインポートした後、 https:// localhost /にアクセスして内容を表示できるようになります



他のデータを使用して別の証明書を生成し、インポートすることもできます。 次に、サーバーに入ると、いずれかを選択するように求められます。 画像



それだけです)

最後に、ページのaspxコード(Default.aspxとして保存)を使用すると、すべてを確認できます。クライアント証明書に関する情報が表示されます。

<%@ Page Language="C#"%>

<%@ Import Namespace="System.Security.Cryptography" %>

< script runat ="server" >

private void Page_Load( object sender, System.EventArgs e)

{

Response.Write( "<table width=50% cellspacing=1><tr> <th colspan=2>Current ClientCertificate Settings</th></tr>" );



Response.Write( "<tr><td>Subject</td><td>" +Request.ClientCertificate.Subject+ "</td></tr>" );

Response.Write( "<tr><td>SHA1 Fingerprint</td><td>" +GetCertificateFingerPrint()+ "</td></tr>" );

Response.Write( "<tr><td>Valid from</td><td>" +Request.ClientCertificate.ValidFrom+ "</td></tr>" );

Response.Write( "<tr><td>Valid Until</td><td>" +Request.ClientCertificate.ValidUntil+ "</td></tr>" );

Response.Write( "<tr><td>Issuer</td><td>" +Request.ClientCertificate.Issuer+ "</td></tr></table>" );

}

private String GetCertificateFingerPrint()

{

if (Request.ClientCertificate.IsPresent)

{

byte [] raw = Request.ClientCertificate.Certificate;

SHA1 sha1 = new SHA1CryptoServiceProvider();

byte [] hash = sha1.ComputeHash(raw);

StringBuilder res = new StringBuilder();

for ( int i = 0; i < hash.Length; i++)

{

res.Append(hash[i].ToString( "X2" ));

}

return res.ToString();

}

return "" ;

}

</ script >











楽しんでください!




All Articles