AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题

问题[gssapi](server)

Martin Hope
theimpatientcoder
Asked: 2021-02-06 07:11:07 +0800 CST

尝试使用 JNDI 和 GSSAPI 执行 LDAP 搜索时出现 javax.naming.CommunicationException:连接重置和 AD“事件 ID 1216”

  • 0

我正在尝试分析 Ldap 搜索期间异常/失败的原因。我在 Active Directory 域控制器上使用 JNDI 执行操作。

这是我正在尝试做的事情的背景:

  1. 使用 SASL( Kerberos authentication) 使用 JAAS( KRB5LoginModule) 生成一个LoginContext.
  2. 登录成功后,LoginContext实例具有经过身份验证的主题,其中TGT填充了 kerberos 票证 ()PrivateCredentials
  3. 之后,我使用 GSSAPI 使用上面的 authenticated 生成 LdapContext Subject。
  4. LdapContext生成后,我用它来执行 JNDI 操作(主要使用分页搜索)

  1. 到现在一切都很好,并且 LdapContext 已正确生成
  2. Active Directory 域控制器设置的一些详细信息:
  3. TGT 的生命周期设置为1 hour
  4. 服务票证( )的生命周期TGS设置为 10 分钟(由于某些限制而需要,但实际上是这样的)

现在的场景:

  • 使用LdapContext上面创建的,它开始使用 查询域控制器,pagingcontrol并且事情在一定的时间或一定的搜索量内工作顺利(这样说是为了我不希望你们都误导这实际上可能涉及时间,只需考虑这发生在(大约)定期间隔之后 - 这些间隔可能是时间或搜索

  • 当它在一定间隔后获取下一页时,搜索失败并显示:

       Caused by: javax.naming.CommunicationException: Connection reset
          at com.sun.jndi.ldap.LdapCtx.getSearchReply(LdapCtx.java:1920) ~[?:1.8.0_73]
          at com.sun.jndi.ldap.AbstractLdapNamingEnumeration.getNextBatch(AbstractLdapNamingEnumeration.java:130) ~[?:1.8.0_73]
          at com.sun.jndi.ldap.AbstractLdapNamingEnumeration.hasMoreImpl(AbstractLdapNamingEnumeration.java:217) ~[?:1.8.0_73]
          at com.sun.jndi.ldap.AbstractLdapNamingEnumeration.hasMore(AbstractLdapNamingEnumeration.java:189) ~[?:1.8.0_73]
    
          ... 10 more
    
       Caused by: java.net.SocketException: Connection reset
          at java.net.SocketInputStream.read(SocketInputStream.java:209) ~[?:1.8.0_73]
          at java.net.SocketInputStream.read(SocketInputStream.java:141) ~[?:1.8.0_73]
          at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) ~[?:1.8.0_73]
          at java.io.BufferedInputStream.read1(BufferedInputStream.java:286) ~[?:1.8.0_73]
          at java.io.BufferedInputStream.read(BufferedInputStream.java:345) ~[?:1.8.0_73]
          at com.sun.jndi.ldap.sasl.SaslInputStream.readFully(SaslInputStream.java:166) ~[?:1.8.0_73]
          at com.sun.jndi.ldap.sasl.SaslInputStream.fill(SaslInputStream.java:123) ~[?:1.8.0_73]
          at com.sun.jndi.ldap.sasl.SaslInputStream.read(SaslInputStream.java:90) ~[?:1.8.0_73]
          at com.sun.jndi.ldap.Connection.run(Connection.java:860) ~[?:1.8.0_73]
          at java.lang.Thread.run(Thread.java:745) ~[?:1.8.0_73]
    

同时,我在 Active Directory 域控制器上看到以下事件日志:EventId:2889

 Log Name:      Directory Service
 Source:        Microsoft-Windows-ActiveDirectory_DomainService
 Event ID:      2889
 Task Category: LDAP Interface
 Level:         Information
 Keywords:      Classic
 User:          ANONYMOUS LOGON
 Computer:      myad01.example.lab
 Description:The following client performed a SASL (Negotiate/Kerberos/NTLM/Digest) LDAP bind without
 requesting signing (integrity verification), or performed a simple bind over a clear text (non-
 SSL/TLS-encrypted) LDAP connection. 

 Client IP address: X.X.X.X:56260 
 Identity the client attempted to authenticate as:EXAMPLE\Administrator 
 Binding Type:0

我还看到了一个EventID为1216的日志。详细信息如下:

 Log Name:      Directory Service
 Source:        Microsoft-Windows-ActiveDirectory_DomainService
 Event ID:      1216
 Task Category: LDAP Interface
 Level:         Warning
 Keywords:      Classic
 User:          N/A
 Computer:      myad01.example.lab
 Description:Internal event: An LDAP client connection was closed because of an error. 

 Client IP:X.X.X.X:56244 

 Additional Data 
 Error value: 1236 The network connection was aborted by the local system. 
 Internal ID: c060420

