1. Kerberos到底在解决什么问题
1.1 没有Kerberos之前,网络认证的痛点
Kerberos这个协议,搞网络的应该都听过,但真正能把它讲清楚的人不多。它来自MIT,是一种基于对称密钥加密的网络身份认证协议,核心思路是通过密钥分发中心(KDC)发放加密票据,完成客户端与服务端的双向认证。简单说,就是让你在网络里不用反复输密码,也能证明"我是我",服务端也能反过来证明"我是服务端"。
先想一个问题:在没有Kerberos的年代,局域网里要访问一台文件服务器,最粗暴的办法就是每次输入账号密码。密码在网络上传输,如果链路没有加密,抓包就能直接看到明文密码。就算加密传输,每次认证都把密码发给对方,服务的实现稍有疏漏,密码就可能泄露。而且网络服务一多,每个服务一套密码体系,用户要记的账号密码越来越多,管理员要维护的口令表也越来越乱。
后来出现了所谓"挑战-响应"(challenge-response)机制,密码不直接传,而是服务端发一段随机数,客户端用密码做变换后返回,服务端用自己存的密码副本验证。这解决了密码明文传输的问题,但本质上还是"客户端向服务端证明自己知道密码",也就是单向认证。这里面有个漏洞:如果攻击者伪装成服务端,它也能发挑战,你响应完,它拿你的响应去做离线暴力破解,或者干脆把你引导到一个假的服务器上,把密码验证信息骗走。你根本没法确认你连的到底是不是真的服务器。
1.2 Kerberos的设计目标与核心思路
Kerberos的设计目标很明确:第一,密码不经过网络传输;第二,认证过程不依赖某个服务自己去核对密码,而是由一个统一的、可信的第三方来发放"通行证";第三,客户端和服务端之间需要双向认证,谁也别想糊弄谁。
这个"通行证"就是票据(ticket),第三方就是密钥分发中心KDC。整个体系里,用户只在最开始用密码换取一张"票据授予票据"(TGT,Ticket Granting Ticket),之后访问任何配置了Kerberos的服务,都用这张TGT去申请对应的服务票据,整个过程不再需要输入密码。票据本身用对称密钥加密,里面包含用户身份、目标服务、有效期、会话密钥等信息。任何人拿到票据,如果不知道KDC的加密密钥,都无法伪造或篡改。
这个名字也有来头。Kerberos来自希腊神话里守卫地狱大门的三头犬Cerberus,翻译成Kerberos,三个头的寓意正好对应认证流程中的三个实体:客户端、KDC、服务端。MIT的Project Athena在20世纪80年代把它做出来,后来演进成Kerberos V5,标准定义在RFC 4120里。如今Windows AD域认证、Hadoop集群、各类企业级Web系统,底层都在用这套协议。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Kerberos核心架构与认证流程拆解
2.1 四个核心角色:客户端、AS、TGS、目标服务
要理解Kerberos,得先分清里面有几个角色。我习惯把KDC拆成两个逻辑功能来看,这样流程好讲得多。
- 客户端(Client):发起访问请求的用户程序,比如你敲
kinit输入密码的那个终端进程。 - 认证服务(AS,Authentication Service):负责验证用户的身份。你第一次拿密码换TGT,就是找它。
- 票据授予服务(TGS,Ticket Granting Service):负责发放访问具体服务的票据。你拿着TGT去申请某个服务的票据,就是找它。
- 目标服务(Service Server):你要真正访问的资源,比如SSH服务器、文件服务器、Web应用。它不直接验证你的密码,而是验证你拿来的票据。
AS和TGS逻辑分开,物理上通常部署在同一个进程里,合称KDC。实际部署时,KDC既监听88端口(ticket exchange)也监听749端口(admin server)。这个架构最大的好处是:用户的密码凭证只和AS打交道一次,之后全用票据流转,服务端不需要保存用户的密码,只需要保存自己在KDC里的长期密钥。
此外还有几个基本概念必须记牢:realm(领域),可以理解为Kerberos的认证边界,类似DNS里的domain,通常写成大写域名,比如EXAMPLE.COM;principal(主体),是Kerberos里的身份标识,格式类似邮箱,比如user1@EXAMPLE.COM或host/server1.example.com@EXAMPLE.COM;票据,被KDC长期密钥加密的数据块;会话密钥,每次认证过程中临时生成的对称密钥,加密客户端和目标服务之间的通信。
2.2 一次完整认证:从AS-REQ到AP-REP
我把一次完整的Kerberos认证流程拆成六个步骤,你照着走一遍就通透了。
第一步,AS-REQ。客户端向AS发送认证请求,内容包含自己的principal名称、请求的服务(通常是krbtgt/REALM,也就是TGT服务的标识),以及一个随机数nonce。注意,这一步不传密码。
第二步,AS-REP。AS从用户数据库中取出该用户的长期密钥(这个密钥由密码通过特定算法派生,数据库中存的是哈希或加密后的副本),生成一个会话密钥sk1(用于客户端和KDC之间后续通信),然后构造两个东西:
- TGT:用KDC自己的主密钥(krbtgt的长期密钥)加密,里面包含用户名、realm、有效期、
sk1。 - 会话响应:用客户端用户的长期密钥加密,里面包含
sk1、TGT的有效期、KDC信息等。
客户端收到后,用自己密码派生的密钥解密出sk1和TGT。这里有个关键点:如果密码输入错误,派生密钥不对,解密必然失败。所以输入错误密码时看到的报错,本质是这个解密环节失败了,而不是KDC直接告诉你"密码错误"。
第三步,TGS-REQ。现在客户端想访问某个具体服务,比如SSH到server1.example.com。它把TGT和一个认证器(Authenticator)一起发给TGS。认证器用sk1加密,里面包含客户端principal和时间戳。TGT证明"我是谁",认证器证明"我确实持有TGT里那个会话密钥"。
第四步,TGS-REP。TGS用主密钥解开TGT,取出sk1,再去解密认证器,验证时间戳是否在允许的时间偏差范围内。验证通过后,TGS生成一个新的会话密钥sk2(用于客户端和目标服务之间),以及一张服务票据(Service Ticket)。服务票据用目标服务自己的长期密钥加密,里面包含用户名、目标服务名、时间戳、有效期、sk2。同时TGS把sk2用sk1加密后回给客户端。
第五步,AP-REQ。客户端拿到服务票据,构造一个新的认证器(用sk2加密的时间戳、客户端名),把服务票据和认证器一起发给目标服务。
第六步,AP-REP。目标服务用自己的长期密钥解开服务票据,取出sk2,解密认证器并校验时间戳。到这步为止,服务端已经确认客户端身份可信。Kerberos双向认证的"第二向"在这里体现:服务端再用sk2加密一段客户端的时间戳,返回给客户端。客户端能解开,说明服务端确实持有正确的长期密钥,就是它要找的那个真服务。至此双向认证完成。
2.3 双向认证是怎么做到的
很多人对"双向认证"理解停留在字面,实际机制值得多说两句。第一向是显而易见的:客户端必须拿出合法的服务票据和正确的认证器,服务端才能放行,这是服务端验客户端。第二向是客户端验服务端,靠的就是AP-REP。
AP-REP的原理可以类比现实中验证"对方是真客服":你给对方发了密文,对方如果能用你预设的密钥正确解码并回复,说明对方手里有你信得过的密钥。在Kerberos里,服务端的长期密钥只存在于KDC和服务端自己手里,客户端通过KDC的服务票据间接确认了"服务端有这个密钥"。如果连接被中间人劫持,攻击者冒充服务端,它没有合法的服务端密钥,解不开服务票据,自然也就无法构造正确的AP-REP,客户端这边表现为认证失败或超时。
这个设计比传统的TLS单向认证要好理解,也有自己的局限:Kerberos的信任根基在KDC和双方的长期密钥,一旦KDC被攻破或者某个服务的keytab文件泄露,整个伪造票据的防线就没了。所以实际生产环境里,KDC服务器的安全级别通常非常高,keytab文件的权限也严格控制,这是运维红线。
3. 为什么选对称密钥加密:安全性分析
3.1 对称加密在Kerberos里怎么用
Kerberos整个体系几乎全部使用对称密钥加密,这也是它和PKI体系最本质的区别。公钥体系(比如TLS)需要维护证书链、CA机构、证书吊销列表,部署和运维成本高。而Kerberos面向的是内网可控环境,假设KDC和所有成员之间能提前共享密钥,用对称加密就可以大幅简化流程,性能也好得多。
具体到算法,Kerberos V5早期支持DES,后来演进到3DES、AES。现在主流环境(MIT Kerberos 1.18+、Windows AD)都默认使用aes256-cts-hmac-sha1-96,简称aes256-cts。配置里常看到supported_enctypes = aes256-cts:normal aes128-cts:normal,就是这个意思。如果老节点还在用des-cbc-md5这种古董加密类型,跨域互认基本免谈,兼容性会非常头疼。
对称密钥在Kerberos里分三类:用户的长期密钥(密码派生)、KDC主密钥(krbtgt、各个服务的密钥)、会话密钥(临时生成)。前两个是静态的,长期不变;会话密钥是每次认证动态生成的,用完后按票据有效期失效。正是这种"长期密钥只用于加密票据,实际通信用临时会话密钥"的设计,把长期密钥暴露的风险降到了最低。即使某次会话的sk2被截获,也只能解密那一张票据对应的一小段时间通信,不会牵连整个账户。
3.2 票据、会话密钥与时间戳的配合
票据本质是一段密文,但它不是普通密文,它还带着有效期和会话密钥。你去看klist输出,能看到每张票据的起始时间、过期时间,这就是票据的生命周期管理。客户端在ticket_lifetime有效期内可以反复使用TGT申请服务票据,不需要重新输入密码。
TGT的有效期通常配置为10到24小时,可续期(renewable)的最长能到7天。这个设计的意图很直白:减少用户输密码的次数,同时限制密钥的有效暴露窗口。如果票据长期有效且不可续期,一旦被缓存的票据被窃取,攻击者能用的时间就太长。有了renewable机制,票可以到期前自动续,但每次续期都由KDC校验,客户端密钥泄露的风险窗口被控制在合理范围内。
认证器(Authenticator)的设计也值得一提。它每次使用都包含当前时间戳,并用会话密钥加密。为什么需要这个时间戳?因为服务票据是可以被攻击者截获并重放的,光有票据无法区分"这是合法客户端在用"还是"有人拿截获的票据冒充"。认证器里的时间戳和replay cache(重放缓存)配合,服务端能识别出同一个认证器是否被重复提交,有效防止重放攻击。
3.3 时钟同步的重要性
Kerberos对时间极其敏感,这是初学者最容易踩的坑。协议里几乎所有校验都依赖时间戳:认证器的有效性、票据的有效期、AP-REP的验证。默认情况下,客户端和KDC之间的时钟偏差容忍值通常是5分钟(clockskew参数,不同实现略有差异)。一旦两边时间差异超过这个值,认证直接失败,报Clock skew too great。
你可以把Kerberos理解成一个极其守时的门卫,你出示的票据上写着"此票有效:2025-01-01 10:00到20:00",门卫拿自己手表一对,如果你手表比门卫慢了一小时,它认为这张票还没生效,拒绝进入;如果你快了一小时,它认为票早过期了,同样拒绝。
所以生产环境里,KDC服务器、应用服务器、客户端机器必须统一使用NTP做时间同步,而且要配置成自动定时校准,不能只手动对一次。你在排查Kerberos问题时,第一反应永远应该是先看双方时间,这个习惯能省下一大半排查时间。
4. 实操:搭建Kerberos环境并跑通认证
4.1 环境准备与安装
理论讲再多,不如自己搭一个环境跑一遍。我以Ubuntu 22.04上的MIT Kerberos V5为例,演示怎么做最小环境。需要三台机器(可以用虚拟机或容器):一台KDC(也是admin server)、一台需要SSH的服务端、一台客户端。理论上也可以单机模拟,但双机更能模拟真实场景。
KDC机器上安装:
bash复制sudo apt update
sudo apt install -y krb5-kdc krb5-admin-server krb5-config
安装过程中会弹出krb5-config的配置界面,提示输入默认realm、KDC服务器和admin服务器地址。如果当时随便填了,后面可以手动改/etc/krb5.conf,所以不用太纠结。我习惯全程默认,装完统一改配置文件。
初始化realm数据库,然后启动服务:
bash复制sudo krb5_newrealm
sudo systemctl enable --now krb5-kdc krb5-admin-server
krb5_newrealm会要求输入KDC主密钥(master key),这个密钥用于加密本地数据库,不是用户密码。记好它,丢了整个realm数据库就废了。
4.2 krb5.conf与kdc.conf配置要点
客户端的核心配置文件是/etc/krb5.conf,KDC的数据库配置在/etc/krb5kdc/kdc.conf。我建议改完配置后用kinit实测,别只看格式。
/etc/krb5.conf示例:
code复制[libdefaults]
default_realm = EXAMPLE.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
udp_preference_limit = 1
[realms]
EXAMPLE.COM = {
kdc = kdc.example.com
admin_server = kdc.example.com
}
[domain_realm]
.example.com = EXAMPLE.COM
example.com = EXAMPLE.COM
这里面有几个参数值得展开。dns_lookup_kdc = false表示不从DNS里找KDC,直接按[realms]段配置走,适合小环境;udp_preference_limit = 1作用是让客户端优先使用TCP,避免大票据在UDP分片时出问题,实际排查中我遇到过不少UDP丢包导致认证卡死的案例,干脆都设成1。forwardable = true允许票据转发,Hadoop多节点认证场景会用到。
KDC端的/etc/krb5kdc/kdc.conf:
code复制[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
EXAMPLE.COM = {
database_name = /var/lib/krb5kdc/principal
admin_keytab = FILE:/etc/krb5kdc/kadm5.keytab
acl_file = /etc/krb5kdc/kadm5.acl
key_stash_file = /etc/krb5kdc/stash
max_life = 10h 0m 0s
max_renewable_life = 7d 0m 0s
master_key_type = aes256-cts
supported_enctypes = aes256-cts:normal aes128-cts:normal
}
max_life控制TGT等票据的最长生命周期,supported_enctypes里我强烈建议只保留AES系列,别为了兼容老设备留DES,安全上完全不合格。改完配置记得重启KDC:
bash复制sudo systemctl restart krb5-kdc
4.3 创建principal与keytab
管理员账号和管理凭证先建好:
bash复制sudo kadmin.local -q "addprinc admin/admin"
sudo kadmin.local -q "addprinc user1"
user1就是普通用户,会提示设置密码。接着为目标服务添加服务主体。SSH服务对应的principal命名规范是host/主机名@REALM,主机名要能被对端解析到,IDN和大小写问题都容易踩坑,建议统一小写:
bash复制sudo kadmin.local -q "addprinc -randkey host/server1.example.com"
-randkey表示不设人工密码,而是随机生成密钥,适合服务主体。最后把服务主体的密钥导出到keytab文件,供SSH服务启动时读取:
bash复制sudo kadmin.local -q "ktadd -k /etc/krb5kdc/server1.keytab host/server1.example.com"
把这个keytab拷贝到服务端对应目录,权限设成600,属主设为运行SSH服务的用户:
bash复制sudo chown root:root /etc/server1.keytab
sudo chmod 600 /etc/server1.keytab
keytab文件相当于服务的"长期密码",泄露了就等于把服务身份拱手让人。生产环境里必须严格管控,存放路径和权限建议纳入运维审计。
4.4 用kinit/klist验证
客户端机器也装上基础包:
bash复制sudo apt install -y krb5-user
然后申请TGT:
bash复制kinit user1
kinit会提示输入密码,成功后无输出就是好消息。看缓存里的票据:
bash复制klist
输出类似:
code复制Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: user1@EXAMPLE.COM
Valid starting Expires Service principal
01/19/25 10:00:00 01/19/25 20:00:00 krbtgt/EXAMPLE.COM@EXAMPLE.COM
这时想验证能不能拿到某服务的票据,可以手动申请:
bash复制kvno host/server1.example.com
返回无报错、能打印kvno值,说明TGT申请服务票据成功。整个链路到这里就算通了,后面才是真正的高频场景:怎么用Kerberos去执行SSH、scp这样的日常操作。
5. 热点问题:KDC地址和端口能用来scp取文件吗
5.1 先搞清scp和Kerberos的真实关系
网上有个高频搜索词:"kerberos的kdc地址和端口 可以用来scp命令取文件吗"。这个问题很多人问,说明大家对Kerberos的认知有一层模糊地带。直接说结论:KDC的地址和端口不是给scp用的,scp命令不会直接连KDC取文件。
我理解大家为什么会这么想。Kerberos既然能认证,那scp是不是把KDC地址填进去就能拿文件了?不是。scp底层走的是SSH协议,它和KDC是完全独立的两层。KDC监听88端口,只负责Kerberos票据协议(kinit、TGS-REQ这类)。scp监听22端口,负责文件传输。两者真正发生交集,是在SSH启用GSSAPI认证的时候:SSH客户端在认证阶段,通过GSSAPI机制调用本机的Kerberos库,向本机/etc/krb5.conf里配置的KDC申请/使用票据,然后把Kerberos票据作为SSH登录的凭证。也就是说,KDC地址不是通过scp参数传给对方的,而是通过krb5.conf在本地生效的。
这个区别很重要:如果你手动改了/etc/krb5.conf里的kdc地址,scp会受益,但那是因为它用到了Kerberos票据;如果你在scp命令行里写scp user@kdc.mydomain.com:88:/path/file .,这纯粹是"把KDC当成了一台文件服务器",KDC的88端口根本不提供文件服务,只会直接拒绝。
5.2 用GSSAPI让scp使用Kerberos票据认证
既然scp能用Kerberos认证,怎么做?核心是在SSH层开启GSSAPI支持。服务端/etc/ssh/sshd_config里确保:
code复制GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
客户端SSH命令加参数:
bash复制ssh -o GSSAPIAuthentication=yes user1@server1.example.com
测试SSH能通之后,scp自然也能走同样的认证路径:
bash复制scp -o GSSAPIAuthentication=yes user1@server1.example.com:/data/app.log .
执行前先确认本地有有效的TGT(klist能看到),没有就kinit user1先获取。这个流程走通之后,你会发现一个很爽的点:服务器上配置了PasswordAuthentication no、禁用密钥对登录,但只要你有有效的Kerberos票据,就能直接SSH/scp,密码和证书都不用再掏。
还有个小细节:GSSAPI本身还涉及服务主体名映射。SSH的GSSAPI默认使用host/服务器名@REALM去KDC申请服务票据,所以服务端keytab里必须提前添加并导出host/server1.example.com这个主体,否则客户端会报Server not found in Kerberos database。这也是很多环境里GSSAPI认证失败的头号原因。
5.3 实测验证与常见误区
我把整个验证路径整理成一个速查流程:
- 客户端
kinit user1,拿到TGT。 klist确认TGT存在且未过期。kvno host/server1.example.com,确认能从KDC拿到目标服务的服务票据。ssh -o GSSAPIAuthentication=yes user1@server1.example.com,能免密登录。scp -o GSSAPIAuthentication=yes user1@server1.example.com:/path/file .,能免密取文件。
常见误区我再列一下:
- 误区一:给scp传KDC的IP和88端口就能取文件。错。88端口不提供文件服务。
- 误区二:KDC地址配置在krb5.conf里,scp不需要了解。对,但这个配置影响的是票据获取,不是文件传输本身。
- 误区三:只要KDC活着,scp就能用。错。目标服务器的SSH服务也要支持GSSAPI,keytab也要有对应的host主体。
- 误区四:Kerberos票据认证和SSH密钥认证能混着用不需要各自配置。错。推荐把SSH的
GSSAPIAuthentication和PubkeyAuthentication分开测,排查问题才快。
6. 常见问题与排查技巧实录
6.1 时钟漂移:Clock skew too great
这是Kerberos世界里出现过最多的问题,没有之一。报错长这样:
code复制kinit: Clock skew too great while getting initial credentials
排查思路就三步:先看客户端时间date,再看KDC时间date,然后对比。任何一边偏了超过5分钟(默认容忍值),就会报这个错。解决办法是给所有客户端和服务器统一配置NTP:
bash复制sudo apt install -y systemd-timesyncd
sudo timedatectl set-ntp true
虚拟机和容器环境尤其容易出这问题,因为宿主机休眠、快照恢复都会把客户机时钟打偏。我的经验是给所有跑Kerberos的节点都加上NTP,同时监控脚本里定期比对KDC和各节点的时间差,一旦超过120秒就告警,别等到认证全挂再救火。
6.2 KDC has no support for encryption type
这个报错表示客户端和服务端/ KDC之间协商的加密算法不一致。多见于老客户端连新KDC,或者反向。例如客户端默认只提供des3-cbc,KDC配置里已经禁用了DES系列,协商就会失败。
处理办法是统一加密套件。KDC的supported_enctypes里明确指定AES,客户端也不要开des的兼容。在/etc/krb5.conf的[libdefaults]段加:
code复制[libdefaults]
default_tgs_enctypes = aes256-cts-hmac-sha1-96
default_tkt_enctypes = aes256-cts-hmac-sha1-96
permitted_enctypes = aes256-cts-hmac-sha1-96
改完重启相关服务,再重新kinit验证。遇到Windows AD环境做跨域信任时,加密套件不一致的问题会更隐蔽,必要时用klist -e查看票据支持的加密类型,逐段定位。
6.3 票据过期与缓存问题排查
Kerberos票据和人的生活习惯很像,有效期内一切正常,过期了立刻各种报错。最典型的是Ticket expired。
当你执行klist发现票据过期,重新kinit就能解决。但生产环境里经常出现的是"票没过期但服务还是连不上"的情况,这时候要怀疑票据缓存。
Kerberos的票据缓存默认在/tmp/krb5cc_<uid>,由环境变量KRB5CCNAME指定位置。多个服务、多个用户共享一台机器时,缓存文件混乱、权限不对,都会导致"明明能kinit却无法访问服务"。排查时先确认当前用的缓存文件:
bash复制echo $KRB5CCNAME
klist -c /tmp/krb5cc_1000
确认缓存路径和票据内容都正确后,再用kvno试申请目标服务票据,能定位问题是在"拿不到TGT"还是"拿不到服务票据"。很多Hadoop集群的认证故障,最后都能归结为某个节点上票据缓存过期又被其他进程反复读取,导致后台任务批量失败。
6.4 故障排查速查表
我把实操中高频遇到的Kerberos问题整理成一张速查表,方便你按图索骥:
| 报错场景 | 可能原因 | 排查/解决方向 |
|---|---|---|
| Clock skew too great | 客户端或服务端时间偏差超限 | 统一NTP校准,检查虚拟机时间同步 |
| KDC has no support for encryption type | 加密类型协商不一致 | 统一AES加密套件,清除des配置 |
| Ticket expired | TGT或服务票据过期 | 重新kinit,检查ticket_lifetime配置 |
| Not yet valid | 客户端时间晚于KDC,票据尚未生效 | 校准时钟,重新kinit |
| Server not found in Kerberos database | 服务主体不存在或名字不匹配 | 用kadmin.local添加host主体,检查大小写 |
| Cannot find KDC for requested realm | krb5.conf里realm/KDC映射错误 | 检查[realms]段和dns_lookup_kdc配置 |
| Password incorrect while getting initial credentials | 密码错误,或用户长期密钥与KDC库不一致 | 确认密码,必要时重置principal密码 |
| GSSAPI authentication failed | SSH服务端未开GSSAPI,或keytab缺失 | 检查sshd_config和keytab路径权限 |
| Service ticket not found | 目标服务票据未被请求 | 用kvno手动请求服务票据验证 |
排查Kerberos问题,我个人的顺序永远不变:先看时间,再看票据缓存,再看加密套件,最后才动KDC配置。这个顺序能覆盖掉九成以上的问题。还有个小习惯:改任何配置前先备份,改完用kinit和kvno做最小验证,别一上来就在生产环境大批量重启服务。
再说一个小技巧。排查时用的KRB5_TRACE环境变量特别好用:
bash复制KRB5_TRACE=/tmp/krb5_trace.log kinit user1
它会输出完整的Kerberos协议交互日志,哪个环节失败、失败原因是什么,一目了然。这个日志在生产排障里价值极高,比翻系统日志高效太多。
最后聊聊这个协议后续还能怎么扩展。Kerberos的价值远不止域登录和SSH认证,Hadoop生态里的HDFS、YARN、Hive、Impala,这些组件的安全认证底层都是Kerberos。跨realm信任可以打通不同部门、不同组织的认证体系。理解票据流转的原理之后,再去看那些"开启Kerberos后组件之间无法通信"的报错,你会知道该往哪一层查。我自己每次排查Kerberos问题,都还是先回到那六步认证流程上,从AS-REQ开始一步步走,基本没有走不通的时候。
