我的目标是设置 Kerberos SSO,以便能够登录到我的 Web 服务器而无需一直输入凭据。环境:
- Microsoft AD 2016 也是我的 KDC
- 微分方程
- 一个 Windows 10 RDP(启动与 Web 服务器的连接)
- 安装了 apache 2.4 的 Debian 12.2 服务器
为了设置 Kerberos 身份验证,我安装了mod_auth_gssapi,krb5-kdc,krb5-用户。
Apache2/站点可用/000-默认.conf
<VirtualHost *:443>
ServerName zabbix.lab.kimbly
SSLEngine on
SSLCertificateFile /etc/ssl/certs/apache_cert.pem
SSLCertificateKeyFile /etc/ssl/private/my_private_key.key
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
LogLevel info ssl:debug
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Location />
AuthType GSSAPI
AuthName "Kerberos authenticated intranet with mod_auht_gssapi"
GssapiCredStore keytab:/etc/krb5.keytab
GssapiAllowedMech krb5
GssapiBasicAuth Off
# Resolve remote's user into REMOTE_USER variable. Proper setting of [realms].auth_to_local in #/etc/krb5.conf is required
GssapiLocalName On
GssapiSSLonly On
require valid-user
</Location>
sites-available/default-ssl.conf 中没有特殊配置
krb5配置文件
[libdefaults]
default_realm = LAB.KIMBLY
#kdc_timesync = 1
#ccache_type = 4
forwardable = true
dns_lookup_realm =true
dns_lookup_kdc = true
[realms]
LAB.KIMBLY = {
kdc = adlab.lab.kimbly
admin_server = adlab.lab.kimbly
}
[domain_realm]
.lab.kimbly = LAB.KIMBLY
lab.kimbly = LAB.KIMBLY
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
在我的 AD 上,我创建了一个带有 SPN 的用户“web”: HTTP/[电子邮件保护]
然后我创建了一个键盘映射:
ktpass-princ“HTTP/[电子邮件保护]“-mapuser web -crypto ALL -ptype KRB5_NT_PRINCIPAL -pass PASSWORD -target“adlab.lab.kimbly” –out C:\Users\Administrateur\Documents\krb5.keytab
此 krb5.keytab 已复制到 debian 服务器上的 /etc/
键盘映射文件:
Keytab name: FILE:/etc/krb5.keytab
KVNO Timestamp Principal
---- ------------------- ------------------------------------------------------
15 01/01/1970 01:00:00 HTTP/[email protected] (DEPRECATED:des-cbc-crc)
15 01/01/1970 01:00:00 HTTP/[email protected] (DEPRECATED:des-cbc-md5)
15 01/01/1970 01:00:00 HTTP/[email protected] (DEPRECATED:arcfour-hmac)
15 01/01/1970 01:00:00 HTTP/[email protected] (aes256-cts-hmac-sha1-96)
15 01/01/1970 01:00:00 HTTP/[email protected] (aes128-cts-hmac-sha1-96)
15 27/04/2024 14:16:08 HTTP/[email protected] (DEPRECATED:des-cbc-crc)
15 27/04/2024 14:16:08 HTTP/[email protected] (DEPRECATED:des-cbc-md5)
15 27/04/2024 14:16:08 HTTP/[email protected] (DEPRECATED:arcfour-hmac)
15 27/04/2024 14:16:08 HTTP/[email protected] (aes256-cts-hmac-sha1-96)
15 27/04/2024 14:16:08 HTTP/[email protected] (aes128-cts-hmac-sha1-96)
“kinit web” 之后的 Klist:
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: [email protected]
Valid starting Expires Service principal
27/04/2024 15:26:52 28/04/2024 01:26:52 krbtgt/[email protected]
renew until 28/04/2024 15:26:50
root@zabbix:/etc#
问题 : 在我的 Windows 10 RDP 上,我通过 EDGE 启动与 Web 服务器的连接,系统要求我输入凭据,因此我使用“web”帐户,但不起作用。在 apache 的日志中我可以看到:
[Sat Apr 27 15:31:05.384253 2024] [auth_gssapi:error] [pid 5635] [client 192.168.254.20:54227] GSS ERROR In Negotiate Auth: gss_accept_sec_context() failed: [Unspecified GSS failure. Minor code may provide more information (Request ticket server HTTP/[email protected] kvno 3 not found in keytab; ticket is likely out of date)]
[Sat Apr 27 15:31:05.385189 2024] [ssl:debug] [pid 5635] ssl_engine_kernel.c(415): [client 192.168.254.20:54227] AH02034: Subsequent (No.5) HTTPS request received for child 2 (server zabbix.lab.kimbly:443)
看起来 gss 正在尝试使用错误的键盘映射文件。但我尝试删除所有内容并重建 apache conf、Kerberos conf 等,但结果还是一样。
您有任何线索可以参考吗?我尝试使用 IA 提供一些支持,我遵循了大约 15 个其他指南,并查看了许多其他帖子,但找不到相关内容。我希望有人能提供帮助。非常感谢您阅读我的帖子!
我尝试过:
- 生成新的键盘映射文件,将 HTTP 更改为 kerberos 服务。
-将 keymap 文件的所有者从 root 更改为 www-data
-将 chmod 从 400 更改为 777(我知道......)
-kinit web 运行良好并在数据库中创建了一张票据
-我可以在 AD 的事件查看器中看到:
Un ticket d’authentification Kerberos (TGT) a été demandé.
Informations sur le compte :
Nom du compte : HTTP
Nom du domaine Kerberos fourni : LAB.KIMBLY
ID de l’utilisateur : NULL SID
Informations sur le service :
Nom du service : krbtgt/LAB.KIMBLY
ID du service : NULL SID
Informations sur le réseau :
Adresse du client : 192.168.254.30
Port client : 50462
Informations supplémentaires :
Options du ticket : 0x10
Code de résultat : 0x6
Type de chiffrement du ticket : 0xFFFFFFFF
Type de pré-authentification : -
Informations sur le certificat :
Nom de l’émetteur du certificat :
Numéro de série du certificat :
Empreinte numérique du certificat :```