我的理解:每当(在一段时间后)它去获取下一页时ldap connection,服务器(如事件 id 所建议的那样1216)将其无效,因此我得到了CommunicationException. 我的问题是为什么我会在一段时间后而不是立即得到这个?是因为 kerberos 和服务票证的有效期已经结束了吗? 如果是这种情况,那么我应该如何设计来克服分页问题?因为,在收到通信异常后,如果我创建一个新的 LdapContext 并设置分页控件,我会按预期得到以下异常:

  javax.naming.OperationNotSupportedException: [LDAP: error code 12 - 00000057: LdapErr: DSID-0C090B0B, comment: Error processing control, data 0, v3839 ]
     at com.sun.jndi.ldap.LdapCtx.mapErrorCode(Unknown Source) ~[?:1.8.0_201]
     at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source) ~[?:1.8.0_201]
     at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source) ~[?:1.8.0_201]
     at com.sun.jndi.ldap.LdapCtx.searchAux(Unknown Source) ~[?:1.8.0_201]
     at com.sun.jndi.ldap.LdapCtx.c_search(Unknown Source) ~[?:1.8.0_201]
     at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_search(Unknown Source) ~[?:1.8.0_201]
     at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(Unknown Source) ~[?:1.8.0_201]
     at javax.naming.directory.InitialDirContext.search(Unknown Source) ~[?:1.8.0_201]

对我来说,同时支持身份验证的 SASL(kerberos) 和创建 LdapContext 的 GSSAPI 对我来说非常重要。此外,分页很重要,因为数据量很大,而且我们不能对票证的有效性进行任何限制,因为我无法控制客户的环境!

请为我提供有关如何进一步调试此问题的指示,并提出正确的方法或解决方法(对此感到抱歉,但无论如何都需要它)来解决此问题。

java active-directory ldap kerberos gssapi
  • 1 个回答
  • 1158 Views
Martin Hope
Ingo
Asked: 2020-03-02 16:18:26 +0800 CST

通过 Kerberos SASL/GSSAPI 对 OpenLDAP 服务器使用 SSSD 进行单点登录

  • 0

针对 Kerberos 的身份验证和针对 LDAP 目录的授权对我有用。现在我正在使用sssd在 Debian Buster 上寻找客户端设置。

我开始使用nss-pam-ldapd 进行 LDAP 身份验证,在 OpenLDAP 服务器上使用SASL 代理授权,并使用ccreds缓存 OpenLDAP 凭据。但是因为我一直使用systemd及其环境,传统的设置不太适合它,我遇到了一些问题OpenLDAP 服务器。

正因为如此,我查看了sssd,发现它可以一体完成,而且它基于systemd并且还使用dbus进程间通信。所以我决定改用它。但在 Debian 上,推荐的软件包sssd会安装所有可能的服务,例如用于活动目录和其他我不需要的东西。我想让我的客户在没有未使用的软件的情况下尽可能精简,所以我的问题是:

我必须安装哪些 Debian 软件包才能使用sssd对具有 Kerberos SASL/GSSAPI 的 OpenLDAP 服务器进行单点登录,以及如何配置它?

openldap debian-buster sssd mitkerberos gssapi
  • 1 个回答
  • 1734 Views
Martin Hope
Tolsadus
Asked: 2017-02-24 08:55:10 +0800 CST

在支持的SASLMechanisms中将GSSAPI添加到OpenLdap

  • 9

我正在寻找如何将 GSSAPI 支持添加到我的 OpenLDAP 中?

当前设置

MIT Kerberos V + OpenLDAP
Kerberos bind to openldap
Able to issue kerberos tickets to my users (with kinit exampluser)
Able to ldapsearch -x uid=exampluser

Openldap端

server% ldapsearch -x -H ldapi:/// -b "" -LLL -s base -Z supportedSASLMechanisms

    ldap_start_tls: Protocol error (2)
    additional info: unsupported extended operation
dn:
supportedSASLMechanisms: DIGEST-MD5
supportedSASLMechanisms: EXTERNAL
supportedSASLMechanisms: CRAM-MD5
supportedSASLMechanisms: NTLM
supportedSASLMechanisms: LOGIN
supportedSASLMechanisms: PLAIN

客户端

client% ldapsearch uid=exampleuser

SASL/GSSAPI authentication started
ldap_sasl_interactive_bind_s: Authentication method not supported (7)
    additional info: SASL(-4): no mechanism available: Couldn't find mech GSSAPI

客户端 ldap.conf

#
# LDAP Defaults
#

