繁体   English   中英

LADP - Apache 上的 Kerberos 设置与 Wordpress 单点登录不起作用

[英]LADP - Kerberos Setup on Apache with Wordpress Single Sign-On not working

我们使用 Active Directory 进行了本地网络设置。 我们开发了一个只能从本地网络托管和访问的网站。 如果用户已经登录到操作系统上的 Active Directory,我们希望用户在访问我们的 Wordpress 网站时立即自动登录。

在仅跟踪文档时,我们仍然面临着我们发现很难修复的问题,我们花了很多时间才能成功启动这样的设置。 一些错误是:

  • gss_acquire_cred() 失败:未指定的 GSS 失败。 未找到关键表条目
  • 无法验证 krb5 凭据:密钥版本不可用

答案将列出我们面临的所有问题以及我们如何设法解决这些问题,以防某些人在设置时遇到相同的问题。

在 Active Directory 域控制器上创建 Keytab 文件

  • 这是我们自己没有做的事情,而是将命令提供给 Active Directory 专家以执行以下命令。 此命令区分大小写,因此非常重要的是,如果域是大写的(如下例所示),它也会在活动目录中使用大写域执行。
  • 命令
    • ktpass -princ HTTP/intranet.domain.com@DOMAIN.COM -pass "{PASSWORD}" -mapuser username@DOMAIN.COM -Ptype KRB5_NT_PRINCIPAL -out website-auth.keytab
  • 从 ktpass 命令:
    • intranet.domain.com - 是我们的 wordpress 网站 url
    • DOMAIN.COM - 是活动目录域
    • {PASSWORD} - 任何随机密码,例如 UjhmPz5UPwx2VhQir7
      • 请注意这非常重要:因为我们的密码有问题。 创建 ktpass 后,请勿更改活动目录中相关服务用户帐户的密码。 每次通过活动目录更改服务帐户密码时,活动目录上的密钥表版本也会更新,除非您也更新 apache 上的密钥表文件,否则您将无法进行身份验证。 因此,如果您将密码更改为新密码,然后恢复为旧密码,您仍然会遇到身份验证问题(即使密码现在已恢复为原始值)。 更多信息在这里: https : //support.oneidentity.com/fr-fr/kb/33866/when-does-the-vno-in-host-keytab-change-
    • username@DOMAIN.COM - Active Directory 的服务帐户
      • 帐户密码应将密码设置为“未过期”。
      • 应该信任该帐户进行委派。
    • website-auth.keytab - 生成的密钥表的文件名。 我们将它存储在/etc/httpd/kerberos-credentials/website-auth.keytab
  • 将 Keytab 文件从 AD 域控制器复制到托管在 Apache 上的 Web 服务器。

在 Web 服务器上安装 Kerberos 客户端库:

  • sudo apt-get install krb5-user (Ubuntu)
  • yum 安装 krb5-workstation krb5-libs krb5-auth-dialog (Centos)

在 Kerberos 配置文件中配置 Active Directory 域

  • 更新 /etc/krb5.conf
  • 我正在下面粘贴我们的配置文件模板。 更新 enctypes 参数对我们来说非常重要,因为默认配置文件不包含从活动目录生成的密钥表的 enctype,这会导致身份验证问题。 在这个示例中,我包含了我从研究中找到的所有加密类型。
# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 dns_lookup_realm = true
 dns_lookup_kdc = true
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 rdns = false
 pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt
 default_realm = DOMAIN.COM
 default_tkt_enctypes = aes256-cts des3-cbc-sha1 arcfour-hmac des-cbc-crc aes256-cts-hmac-sha1-96 des-cbc-md5 arcfour-hmac-md5
 default_tgs_enctypes = aes256-cts des3-cbc-sha1 arcfour-hmac des-cbc-crc aes256-cts-hmac-sha1-96 des-cbc-md5 arcfour-hmac-md5
 permitted_enctypes = aes256-cts des3-cbc-sha1 arcfour-hmac des-cbc-crc aes256-cts-hmac-sha1-96 des-cbc-md5 arcfour-hmac-md5

[realms]
 DOMAIN.COM = {
   admin_server = DOMAIN.COM
   kdc = DOMAIN.COM
 }

[domain_realm]
 domain.com = DOMAIN.COM
 .domain.com = DOMAIN.COM

[login]
 krb4_convert = true
 krb4_get_tickets = true

为 Apache 安装 auth_kerb 模块

  • Ubuntu:
    • 须藤 apt-get 安装 libapache2-mod-auth-kerb
    • a2enmod auth_kerb
    • 重启apache
  • Centos:
    • yum 安装 mod_auth_kerb
    • 重启apache:systemctl restart apache2

为站点目录配置 Kerberos SSO

  • Ubuntu:编辑 /etc/apache2/sites-enabled/000-default.conf 文件
  • Centos:编辑/etc/httpd/conf.d/文件夹下的auth_kerb.conf配置文件
  • 我们在 Centos 上工作,所以我没有 Ubuntu 的确切配置,但它应该与 Centos 配置非常相似。 我们的配置文件的模板是:
  • 设置好配置文件后,需要再次重启apache
LoadModule auth_kerb_module /usr/lib64/httpd/modules/mod_auth_kerb.so

<Directory "/var/www/html">
Order allow,deny
Allow from all

AuthType Kerberos
AuthName "username used in keytab"
KrbAuthRealms DOMAIN.COM
KrbServiceName HTTP/intranet.domain.com@DOMAIN.COM
Krb5Keytab /etc/httpd/kerberos-credentials/website-auth.keytab
KrbMethodNegotiate On
KrbMethodK5Passwd On
KrbVerifyKDC On
require valid-user
</Directory>

在 apache 上检查 httpd_can_network_connect

  • 完成上述设置后,我们认为我们已准备就绪,但仍然无法从网站进行身份验证。
  • 经过一些研究,我们注意到我们需要在 apache 服务器上启用httpd_can_network_connect设置。 为此,请运行:
    • getsebool -a | grep httpd getsebool -a | grep httpd :它正在返回 httpd_can_network_connect --> off
    • setsebool -P httpd_can_network_connect on : 启用设置
    • 重启apache服务
    • LDAP获取的信息适用于 PHP CLI,但不适用于 apache

将 wordpress 网站添加到 OS 上的本地内网

  • 为了将 Wordpress 与 kerberos 集成,我们使用了现成的高级插件,但不幸的是,并非一切都像我们想象的那样顺利。 通过上述设置,当我们尝试访问我们的 wordpress 网站时,浏览器会弹出一个默认的身份验证对话框。 这不是预期的结果,因为我们希望用户在登录 Active Directory 时自动登录。 这是因为我们正在测试的 Windows 机器没有在本地 Intranet 配置中列出我们的 wordpress 网站。 将网站添加到本地 Intranet:
    • 进入控制面板
    • 转到 Internet 选项
    • 单击安全选项卡
    • 单击本地 Intranet 图标
    • 单击站点
    • 点击高级按钮
    • 添加 Wordpres 站点 url

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM