type
status
date
slug
summary
tags
category
icon
password
概述
GSS-TSIG全称Generic Security Service Algorithm for Secret Key Transaction,即密钥事务的通用安全服务算法,用于对 DDNS 更新进行认证,它使用了Kerberos v5的认证系统(实现了GSSAPI)。原先通过TSIG记录使用共享密钥可以对DNS消息进行认证,但是这种方式不能全自动,必须手动介入生成和配置。引入GSS-TSIG和TKey纪录后就提供了一系列不同的模式建立和删除共享密钥用于解析服务器和DNS服务器之间通行认证。GSS-TSIG 通过客户端和服务端进行协商从而建立一个安全的请求上下文,它利用 Kerberos 服务器(在 AD 域控制器上运行)充当 KDC(Kerberos 密钥分发中心),并为 Active Directory 域中的用户和计算机提供会话凭证和临时会话密钥。客户端和服务器协作创建并相互验证它们交换的消息上的事务签名。 Windows 2000、Windows Server 2003、Windows Server 2008、Windows Server 2008 R2、Windows Server 2012、Windows Server 2012 R2 和 Windows Server 2016 都支持使用 GSS-TSIG 的 DDNS 更新。
GSS-TSIG和Kerberos 认证的结合

一个keytab文件包含成对的 Kerberos 主体名称及其对应的加密密钥。它可以包含单个领域或多个领域的密钥。整个流程大概如下:
- 客户端使用keytab与KDC中的Authentication Server通信获取用户的TGT(AS-REQ/AS-REP)
- 客户端使用TGT与Ticket Granting Server通信获取 session ticket(TGS-REQ/TGS-REP)
- 客户端使用session ticket与DNS Server通信获取TKEY记录(Transaction Key RR),Transaction Key记录包含了共享密钥相关信息(TSIG)

客户端进行动态更新操作,发送数据包含:
- 需要更新的记录
- tsig rr
在 KDC 上生成 keytab 文件并将其 SPN(Service Principal Name)映射到帐户,DNS 服务器对域进行身份验证。KDC 知道DNS服务器的密钥,在session ticket中使用DNS服务器密钥进行加密,client拿到后直接发给DNS Server,DNS server使用自己的密钥进行解密,解密成功并且验证client信息通过后,返回tkey给client,client在使用tkey进行动态更新的操作。
配置步骤
window侧
- 创建用户,全名:dns1

- 将新用户与服务主体名称(SPN)关联
- 生成keytab文件,使用Ktpass工具
- window需要配置Kerberos 打开本地安全策略 -> 本地策略 -> 安全选项 ,设置Kerberos允许的加密类型

linux侧
linux机器上安装kerberos客户端
配置kerberos配置文件
配置hosts
将生成的keytab拷贝到linux机器,并执行命令获取ticket
如果该命令无任何返回说明执行成功,然后使用
klist查看ticket
客户端已经从KDC获取了ticket。
Bind相关
编译完成后,在 named.conf 配置
启动named,使用
named -d 6打开更详细的debug日志,如果named服务未启动,出现如下报错
![[截屏2023-01-14 10.09.34.png]]
说明tkey-gssapi-credential配置有问题。
测试gss-tsig
- 首先使用
kinit -k -t /etc/dns1.keytab DNS/dns1.example.com获取TGT,
- 然后使用nsupdate测试
出现如下报错说明没有申请到TGT,需要使用kinit重新申请
出现如下这个错误,说明在window那边没有example.com的SPN。需要在window那边配置一下

日志
没有报错说明操作成功,查看bind的debug日志可以看到如下信息:
整体流程报文分析
Service Ticket请求报文

Service Ticket响应报文

Tkey请求报文

Tkey响应报文

动态更新请求报文

动态更新响应报文

TKey记录的作用是什么?
[RFC 2845] provides a means of authenticating Domain Name System(DNS) queries and responses using shared secret keys via the Transaction Signature (TSIG) resource record (RR). However, it provides no mechanism for setting up such keys other than manual exchange. This document describes a Transaction Key (TKEY) RR that can be used in a number of different modes to establish shared secret keys between a DNS resolver and server.Note that TKEY established keying material and TSIGs that use it are associated with DNS servers or resolvers. They are not associated with zones. They may be used to authenticate queries and responses but they do not provide zone based DNS data origin or denial authentication [RFC 2535].
通俗的理解就是Tkey记录支持多种模式下建立共享密钥的能力,从而解决之前使用手动设置密钥。TKey记录和区无关,它们可用于认证查询和响应但不提供区原始记录查询。

从报文我们可以看出,每次的更新都会协商出一个新的TSIG。
- 作者:Ryan Wu
- 链接:https://hexo.fridaylab.top/article/1bed8efb-0c6f-4d6d-a3c9-46d448bfb282
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。