最近,我将Linux客户端上的krb5.conf文件更改为:
[libdefaults]
rdns = false
这些客户机仍然可以成功地使用kerberos auth连接到其他Linux can服务器。但是,现在它们与IIS IIS服务器的连接中断了。我看到的一个示例错误是:
< HTTP/1.1 401 Unauthorized
< Content-Type: text/html
< Server: Microsoft-IIS/8.5
* gss_init_sec_context() failed: Server not found in Kerberos database.
但是,当我删除rdns=false时,Linux客户端可以在没有问题的情况下进行/连接。通过添加rdns=false
并看到失败,然后删除它并看到成功,我能够始终如一地重新创建这种行为。为什么rdns=false中断从Linux客户端到IIS的连接?
发布于 2020-12-22 10:32:37
但是,这个错误不是来自IIS IIS服务器吗?
不,它来自curl使用的GSSAPI库(libkrb5)。
为什么客户端的配置设置会影响Why服务器的功能?ie-如果客户端进行反向查找,how服务器关心什么?它如何知道客户端是否进行反向查找?
Kerberos票证是为特定服务器FQDN颁发的,类似于TLS证书。当您想通过HTTP与app.example.com
对话时,您的客户端必须为HTTP/app.example.com@EXAMPLE.COM
服务主体请求一张票证。
但是,与TLS不同(TLS查看URL中的域而不查看其他内容),传统Kerberos实现使用服务器IP地址的反向DNS确定主名称,这可能导致客户端请求与URL中显示的SPN完全不同的票。
这在指向单个DNS服务器的多个域或使用DNS循环到多个DNS服务器的域中尤为常见。例如,如果您的"app.example.com“实际上指向一个AD连接为"web01.example.com”的服务器,那么以前curl成功地请求了"HTTP/web01.example.com“( AD知道)的票证,但现在它正在请求"HTTP/app.example.com”的票证,而您的AD域控制器不知道,因此不能为其颁发票证。
如果域只指向一个IIS服务器,setspn
将通过为同一个Kerberos密钥添加别名来解决这一问题。
(这种MIT/Heimdal Kerberos的行为与Windows客户端不同,如果我没记错的话,Windows客户端的行为总是好像他们有rdns=off一样。)
https://serverfault.com/questions/1046771
复制相似问题