我正在寻找针对 Active Directory 使用 Apache 2.4 进行 GSSAPI 身份验证的以下配置:
1.如何配置 Apache HTTPServer 2.4.xmod_auth_gssapi使用 Microsoft Active Directory?是否有任何文档或者POC 示例说明在 Apache HTTPServer 2.4.x 中为 GSSAPI 执行所需的配置,以便使用 GSSAPI 机制通过 Microsoft Active Directory 进行身份验证?
2.做mod_auth_gssapi 提供正直&保密安全服务?如果是,那么在 Apache HTTPServer 中需要进行哪些配置? 参考用于 GSSAPI 中的完整性和机密性。
根据我的分析,Active Directory 支持 GSSAPI SASL 机制。但是,Apache HTTPserver 不支持 GSSAPI 作为现成的配置。但是,使用mod_auth_gssapiApache HTTPServer 可以在 Active Directory 中查找用户及其凭据,从而使用 GSSAPI 机制进行身份验证。
目前,我在 Apache HTTPServer 中配置了如下所示的基本身份验证提供程序,需要将其替换为 mod_auth_gssapi 才能实现 gssapi 身份验证机制:
# Basic Authentication provider
<AuthnProviderAlias ldap MyEnterpriseLdap>
AuthLDAPURL "ldap://machine1.abcd.com:389/CN=Users,DC=abcd,DC=com?sAMAccountName?sub?(objectClass=*)"
AuthLDAPBindDN "CN=rohit,CN=Users,DC=abcd,DC=com"
AuthLDAPBindPassword "abc123"
LDAPReferrals Off
</AuthnProviderAlias>
# Authenticated resources
<LocationMatch ^/+WebApp/+(;.*)?>
AuthName "WebApp"
AuthType Basic
AuthBasicProvider MyEnterpriseLdap
Require valid-user
</LocationMatch>
谢谢。
答案1
我设法使用以下教程使 GSSAPI 工作: http://www.jfcarter.net/~jimc/documents/bugfix/41-auth-kerb.html
我做了什么(我在 Debian 上)
加入域
安装软件包:
apt-get install --no-install-recommends winbind smbclient krb5-config krb5-user libldap-common
在/etc/krb5.conf
:
[libdefaults]
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
fcc-mit-ticketflags = true
### My changes ###
default_realm = MY-DOMAIN.FR
default_keytab_name = FILE:/etc/krb5.keytab
ticket_lifetime = 24h
dns_lookup_realm = false
dns_lookup_kdc = false
# AD in 2008+? Using AES
default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
### end ###
[realms]
MY-DOMAIN.FR = {
kdc = ad1.my-domain.fr
kdc = ad2.my-domain.fr
master_kdc = ad1.my-domain.fr
admin_server = ad1.my-domain.fr
default_domain = my-domain.fr
# Hack to remove the '@my-domain.fr' part of the user login, to only keep the prefix (facultative. Used to simplify my PHP auth mechanism)
# Source: http://comp.protocols.kerberos.narkive.com/57JV8mmf/libapache2-mod-auth-kerb-and-cross-realm
# (Greg Hudson)
auth_to_local = RULE:[1:$1@$0](.*@my-domain.fr)s/@my-domain.fr$//
auth_to_local = DEFAULT
}
[domain_realm]
.my-domain.fr = MY-DOMAIN.FR
my-domain.fr = MY-DOMAIN.FR
在/etc/samba/smb.conf
:
[global]
workgroup = MY-DOMAIN
realm = MY-DOMAIN.FR
security = ADS
encrypt passwords = yes
password server = ad1.my-domain.fr
kerberos method = system keytab
(the rest of the file is unmodified)
禁用 LDAP 调用的引用:
/bin/echo 'REFERRALS off' >> /etc/ldap/ldap.conf
加入域:
kinit administrateur
# (use an admin AD account)
net ads join -U administrateur createcomputer=OU=Member\ servers,DC=my-domain,DC=fr
# (specify where you want to store the object in your AD.
# I translated the name in English, so 'Member Servers' is just an example
http 的 Keytab
在以下位置创建一个密钥表/etc/krb5.keytab
:
net ads keytab add HTTP -U administrateur
保护它:(在我的例子中,www-data
是用于提供网页的 Unix 用户)
chmod 640 /etc/krb5.keytab
chown root:www-data /etc/krb5.keytab
我在 crontab 中添加了一个脚本,每天更新一次此密钥表。不确定是否仍然需要它,但在以前的 Debian 版本中,当文件过期时,我遇到了一些错误。所以我在 Expect 中编写了一个脚本来调用net ads keytab add HTTP -U my-linux.ad-account
我。它仍然在那里 :)
配置 Apache
获取 Apache 的 GSSAPI:
apt-get install --no-install-recommends libapache2-mod-auth-gssapi
激活会话 cookie(以避免在每个页面上重新验证用户身份)- 可选
a2enmod session
a2enmod session_cookie
在您的 Apache 站点配置中(例如/etc/apache2/sites-available/000-default.conf
)
<VirtualHost *:443>
SSLEngine on
DocumentRoot /your/web/root
<Directory /your/web/root>
AuthType GSSAPI
AuthName "My Domain"
GssapiCredStore keytab:/etc/krb5.keytab
GssapiAcceptorName HTTP
GssapiBasicAuth On
GssapiNegotiateOnce On
GssapiSSLonly On
GssapiLocalName On
# Use a cookie to keep the session, avoid reauthenticate user on each page
# (facultative)
GssapiUseSessions On
GssapiDelegCcacheDir /run/apache2/clientcaches
<IfModule mod_session.c>
Session on
</IfModule>
<IfModule mod_session_cookie.c>
SessionCookieName gssapi_session path=/;httponly;secure;
</IfModule>
Require valid-user
</Directory>
....
</VirtualHost>
重启 Apache 并祈祷
service apache2 restart
我希望我没有忘记任何事情。
脚注:如果出现以下情况,Web 客户端将不会委托其凭证(并且 SSO 将不起作用):
- 您的网络服务器未处于 TLS 状态 (
SSLEngine on
) - 您的网络服务器不在客户端受信任的站点中(例如,您的 Internet 设置中的“Intranet 站点”)