这一篇来聊一下 Kerberos 协议 , 已经基于Kerberos的 AD 域单点
Kerberos 最初是由麻省理工学院(MIT)开发的,是雅典娜计划(projectathena)的一部分 , Kerberos 提供了一个集中的身份验证服务器,其功能是对用户到服务器的身份验证,以及对用户到服务器的身份验证。在 Kerberos 身份验证中,服务器和数据库用于客户端身份验证。Kerberos 作为第三方受信任服务器(称为密钥分发中心(KDC))运行。网络上的每个用户和服务都是一个主体。
Kerberos 优点
Kerberos 缺点
Kerberos 关键词
认证体系成员
架构特点 :
涉及概念 :
TGT 和 TGS 的区别
Kerberos 协议过程主要有两个阶段,第一个阶段是 KDC 对 Client 身份认证,第二个阶段是Service对Client身份认证。
以下是 Kerberos 访问详情 :
基础成员 :
-》 组成角色
> KDC : key distributed center 密钥配置中心 , 整个安全认证过程的票据生成管理服务 , 包含 AS 和 TGS
> AD :account database ,存储所有client的白名单
-》 主要角色
> C : Client
> AS : Authentication Server 认证服务器 ,完成用户认证
> TGS : Ticket Granting Server 凭证服务器
> ST : Http Service Ticket
> SS : Service Server
> RS : Resource server
Step 1 : KRB_AS_REQ 第一次 申请 TGT
Step 2 : KRB_TGS_REQ 第二次生成 TGS
> 请求 C -> TGS :
-> TGS Session key 加密部分(Name/ID + 时间戳 + client Info),明文 (服务Name/ID+生命周期),TGT
> 处理 IN TGS (对TGT 第一部分解密 ):
-> 1. 用户名对比 (TGT <-> 认证器)
-> 2. 时间戳对比
-> 3. 是否过期
-> 4. IP是否一致
-> 5. 认证器是否已存在于缓存
-> 6. 添加权限和认证服务
-> 7. 产生 Http Service Session Key
-> 8. 准备 ST
> 返回 TGS -> C:
-> ST ( Http 服务密码 进行加密 ) = 个人name/id + Http 服务name /id + IP + 时间戳 + ST 生命周期 + Http Service Session Key
-> TGS Session Key 加密部分 = Http 服务name /id + 时间戳 + ST 生命周期 + Http Service Session Key
Step 3 : 资源服务器处理
> 请求 C -> RS :
-> Http Service Session Key加密部分 : 个人 name / ID + 时间戳
> Resource 服务器 中 :
-> 1. 对比用户名
-> 2. 比较时间戳
-> 3. 检查是否过期
-> 4. 检查IP地址
-> 5. 是否已经存在于缓存
Step 1 : 创建Kerberos SPN 用户
Step 2 : 配置用户属性 , 设置不要求验证 , 密码不过期
Step 3 :生成 kerberos.keytab
ktpass.exe /out c:\kerberos.keytab /princ HTTP/antblack.com@ADSERVER.COM.CN /pass zzy19950810 /mapuser kerberos@ADSERVER.COM.CN /ptype KRB5_NT_PRINCIPAL /crypto RC4-HMAC-NT
ADSERVER.COM.CN
//- 当前域名
antblack.com
//- KDC Client 端域名 (即应用服务器域名)
kerberos@ADSERVER.COM.CN
//- 绑定的用户
zzy19950810
//- 绑定的密码
RC4-HMAC-NT
// -加密方式
Step 4 :生成 后用户会多委派属性 ,选择信任
同时可以看到用户已经绑定了多个(PS : 这里实际上应该是ADSERVER.COM.CN , 截图问题)
CentOS 7 可以不用安装 ,如果 klist 不存在 , 执行以下命令yum install krb5-server krb5-libs krb5-auth-dialog
修改 /etc/krb5.conf
# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
default_realm = ADSERVER.COM.CN
default_keytab_name = /opt/kerberos.keytab
default_tkt_enctypes = rc4-hmac
default_tgs_enctypes = rc4-hmac
[realms]
ADSERVER.COM.CN= {
kdc = 192.168.158.9
}
[domain_realm]
.adserver.com.cn = ADSERVER.COM.CN
adserver.com.cn = ADSERVER.COM.CN
Step 3 : 测试 KDC
klist -k
[root@localhost ~]# klist -k
Keytab name: FILE:/opt/kerberos.keytab
KVNO Principal
---- --------------------------------------------------------------------------
3 HTTP/antblack.com@ADSERVER.COM.CN
// 测试 KeyTab 是否连接
// 这个 ANTBLACK.CN 会去查询 kerb5.conf 中的 realm , 并且去其配置的 kdc 进行认证
kinit -k HTTP/antblack.cn@ANTBLACK.CN
klist -k
// 执行后会出现票据
// PS : 此时 AD 中运行 : klist tickets
>>>>>>>>>>>>>>>>
当前登录 ID 是 0:0x12de650
缓存的票证: (2)
#0> 客户端: administrator @ WDHACPOC.COM.CN
服务器: krbtgt/WDHACPOC.COM.CN @ WDHACPOC.COM.CN
Kerberos 票证加密类型: AES-256-CTS-HMAC-SHA1-96
票证标志 0x40e10000 -> forwardable renewable initial pre_authent name_canonicalize
开始时间: 3/30/2021 16:35:39 (本地)
结束时间: 3/31/2021 2:35:39 (本地)
续订时间: 4/6/2021 16:35:39 (本地)
会话密钥类型: AES-256-CTS-HMAC-SHA1-96
缓存标志: 0x1 -> PRIMARY
调用的 KDC: WIN-U76BKIQFGGJ
#1> 客户端: administrator @ WDHACPOC.COM.CN
服务器: host/win-u76bkiqfggj.wdhacpoc.com.cn @ WDHACPOC.COM.CN
Kerberos 票证加密类型: AES-256-CTS-HMAC-SHA1-96
票证标志 0x40a50000 -> forwardable renewable pre_authent ok_as_delegate name_canonicalize
开始时间: 3/30/2021 16:35:39 (本地)
结束时间: 3/31/2021 2:35:39 (本地)
续订时间: 4/6/2021 16:35:39 (本地)
会话密钥类型: AES-256-CTS-HMAC-SHA1-96
缓存标志: 0
调用的 KDC: WIN-U76BKIQFGGJ
// TODO : 行业代码不便于整理 , 后续会做一个简化的 demo 填坑
Kerberos 对外主推的是安全性 , 这个也属于常见但是用的不多的协议 , 结合 AD 域单点部分厂家还是有涉及.
阅读量:2013
点赞量:0
收藏量:0