# See ldap.conf(5) for details
# This file should be world readable but not world writable.

BASE        dc=example,dc=com
URI         ldap://ldap.example.com
SASL_MECH   GSSAPI

显然,错误很清楚,可以解释我的 ldap 请求没有找到验证机制。

我经历了许多教程和解释,但仍然无法找到如何“添加”该机制的任何地方。

谢谢什么是 SASL/GSSAPI?对于所有令人敬畏的解释。

为用户 473183469 更新

我已经为 ldap 生成了一个密钥表,我在/etc/ldap/ldap.keytab中复制了它,并根据https://help.ubuntu.com/community/SingleSignOn编辑了/etc/default/slapd要求取消注释并给出导出 KRB5_KTNAME=/etc/ldap/ldap.keytab的路径

那个 ldap keytab 是这样生成的

kadmin: addprinc -randkey ldap/[email protected]
kadmin: ktadd -k ~/ldap.keytab ldap/[email protected]

我还有一个在安装开始时创建的 /etc/krb5.keytab

kadmin.local:  listprincs
[email protected]
K/[email protected]
krbtgt/[email protected]
kadmin/[email protected]
kadmin/[email protected]
kadmin/[email protected]
kadmin/[email protected]
[email protected] (also in the ldap, can issue a ticket and everything)
[email protected] (same for him)
ldap/[email protected]

ktutil 结果

# ktutil
ktutil:  read_kt /etc/ldap.keytab
ktutil:  list
slot KVNO Principal
---- ---- ---------------------------------------------------------------------
   1    2            ldap/[email protected]
   2    2            ldap/[email protected]
   3    2            ldap/[email protected]
   4    2            ldap/[email protected]
ktutil:  read_kt /etc/krb5.keytab
ktutil:  list
slot KVNO Principal
---- ---- ---------------------------------------------------------------------
   1    2            ldap/[email protected]
   2    2            ldap/[email protected]
   3    2            ldap/[email protected]
   4    2            ldap/[email protected]
   5    2           kadmin/[email protected]
   6    2           kadmin/[email protected]
   7    2           kadmin/[email protected]
   8    2           kadmin/[email protected]
openldap sasl gssapi ldapmodule
  • 3 个回答
  • 7692 Views
Martin Hope
Chris Watts
Asked: 2017-02-07 05:26:47 +0800 CST

间歇性 Kerberos 失败:GSSAPI 身份验证初始化失败

  • 2

当使用MIT Kerberos Ticket Manager和PuTTY 0.65 和WinSCP 5.9.3 时,我有时无法连接到我正在登录的服务器。PuTTY 将使用No supported authentication methods available (server sent: )或No supported authentication methods available (server sent: publickey,gssapi-keyex,gssapi-with-mic)

如果我在记住首先获得票之前尝试连接到服务器,这似乎最常发生。拿到票后,我每次尝试都会遇到同样的错误。它有时会在大约一个小时后自行解决。

与身份验证服务器和我尝试连接的服务器的连接通过 VPN 运行。

使用Cygwin +时我没有遇到任何问题kinit。

这是我的日志:

. 2017-01-28 14:04:38.979 Server offered these authentication methods: publickey,gssapi-keyex,gssapi-with-mic
. 2017-01-28 14:04:38.980 Using SSPI from SECUR32.DLL
. 2017-01-28 14:04:38.980 Attempting GSSAPI authentication
. 2017-01-28 14:04:39.008 GSSAPI authentication initialisation failed
. 2017-01-28 14:04:39.008 No authority could be contacted for authentication.The domain name of the authenticating party could be wrong, the domain could be unreachable, or there might have been a trust relationship failure.
. 2017-01-28 14:04:39.008 Disconnected: No supported authentication methods available (server sent: )
* 2017-01-28 14:04:39.060 (EFatal) Disconnected: No supported authentication methods available (server sent: )
domain-name-system ssh kerberos gssapi
  • 1 个回答
  • 1415 Views
Martin Hope
Jacob Evans
Asked: 2016-08-16 12:32:34 +0800 CST

无法通过 kerberos 从 Windows 10 机器向 ipa 客户端进行身份验证

  • 0

我有一台加入域的 Windows 10 计算机尝试通过 kerberos 对 ipa (4.4.0) 客户端 (centos 7.2) 进行身份验证,我可以使用用户/密码进行身份验证,然后使用 kinit 进行身份验证,但我似乎无法使用我机器上的 kerberos 票证进行身份验证.

ipaclients 可以通过 kerberos 对 windows 服务器 (winrm) 进行身份验证。

布局 example.org = 具有用户的受信任域 example.com = 系统的根域 ad.example.com = 系统的子域 ipa.example.com = FreeIPA 的领域

