none
Kerberos認証とKeytabファイルについて RRS feed

  • 質問

  • Kerberos認証についての理解に詰まってしまっており、皆様のお知恵を拝借させていただければと思います。
    以下、私の学習した範囲での理解を踏まえて記載させていただきます。
    そもそもの理解が誤っていることもあるかと思いますので、都度ご意見賜れれば幸いです。

    ■前提
    IISで同一のWebサービスを提供しているサーバが2台あります。それぞれ

    • WEBAP01
    • WEBAP02

    というコンピュータ名で、それぞれ同一ドメインのPRODUCT.COMに所属しています。
    ここにネットワークアプライアンスである負荷分散装置を用意し、仮想ホスト名WEBSERVICE01をDNSに登録します。
    サービスのユーザは通常この仮想ホスト名WEBSERVICE01に対してアクセスを行います。

    このWebサービスにおいてKerberos認証を行うシナリオを検討します。

    ■考察
    このシナリオにおいては、WEBSERVICE01というPrincaipalをKDCが把握していないため、Kerberos認証となりません。
    これを解消するため、WEBSERVICE01.PRODUCT.COMというPrincipalをKDCに登録します。
    その手段としてWindowsにおいては、

    • WEBSERVICE01という名称のユーザを作成する
    • 上記で作成したWEBSERVICE01ユーザに、SPN:WEBSERVICE01.PRODUCT.COMを登録する
      # setspn -s WEBSERVICE01.PRODUCT.DOMAIN PRODUCT\WEBSERVICE01

    という手段を用いていると理解しています。

    仮にこれがIISではなく、他のJ2EEサーバ等であった場合、上記PrincipalのKeytabファイルをKDCにて生成し、J2EEサーバ側で設定する必要があります。

    ■疑問

    IISでのKerberos認証実装において、Keytabファイルの生成およびIIS側でのKeytab設定というプロセスはなぜ不要なのでしょうか。

    例えば負荷分散装置を用いずサーバ直結である場合は、SPNの登録もKeytabファイルの生成も不要です。
    SPNの登録についてはドメイン参加時にコンピュータオブジェクトとして登録されているであろうから、まだ理解できます。
    しかしKeytabファイルの部分については理解ができておりません。

    2019年6月6日 12:26

回答

  • チャブーンです。

    この件ですが、Kerberosにおけるkeytabの役割について、再確認する必要があります。ここではサービスチケットのスコープになりますが、keytabの機能はありていにいえば、KDCから発行されたサービス自身のチケット(とその中のセッションキー)の暗号・復号に必要な鍵という理解です。

    この機能があるので、サービスチケットのセキュリティが保たれるわけですが、Active Directory+Windowsサーバーの場合、keytab機能は「コンピューターアカウントのパスワード」がそれを行います。SPNはコンピューターアカウントが保持する情報だからです。コンピュータアカウントのパスワードはKDC=ドメインコントローラーと対象サーバーのLSA(ローカルセキュリティ機関)に同じものが保存されているので、この動作が可能なわけです。詳細については、したのMSの資料が参考になると思います。

    https://technet.microsoft.com/en-us/library/cc772815(v=ws.10).aspx


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。



    2019年6月7日 1:32
  • ご回答いただきありがとうございます。 keytabファイルの用途についてはチャブーンさんと同様の理解です。 また、いただいたリンクから更に調査を重ねるうちに以下の記事を発見しました。こちらの内容がまさに私の疑問への回答となっておりましたので、記載しておきます。 https://blogs.technet.microsoft.com/askds/2011/08/09/kerberos-and-load-balancing/ 結論から申し上げますと、私の質問文中、考察で述べた負荷分散環境におけるSPNの設定方法は誤りであり、 Webサービスのプロセスを起動するサービスアカウントを、共通のドメインアカウントとして双方の実サーバ側で設定し、このサービスアカウントに仮想ホスト名からなるSPNを設定するというのが正解とのことでした。この時、必要であれば実サーバホスト名によるSPNも当該サービスアカウント設定するが、その際、実サーバホスト名によるSPNはそれぞれのホスト名コンピュータアカウントによって自動的に登録されているため、SPNの重複に留意する必要あり。
    • 回答としてマーク gatebreaker 2019年6月7日 15:55
    2019年6月7日 15:55

すべての返信

  • チャブーンです。

    この件ですが、Kerberosにおけるkeytabの役割について、再確認する必要があります。ここではサービスチケットのスコープになりますが、keytabの機能はありていにいえば、KDCから発行されたサービス自身のチケット(とその中のセッションキー)の暗号・復号に必要な鍵という理解です。

    この機能があるので、サービスチケットのセキュリティが保たれるわけですが、Active Directory+Windowsサーバーの場合、keytab機能は「コンピューターアカウントのパスワード」がそれを行います。SPNはコンピューターアカウントが保持する情報だからです。コンピュータアカウントのパスワードはKDC=ドメインコントローラーと対象サーバーのLSA(ローカルセキュリティ機関)に同じものが保存されているので、この動作が可能なわけです。詳細については、したのMSの資料が参考になると思います。

    https://technet.microsoft.com/en-us/library/cc772815(v=ws.10).aspx


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。



    2019年6月7日 1:32
  • ご回答いただきありがとうございます。 keytabファイルの用途についてはチャブーンさんと同様の理解です。 また、いただいたリンクから更に調査を重ねるうちに以下の記事を発見しました。こちらの内容がまさに私の疑問への回答となっておりましたので、記載しておきます。 https://blogs.technet.microsoft.com/askds/2011/08/09/kerberos-and-load-balancing/ 結論から申し上げますと、私の質問文中、考察で述べた負荷分散環境におけるSPNの設定方法は誤りであり、 Webサービスのプロセスを起動するサービスアカウントを、共通のドメインアカウントとして双方の実サーバ側で設定し、このサービスアカウントに仮想ホスト名からなるSPNを設定するというのが正解とのことでした。この時、必要であれば実サーバホスト名によるSPNも当該サービスアカウント設定するが、その際、実サーバホスト名によるSPNはそれぞれのホスト名コンピュータアカウントによって自動的に登録されているため、SPNの重複に留意する必要あり。
    • 回答としてマーク gatebreaker 2019年6月7日 15:55
    2019年6月7日 15:55