我正在尝试将系统的kerberos加密从RC4升级到AES256。我已经设置了一个支持AES256加密的Microsoft Windows域用户。 我正在Linux上使用ktutil为kinit创建一个keytab:
ADD_ENTRY="addent -password -p $DOMAIN_LOCAL_USER@$DOMAIN_UPCASE -k 2 -e AES256-CTS-HMAC-SHA1-96\n$DOMAIN_LOCAL_PASS\n"
echo -e "$ADD_BASE_ENTRY\n$ADD_ENTRY\nwkt user.keytab\nquit\n" | ktutil
kinit适用于该密钥表。
但是,当我在Linux上使用ktutil为该用户创建SPN时
ADD_BASE_ENTRY="addent -password -p MSSQLSvc/$SHORT_HOSTNAME.$DOMAIN_LOWCASE@$DOMAIN_UPCASE -k 2 -e RC4-HMAC\n$DOMAIN_PASSWORD\n"
echo -e "rkt spns.keytab\n$ADD_BASE_ENTRY\n$ADD_ENTRY\nwkt spns.keytab\nquit\n" | ktutil > /dev/null 2>&1
然后我无法接受传入的连接:
GSS-API major_status:000d0000, minor_status:000186a6
GetGSSError(): GSS Error ERR_MAX: Unspecified GSS failure. Minor code may provide more information
GetGSSError(): GSS Error ERR_MIN: Request ticket server MSSQLSvc/greensqlcent21.kerberosdc.msft:1434@KERBEROSDC.MSFT kvno 2 enctype aes256-cts found in keytab but cannot decrypt ticket
当我使用RC4_HMAC处理所有事情时,这种方法运作良好。
修改
我的应用程序模仿MSSQL服务器。我是以用户身份运行(而非计算机),我已将此用户设置为使用AES256登录。最初,我使用RC4_HMAC将SPN保留在传入的密钥表文件中(这在域用户也使用RC4_HMAC进行身份验证时常用),但我收到错误,gssapi接受函数正在SPN密钥表中查找AES256条目文件。所以我更改了SPN keytab文件也使用了AES256并得到了上述错误。
编辑2:
使用Windows 2k8和2k12作为域控制器进行测试。两者都失败了。