Linux 环境 returns 中的 Kerberos 身份验证 NGINX 403 未经授权
Kerberos Authentication NGINX in Linux Environment returns 403 Unauthorized
我正在尝试在 Ubuntu (18.04) 上设置一个 nginx 服务器 (1.19.0),它使用当前版本 spnego-http-auth-nginx-module.
我成功地使用 spnego 模块构建了 nginx,并且它在没有启用 auth_gss 的情况下按预期工作。
我按照 ifad's fork.
中的说明设置了我的 keytab 文件
有了这个keytab文件,当我运行命令
kinit -5 -V -k -t /usr/local/nginx/krb5.keytab HTTP/deneme.aaa.com
我成功收到消息
Using default cache: /tmp/krb5cc_1000
Using principal: HTTP/deneme.aaa.com@DOMAIN.COM.TR
Using keytab: krb5.keytab
Authenticated to Kerberos v5
和klist -k krb5.keytab命令显示
Keytab name: FILE:krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
4 host/deneme.aaa.com@DOMAIN.COM.TR
6 HTTP/deneme.aaa.com@DOMAIN.COM.TR
user root root;
worker_processes 1;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
# HTTPS server
#
server {
listen 443 ssl;
server_name deneme.aaa.com;
ssl_certificate /home/user/public.crt;
ssl_certificate_key /home/user/private.rsa;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
location / {
root html;
index index.html index.htm;
auth_gss on;
auth_gss_allow_basic_fallback off;
}
}
}
使用上面的配置,当我点击页面 https://deneme.aaa.com 时,我得到 403 未授权错误并没有任何登录提示。 logs/error.log 中没有日志。在access.log
192.168.106.1 - - [24/Jun/2020:11:26:29 +0300] "GET / HTTP/1.1" 401 581 "-" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"
192.168.106.1 - - [24/Jun/2020:11:26:29 +0300] "GET / HTTP/1.1" 403 555 "-" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"
当我做的时候
auth_gss_allow_basic_fallback on;
出现登录提示,使用正确的凭据我可以访问索引页面,但这是因为基本身份验证有效。
当我从浏览器和 运行 客户机上的 klist 访问页面时,我可以看到已发出 Kerberos 票证。
可能是什么原因?我应该使用旧版本的 nginx 吗?
亲切的问候
Keytab 文件包含使用 AES256-SHA1 加密创建的主体。但是我忘记在 Active Directory 用户和计算机中选中 此帐户支持 kerberos aes256 位加密 复选框。因此,客户端试图将 RC4-HMAC 加密的 Kerberos 票证发送到 NGINX。
选中此选项解决了问题。
希望对您有所帮助。
我正在尝试在 Ubuntu (18.04) 上设置一个 nginx 服务器 (1.19.0),它使用当前版本 spnego-http-auth-nginx-module.
我成功地使用 spnego 模块构建了 nginx,并且它在没有启用 auth_gss 的情况下按预期工作。
我按照 ifad's fork.
中的说明设置了我的 keytab 文件有了这个keytab文件,当我运行命令
kinit -5 -V -k -t /usr/local/nginx/krb5.keytab HTTP/deneme.aaa.com
我成功收到消息
Using default cache: /tmp/krb5cc_1000
Using principal: HTTP/deneme.aaa.com@DOMAIN.COM.TR
Using keytab: krb5.keytab
Authenticated to Kerberos v5
和klist -k krb5.keytab命令显示
Keytab name: FILE:krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
4 host/deneme.aaa.com@DOMAIN.COM.TR
6 HTTP/deneme.aaa.com@DOMAIN.COM.TR
user root root;
worker_processes 1;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
# HTTPS server
#
server {
listen 443 ssl;
server_name deneme.aaa.com;
ssl_certificate /home/user/public.crt;
ssl_certificate_key /home/user/private.rsa;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
location / {
root html;
index index.html index.htm;
auth_gss on;
auth_gss_allow_basic_fallback off;
}
}
}
使用上面的配置,当我点击页面 https://deneme.aaa.com 时,我得到 403 未授权错误并没有任何登录提示。 logs/error.log 中没有日志。在access.log
192.168.106.1 - - [24/Jun/2020:11:26:29 +0300] "GET / HTTP/1.1" 401 581 "-" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"
192.168.106.1 - - [24/Jun/2020:11:26:29 +0300] "GET / HTTP/1.1" 403 555 "-" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"
当我做的时候
auth_gss_allow_basic_fallback on;
出现登录提示,使用正确的凭据我可以访问索引页面,但这是因为基本身份验证有效。
当我从浏览器和 运行 客户机上的 klist 访问页面时,我可以看到已发出 Kerberos 票证。
可能是什么原因?我应该使用旧版本的 nginx 吗?
亲切的问候
Keytab 文件包含使用 AES256-SHA1 加密创建的主体。但是我忘记在 Active Directory 用户和计算机中选中 此帐户支持 kerberos aes256 位加密 复选框。因此,客户端试图将 RC4-HMAC 加密的 Kerberos 票证发送到 NGINX。
选中此选项解决了问题。
希望对您有所帮助。