#pIdentity
Kerberos SSO: ドメイン PC、Outlook、メール アプリでパスワードなしのサインイン
Kerberos を使うと、社内ネットワーク上の Windows PC はパスワード入力なしでサインインできます: Webmail と管理画面は SPNEGO ("Windows でサインイン")、Outlook は Negotiate による MAPI、EWS、ActiveSync、Autodiscover、Thunderbird などのメール アプリは SASL GSSAPI による IMAP、SMTP、POP3、ManageSieve を使用します。nextxch はアップロードされた keytab でチケットを自ら検証します。これは Linux でも、ドメインに参加していない Windows サーバーでも動作します。nextxch がドメイン メンバー上で動作している場合は、keytab の代わりにマシン アカウントを使用できます。NTLM は意図的にサポートしていません。
SPN のホスト名は、クライアントが使用する名前 (例: mail.example.com) と完全に一致し、A レコードで解決される必要があります。サービス アカウントのパスワードを変更するたびに、keytab を再作成してアップロードしてください。"Kerberos を確認" で各 SPN のキー バージョンと暗号化方式が表示されます。
Active Directory: サービス アカウント、SPN、keytab
ドメイン管理者として PowerShell を使用します。最初の SPN に対して ktpass を 1 回実行します。同じアカウントのそれ以降の SPN はすべてキーを共有するため、setspn だけで済みます。
# 1. Service account (password never expires, AES only)
New-ADUser -Name svc-nextxch -AccountPassword (Read-Host -AsSecureString) `
-Enabled $true -PasswordNeverExpires $true -KerberosEncryptionType AES256
# 2. Register the service principals (host name = name clients use)
setspn -S HTTP/mail.example.com CORP\svc-nextxch
setspn -S imap/mail.example.com CORP\svc-nextxch
setspn -S smtp/mail.example.com CORP\svc-nextxch
setspn -S pop/mail.example.com CORP\svc-nextxch
setspn -S sieve/mail.example.com CORP\svc-nextxch
# 3. Create the keytab (resets the account password)
ktpass -princ HTTP/mail.example.com@CORP.LOCAL -mapuser CORP\svc-nextxch `
-crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -pass * -out nextxch.keytab
# 4. nextxch Admin > Identity sources > Kerberos
# realm CORP.LOCAL, SPNs as above, upload the keytab, "Check Kerberos"
# Machine account mode (nextxch on domain member MAILSRV, no keytab):
setspn -S HTTP/mail.example.com CORP\MAILSRV$
setspn -S imap/mail.example.com CORP\MAILSRV$
MIT Kerberos、Heimdal、FreeIPA
プリンシパルを作成し、そのキーを keytab にエクスポートします。FreeIPA の場合: ipa service-add と ipa-getkeytab。
# MIT / Heimdal
kadmin -q "addprinc -randkey HTTP/mail.firma.de@FIRMA.LOCAL"
kadmin -q "addprinc -randkey imap/mail.firma.de@FIRMA.LOCAL"
kadmin -q "addprinc -randkey smtp/mail.firma.de@FIRMA.LOCAL"
kadmin -q "ktadd -k /tmp/nextxch.keytab HTTP/mail.firma.de imap/mail.firma.de smtp/mail.firma.de"
# FreeIPA
ipa service-add HTTP/mail.firma.de
ipa service-add imap/mail.firma.de
ipa-getkeytab -s ipa.firma.local -p HTTP/mail.firma.de -k /tmp/nextxch.keytab
ipa-getkeytab -s ipa.firma.local -p imap/mail.firma.de -k /tmp/nextxch.keytab
# Test vom Client:
kinit anna && curl --negotiate -u : https://mail.firma.de/api/auth/kerberos
実際の AD を使用した手動テスト
自動テストでは、生成された keytab からチケットを検証します。実際のドメイン コントローラーでは、次のようにもテストしてください:
# Auf einem Domänen-PC als normaler Benutzer:
klist purge
Invoke-WebRequest https://mail.firma.de/api/auth/kerberos -UseDefaultCredentials
klist # zeigt Ticket für HTTP/mail.firma.de
# Erwartet: 200 {"ok":true,"email":"anna@firma.de"}
# IMAP mit GSSAPI (Linux-Client in der Domäne):
kinit anna@FIRMA.LOCAL
curl -v --login-options AUTH=GSSAPI --negotiate -u : imaps://mail.firma.de/INBOX
設定、既定値 & ベスト プラクティス
| 設定 / 場所 | 説明 | 既定値 | 本番環境のベスト プラクティス |
|---|---|---|---|
Keytab |
ktpass、ktutil、kadmin が書き出す MIT 形式。サーバーのキーリングで暗号化して保存され、二度と表示されません。管理ページにはプリンシパル、kvno、暗号化方式のみが一覧表示されます。 | Keytab-Modus |
AES256 を使用してください。RC4 キーも動作しますが、"Kerberos を確認" で警告が表示されます。 |
Benutzerzuordnung |
Kerberos プリンシパル (anna@CORP.LOCAL) は、ID ソースを通じて userPrincipalName、sAMAccountName、またはメール アドレスにマッピングされます。受け付けるのは構成済みのレルム (および追加で許可したレルム) のみです。 | Realm Pflicht |
まず AD ID ソースをセットアップして同期し、その後 Kerberos を有効にしてください。 |
Browser |
ブラウザーは、信頼済みのイントラネット アドレスにのみ Kerberos チケットを送信します。そうでない場合は、通常のサインイン ページが表示されます。 | Automatischer Versuch aus |
GPO "サイトとゾーンの割り当て一覧": https://mail.example.com = 1 (イントラネット)。Chrome/Edge: AuthServerAllowlist、Firefox: network.negotiate-auth.trusted-uris。 |
Outlook und ActiveSync |
MAPI、EWS、Autodiscover、ActiveSync は、Basic に加えて "WWW-Authenticate: Negotiate" を提示します。これにより、ドメイン参加 PC 上の Outlook はサインイン中のユーザーのチケットを使用します。 | Negotiate + Basic |
Outlook の [アカウント設定] > [詳細設定] > [セキュリティ] で、"ログオン ユーザー情報を常に確認する" をオフにしてください。 |
Mail-Programme (GSSAPI) |
IMAP、SMTP 送信、POP3、ManageSieve は SASL GSSAPI (相互認証付き、RFC 4752) に対応しています。Thunderbird: アカウント設定 > サーバー > 認証方式 "Kerberos / GSSAPI"。 | imap/, smtp/, pop/, sieve/ |
Linux クライアントでは最初に kinit を実行します。その後 klist で imap/mail.example.com のチケットが表示されます。 |