当前位置: 首页 > 知识库问答 >
问题:

Linux环境中的Kerberos身份验证NGINX返回403 Unauthorized

酆阳煦
2023-03-14

我正试图在Ubuntu(18.04)上安装一个nginx服务器(1.19.0),该服务器使用当前版本的spnego http auth nginx模块。

我成功地用spnego模块构建了nginx,它在没有启用auth_gss的情况下按预期工作。

我按照ifad的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-kkrb5.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个未经授权的错误。日志/错误中没有日志。日志在访问中。日志

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吗?

亲切的问候

共有1个答案

陈君之
2023-03-14

Keytab文件包括使用AES256-SHA1加密创建的主体。但是,我忘记选中Active Directory用户和计算机中的此帐户支持kerberos aes256位加密复选框。所以客户端试图将RC4-HMAC加密的Kerberos票证发送到NGINX。

选中此选项解决了问题。

希望这有帮助。

 类似资料:
  • 我正在运行一个squid代理服务器(CentOS 5),我正试图通过我们的AD服务器(Windows server 2008)使用kerberos。 我遵循了以下说明:http://wiki.squid-cache.org/ConfigExamples/Authenticate/Kerberos 为服务器设置一个keytab,这一切都运行良好。 当我尝试从客户端PC使用代理时,会出现问题,它会立即

  • 我正在开发一个Web应用程序,它是rest客户端并使用rest服务(API)来执行任何操作。我集成了apache shiro以使用工作正常的jdbc领域执行身份验证。 现在,我正在寻找一种使用apacheDS LDAP执行身份验证的解决方案。我计划使用kerberos身份验证,但我没有找到任何有用的文章或示例来使用apache shiro实现kerberos身份验证。 我发现apache shir

  • 使用这个例子,我的连接几乎可以工作 http://blogs.nologin.es/rickyepoderi/index.php?/archives/105-oracle-driver-and-kerberos.html 我使用的是Java7,但使用另一个没有问题。有没有一种方法可以用jvm正确读取票证(参见jdk中的kinit不要创建正确的票证)

  • 是否可以使用Kerberos但不使用JAAS来验证用户/密码?

  • 问题内容: 我正在尝试编写一个简单的脚本,该脚本从内部网络上的工具请求一些数据。这是代码: 现在的问题是,我该如何使用Kerberos票证进行身份验证,而不是以纯文本形式提供我的凭据? 问题答案: 在Paul Scheltema的答案中,您需要从操作系统的深度获取票证数据。您(或代表您的模块)必须使用GSS-API才能由Active Directory生成票证数据。 这种机制存在于Chrome中,

  • 15/02/06 15:17:12警告IPC.Client:连接到服务器时遇到异常:javax.security.sasl.saslexception:GSS initiate失败[由GSSException:未提供有效凭据(机制级别:找不到任何Kerberos tgt导致)]LS:本地异常失败:java.io.ioException:javax.security.sasl.saslexcepti