来自 [email protected] 的所有域的身份验证有效,用于 IIS Windows 身份验证之类的 kerberos 按预期工作,Winrm 使用 kerberos 在 windows 和 linux 上工作。我还没有使用 keytabs 和受信任的用户测试 apache 401。

debug1: 下一个认证方法: gssapi-with-mic debug1: Miscellaneous failure (see text) cannot find realm of host WIN10HOSTNAME

debug1:其他故障(见正文)无法找到主机 WIN10HOSTNAME 的领域

debug2:我们没有发送数据包,禁用方法

WIN10HOSTNAME = 主机名

我尝试过 MIT Kerberos,还尝试在 krb5.ini 文件(windows)中设置默认领域。我不太确定如何设置默认领域。

Windows 10 客户端 (mingw64)

ssh -V

OpenSSH_7.1p2,OpenSSL 1.0.2h 2016 年 5 月 3 日

klist

Current LogonId is 0:0x3a258

Cached Tickets: (4)

 1      Client: jevans @ EXAMPLE.ORG
        Server: krbtgt/AD.EXAMPLE.ORG @ EXAMPLE.COM
        KerbTicket Encryption Type: RSADSI RC4-HMAC(NT)
        Ticket Flags 0x40a50000 -forwardable renewable pre_authent ok_as_delegate name_canonicalize
        Start Time: 1/26/2017 8:26:58 (local)
        End Time:   1/26/2017 18:25:47 (local)
        Renew Time: 1/26/2017 18:25:47 (local)
        Session Key Type: RSADSI RC4-HMAC(NT)
        Cache Flags: 0
        Kdc Called: DC01.example.com

 1      Client: jevans @ EXAMPLE.ORG
        Server: krbtgt/EXAMPLE.COM @ EXAMPLE.ORG
        KerbTicket Encryption Type: RSADSI RC4-HMAC(NT)
        Ticket Flags 0x40a50000 -forwardable renewable pre_authent ok_as_delegate name_canonicalize
        Start Time: 1/26/2017 8:26:58 (local)
        End Time:   1/26/2017 18:25:47 (local)
        Renew Time: 1/26/2017 18:25:47 (local)
        Session Key Type: RSADSI RC4-HMAC(NT)
        Cache Flags: 0
        Kdc Called: DC01.example.org

 2      Client: jevans @ EXAMPLE.ORG
        Server: krbtgt/EXAMPLE.ORG @ EXAMPLE.ORG
        KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
        Ticket Flags 0x40e10000 -forwardable renewable initial pre_authent name_canonicalize
        Start Time: 1/26/2017 8:25:47 (local)
        End Time:   1/26/2017 18:25:47 (local)
        Renew Time: 1/26/2017 18:25:47 (local)
        Session Key Type: AES-256-CTS-HMAC-SHA1-96
        Cache Flags: 0x1 -PRIMARY
        Kdc Called: DC01.example.org

 3      Client: jevans @ EXAMPLE.ORG
        Server: ldap/AD-DC01.AD.EXAMPLE.ORG/AD.EXAMPLE.ORG @ AD.EXAMPLE.ORG
        KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
        Ticket Flags 0x40a50000 -forwardable renewable pre_authent ok_as_delegate name_canonicalize
        Start Time: 1/26/2017 8:26:58 (local)
        End Time:   1/26/2017 18:25:47 (local)
        Renew Time: 1/26/2017 18:25:47 (local)
        Session Key Type: AES-256-CTS-HMAC-SHA1-96
        Cache Flags: 0
        Kdc Called: AD-DC01.ad.example.com

Linux端点 ktutils,然后read_kt /etc/krb5.keytab,然后list

slot KVNO Principal
---- ---- ---------------------------------------------------------------------
   1    1 host/[email protected]
   2    1 host/[email protected]
   3    1 host/[email protected]
   4    1 host/[email protected]
   5    1 host/[email protected]
   6    1 host/[email protected]
   7    1 host/[email protected]
   8    1 host/[email protected]
   9    1 host/[email protected]
  10    1 host/[email protected]
  11    1 host/[email protected]
  12    1 host/[email protected]
ssh kerberos freeipa gssapi
  • 1 个回答
  • 1025 Views
Martin Hope
user35042
Asked: 2016-07-23 07:51:14 +0800 CST

如何使用 SASL/GSSAPI 确保加密的 OpenLDAP 会话

  • 1

我在 Debian jessie 系统上运行 OpenLDAP 2.4。客户端通常使用 SASL/GSSAPI 和我们的 Kerberos 基础架构通过端口 389 连接到此 LDAP 服务器。

当客户端使用 SASL/GSSAPI 连接时,他们应该如何连接以确保会话被加密?或者 SASL/GSSAPI 会话是否自动加密?

openldap sasl gssapi
  • 1 个回答
  • 388 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve