据我所知,通过krb5.conf
部分中的[domain_realm]
文件告诉Kerberos主机名或主机名集应通过哪个域进行身份验证的正常方法。假设我没有root权限来修改该文件,我想在服务器上使用requests_kerberos
库在不同于我主机上当前配置的域上进行身份验证,如何指定我自己的{ {1}}档案?
这是一台针对Active Directory环境进行身份验证的Linux计算机。我在我的shell中设置了krb5.conf
环境变量并成功运行了KRB5_CONFIG
。 kinit
命令显示正确服务上的经过身份验证的票证。然后我尝试在python脚本中设置环境变量klist
:
KRB5_CONFIG
但这不起作用:
import os
import logging
os.environ['KRB5_CONFIG'] = '/path/to/my/krb5.conf'
logging.basicConfig()
logging.getLogger('requests_kerberos').setLevel(logging.DEBUG)
r = requests.get("https://myhost.mydomain.net:9090/api/call", auth=HTTPKerberosAuth(), verify=False)
有没有办法让我获得有关DEBUG:requests_kerberos.kerberos_:handle_401(): Handling: 401
ERROR:requests_kerberos.kerberos_:generate_request_header(): authGSSClientStep() failed:
ERROR:requests_kerberos.kerberos_:(('Unspecified GSS failure. Minor code may provide more information', 851968), ('Ticket expired', -1765328352))
Traceback (most recent call last):
File "/users/apps/dsm/username/.virtualenvs/toolkit/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 112, in generate_request_header
_negotiate_value(response))
GSSError: (('Unspecified GSS failure. Minor code may provide more information', 851968), ('Ticket expired', -1765328352))
DEBUG:requests_kerberos.kerberos_:handle_401(): returning <Response [401]>
DEBUG:requests_kerberos.kerberos_:handle_response(): returning <Response [401]>
电话背后发生的事情的更多信息?一些超级调试模式?我想验证python kerberos实际上正在正确阅读我的HTTPKerberosAuth()
文件并与正确的krb5.conf
进行通信。
答案 0 :(得分:2)
如果你使用的是最新版本的MIT Kerberos,你可以设置KRB5_TRACE = / dev / stderr,它会打印大量的调试信息,显示你正在寻找的内容。但是,您已经有一条明确的错误消息:“票证已过期”。查看klist报告的故障单结束时间,并检查客户端,服务器和KDC上的时间(在本例中为域控制器)。 Kerberos需要松散同步的时钟,通常在5分钟内完成。
我已经使用kinit验证我的证书未过期,
你的意思是klist,而不是kinit? kinit获得了新的TGT; klist显示了ccache的内容。顺便说一句,这些Kerberos数据结构称为“票证”,而不是“证书”; “证书”通常与非对称密钥一起使用(例如X.509证书)。
这让我以为python脚本正在寻找凭证缓存的其他地方?有没有办法找到它?
KRB5_TRACE将证明这一点。您也可以使用strace -f -efile
运行程序,以查看它访问的文件,作为常规调试工具。