生成TSIG密钥环(作为编码的字节字符串)以进行DNS更新

时间:2019-04-29 09:50:08

标签: python dns kerberos dnspython

我正在尝试使用python DNS模块(dnspython)创建(add)新DNS记录。

文档指定了如何创建更新http://www.dnspython.org/examples.html

import dns.tsigkeyring
import dns.update
import sys

keyring = dns.tsigkeyring.from_text({
    'host-example.' : 'XXXXXXXXXXXXXXXXXXXXXX=='
})

update = dns.update.Update('dyn.test.example', keyring=keyring)
update.replace('host', 300, 'a', sys.argv[1])

但这并不精确,如何实际生成可以首先传递给dns.tsigkeyring.from_text()方法的密钥环字符串。

生成密钥的正确方法是什么?我在单位使用krb5。

1 个答案:

答案 0 :(得分:3)

  

服务器正在使用GSS-TSIG在Microsoft AD DNS上运行。

在您的情况下,“ TSIG密钥环”不适用。 TSIG和GSS-TSIG是完全不同的野兽-前者使用可以从服务器简单复制的静态预共享密钥,而后者使用Kerberos(GSSAPI)在每次交易中协商会话密钥。

如果您尝试更新Active Directory DNS服务器,则BIND的nsupdate -g支持GSS-TSIG(有时甚至可以使用)。您应该可以通过subprocess.Popen()运行它。

与大多数Kerberos客户端应用程序一样,nsupdate希望环境中已经存在凭据(也就是说,您需要事先使用kinit获得了TGT;或者,如果是最新版本的MIT,则需要使用了Krb5,您可以将$KRB5_CLIENT_KTNAME指向包含客户端凭据的密钥表)。