我有一台运行 openldap 的 Debian 6.0.5 服务器。它似乎是针对 gnutls 编译的。我使用 gnutls 的 certtool 生成自签名证书,并在几台 debian 客户端计算机上使用它来对 openldap 服务器进行身份验证。
但是,当我尝试在 CentOS 6 客户端上执行相同操作时,我收到 ldapsearch 的以下错误:
ldap_initialize( <DEFAULT> )
ldap_start_tls: Can't contact LDAP server (-1)
additional info: TLS error -8101:Certificate type not approved for application.
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)
如果我在 CentOS 客户端上运行 gnutls-cli-debug,我会得到以下结果:
gnutls-cli-debug -p 636 ldap.blahblah.com
Resolving 'ldap.blahblah.com'...
Connecting to '10.6.0.11:636'...
Error in %INITIAL_SAFE_RENEGOTIATION
Checking for Safe renegotiation support...
就这样,它死了。
有谁能够在这种设置下执行 ldaps,gnutls 链接服务器,gnutls 生成的证书,openssl 链接客户端?
谢谢!
答案1
我猜你可以用两种方法之一来解决这个问题:让ldapsearch
客户端使用你现有的证书工作,或者生成它喜欢的新证书。就我个人而言,我认为修改服务器证书比更改代码更容易ldapsearch
,所以我考虑了这一点。
上述错误表明您的服务器端证书缺少某些内容(即客户端不想与您的服务器对话,因为它无法正确识别)。
首先,我检查了随机 LDAP 服务器使用的证书,在本例中是directory.washington.edu
这样的。如果你拿到了它的证书,例如:
openssl s_client -connect directory.washington.edu:636 > dirwash.crt
然后执行以下操作:
openssl x509 -in dirwash.crt -text
你会看到的:
X509v3 Key Usage:
Digital Signature, Non Repudiation, Key Encipherment, Data Encipherment
X509v3 Extended Key Usage:
TLS Web Client Authentication, TLS Web Server Authentication
其他 LDAP 服务器(例如ldap.virginia.edu
)根本没有这些扩展。其他服务器,例如ldap.itd.umich.edu
具有上述扩展的变体:
X509v3 Key Usage:
Digital Signature, Key Encipherment
X509v3 Extended Key Usage:
TLS Web Server Authentication, TLS Web Client Authentication
简而言之,我建议您检查您的服务器证书(如果愿意,可以在此处发布)以查看它是否包含X509v3 (Extended) Key Usage
扩展,如果是,则查看它们是否看起来像其他 LDAP 服务器上使用的扩展。
我看到一个邮件主题这表明:(1) 扩展应该不存在;或 (2) 如果扩展存在,则它们至少需要包含TLS Web Server Authentication
。我不知道在这种情况下这是否正确,但无论如何都需要考虑。