この記事でわかること
Kerberos認証とは?
Kerberos認証はSSO(シングルサインオン)の一種です。
認証が必要なWebサービスやアプリケーションを使用する場合、複数のIDを用意し管理するのは手間がかかります。SSOは1つのIDで複数のWebサービスやアプリケーションの認証を可能にします。
Kerberos認証では1度IDとパスワードを使用して認証するとチケットが発行され、2度目以降はチケットを使用して認証します。
知っておくべきKerberos認証の基礎知識3つ
Kerberosの構成要素や認証の流れはどうなっているのでしょうか。ここからは、Kerberos認証の基礎知識3つについて解説していきます。
基礎知識1:Kerberosの認証方法
Kerberos認証では、IDとパスワードを使用した認証が成功すると「チケットを発行するためのチケット」が発行されます。チケットの有効期限が切れるまではIDとパスワードでの認証は必要ありません。
Kerberos認証では、クライアントは「チケットを発行するためのチケット」をASに送信して、「サーバにアクセスするためのチケット」を要求します。また、クライアントから「サーバにアクセスするためのチケット」をサーバに送信して認証を行います。
基礎知識2:Kerberos認証の用語
ここからは、基礎知識の2つ目であるKerberos認証で使用する用語を解説していきます。事前に用語を覚えておくとよいでしょう。
KDC(Key Distribution Center)
どのIDがどのサーバに対する権限を持っているかを一括管理する機能です。AS(Authentication Service)とTGS(Ticket Granted Service)を含んでいます。
AS(Authentication Service)
IDとパスワードの認証を行うサービスです。認証が成功するとTGT(Ticket Granting Ticket)を発行します。
KDC(Key Distribution Center)に含まれています。
TGT(Ticket Granting Ticket)
「チケットを発行するためのチケット」です。
AS(Authentication Service)で発行されたチケットで、TGS(Ticket Granted Service)にTGTを使用して認証することで「サーバにアクセスするためのチケット」を取得します。
TGS(Ticket Granted Service)
TGT(Ticket Granting Ticket)を認証し、「サーバにアクセスするためのチケット」を発行するサービスです。サーバ毎に別々のチケットを発行します。
principal
Kerberos認証で管理されるユーザやサーバを表しています。KDC(Key Distribution Center)はprincipalでユーザやサーバを識別します。principalをIDと表示することもあります。
realm
ケルベロス認証で扱うグループを表します。ケルベロス認証ではrealmをグループ名として論理ネットワークを構築します。要するにドメイン名と同じ意味を持ちます。
基礎知識3:Kerberos認証の流れ
Kerberos認証では1度IDでの認証をするとチケットを発行します。次回以降はIDを使わずチケットを使用して認証を行います。IDでの認証からチケットを使用するまでの流れを解説していきます。
Kerberos認証の流れ1:認証要求
まずは、クライアントからprincipalとパスワードをASに送信します。principalとパスワードの代わりにkeytabファイルを使用することもできます。クライアントで使用する製品によってはkeytabファイルが必須の場合もあります。
Kerberos認証では、キャッシュにTGTが存在する場合はこの認証要求は行われません。
Kerberos認証の流れ2:TGTの発行
対応するIDが存在する(認証成功)とASは、2つの情報をクライアントに送信します。
1つ目の情報は、Client/TGS Session Keyです。これはセッション毎に生成される共通鍵暗号の共通鍵です。principal毎に生成された共通鍵で暗号化した情報です。
2つ目の情報は、TGTです。クライアントのprincipalとネットワークアドレス、有効期限、Client/TGS Session Keyを一纏めにし、TGSの暗号鍵で暗号化した情報です。
Kerberos認証の流れ3:TGTの保存
クライアントはASから受信したTGTをキャッシュに保存します。Kerberos認証では、キャッシュに保存したTGTの有効期限が切れるまでは、principalとパスワード(もしくはkeytab)は使用しません。
Kerberos認証の流れ4:「サーバにアクセスするためのチケット」取得
クライアントは2つの情報をTGSに送信します。
1つ目の情報はTGTとアクセスしたいサーバのprincipalです。2つ目の情報はクライアントのprincipalとマシン日付です。Client/TGS Session Keyで暗号化した情報です。
TGSはTGTに含まれるprincipalとクライアントから受信したクライアントのprincipalが一致するか確認します。principalが一致することが確認できた場合2つの情報をクライアントに送信します。
1つ目の情報は「サーバにアクセスするためのチケット」です。クライアントのprincipalとネットワークアドレス、有効期限、Client/Server Session Keyをひとまとめにし、サーバの暗号鍵で暗号化した情報です。
2つ目の情報はClient/Server Session Keyです。これはセッション毎に生成される共通鍵暗号の共通鍵です。Client/TGS Session Keyで暗号化した情報です。
Kerberos認証の流れ5:サーバへのチケット送信
クライアントは2つの情報をサーバに送ります。
1つ目の情報は「サーバにアクセスするためのチケット」です。2つ目の情報はクライアントのprincipalとマシン日付です。Client/Server Session Keyで暗号化してサーバに送信します。
サーバは「サーバにアクセスするためのチケット」に含まれるprincipalとクライアントから受信したprincipalが一致するか確認します。
principalが一致することが確認できた場合サーバにアクセスするためのチケット」に含まれるマシン日付とクライアントから受信したマシン日付を比較します。マシン日付の差異が5分以上あると認証失敗となります。
サーバはprincipalとマシン日付の確認に成功すると、クライアントから受信したマシン日付をClient/Server Session Keyで暗号化してクライアントに送信します。
クライアントはサーバから受信したマシン日付とサーバに送信したマシン日付を比較します。マシン日付が一致した場合にサーバとのセッションが成立します。
Kerberos認証のメリット
Kerberos認証は第三者による不正な認証を防止し、トラフィックを減らします。ここからは、Kerberos認証のメリットについて詳しく見ていきましょう。
安全性
Kerberos認証では一度principalで認証すれば、以後はTGTを使用して認証します。また、認証の通信には暗号化されたマシン日付が含まれるため、認証の都度クライアント/サーバ間で送信内容が異なります。
Kerberos認証では、認証の都度送信内容が変わるため、第三者によるリプレイアタックを実施することができません。
Kerberos認証で発行されたチケットにはクライアント情報が含まれていますが、暗号化されており、クライアントで復号することはできません。クライアントではチケットの確認方法がないため、第三者が同じチケットを使用してサーバに認証することもできません。
トラフィックが少ない
Kerberos認証プロセスが完了すると、クライアントはチケットを使用しサーバにアクセスします。クライアントはチケットの有効期限が切れるまではkdcに接続しません。
active directoryやiis、samlを使用したssoでは、クライアントはサーバに接続するたびにドメインコントローラで認証を行う必要があります。
Kerberos認証ではチケットの有効期限が切れるまではkdc(ドメインコントローラに該当)に接続しないため、通信時のトラフィックが少なくなります。
Kerberos認証を使いこなそう
Kerberos認証を行うためにまずは、Kerberosクライアントをインストールします。
$ su
# yum install krb5-workstation krb5-libs
次にKerberos認証を行うためにrealmの設定を行います。
/etc/krb5.conf
というファイルに必要な設定を記載します。ケルベロス認証の管理者に問い合わせればkrb5.confファイルをもらえることもあります。
以下のようにrealmを記載します。
[realms]
realmを指定 = {
kdc = KDCのURLを指定
admin_server = KDCのURLを指定
kpasswd_server = KDCのURLを指定
}
Kerberos認証の準備が整ったらKerberosクライアントを使用しTGTを取得します。principalとパスワードを使用しKerberos認証を行う場合は以下のコマンドを実行します。
# kinit principalを指定 passwordを指定
keytabを使用しKerberos認証を行う場合は以下のコマンドを実行します。
# kinit -t keytabファイルを指定
以上でKerberos認証が実施されTGTがキャッシュに保存されるので、各サーバのサービスを利用することができるようになります。
Kerberos認証はIDを使用した認証の回数を減らすことでIDの漏洩リスクを漸減します。また、チケット認証時に時刻を使用しているため、セッションジャックもできません。
Kerberos認証は様々な製品に取り入れられているため、用語や使用方法の知識が役に立つ機会が増えていくことが予想できます。SSOの一つとして是非覚えておきましょう。
インフラエンジニア専門の転職サイト「FEnetインフラ」
FEnetインフラはサービス開始から10年以上『エンジニアの生涯価値の向上』をミッションに掲げ、多くのエンジニアの就業を支援してきました。
転職をお考えの方は気軽にご登録・ご相談ください。