Debian apache + Microsoft AD 上的 Kerberos SSO

Debian apache + Microsoft AD 上的 Kerberos SSO

我的目标是设置 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 :```     

相关内容