使用 Active Directory 进行安全 LDAP 身份验证

使用 Active Directory 进行安全 LDAP 身份验证

我们正在开发一个 Web 项目,我们需要能够绑定到 Active Directory 域,然后将用户的凭据传递给该域,以确保用户已成功通过身份验证,然后我们才允许他们访问我们的某个 Web 应用程序。我们的 HTTPS 运行良好,前端可以接受凭据。我们遇到的问题是我们的服务器和 Active Directory 服务器之间的连接。Active Directory 服务器由我们 IT 部门的另一个部门维护,我们无权访问它。此 Active Directory 服务器使用自签名证书,没有完全限定的域名(即 people.local)。

我读过很多文章,谈到将 TLS_REQCERT 变量设置为从不;但是,我担心中间人攻击,因此不太愿意将设置保留为这种方式。我还读过一些文章,谈到能够从 Linux 命令行查询活动目录服务器、查看自签名证书、将自签名证书保存到本地 Linux 服务器,然后使用此证书进行信任,这样您就不必将 TLS_REQCERT 设置为从不。我不确定如何从 Linux 命令行查看和保存自签名证书。我有一些正在运行的 CentOS 服务器,我们需要使此功能正常运行。

如您能提供任何帮助,我们将不胜感激。提前致谢。

答案1

我读过很多地方讨论将 TLS_REQCERT 变量设置为从不;但是,我担心中间人攻击,并且不愿意将设置保留为这种方式。

您值得称赞,因为您考虑了安全性,并且理解了设置 TLS_REQCERT 的含义。

我还阅读了一些文章,讨论如何从 Linux 命令行查询活动目录服务器、查看自签名证书、将自签名证书保存到本地 Linux 服务器......

您可以使用该openssl工具来执行此操作。假设您可以通过端口 636 上的 LDAP-over-SSL 访问 Active Directory,则可以执行以下操作:

openssl s_client -connect server.example.com:636 > output < /dev/null

当命令完成时,您会发现输出包含 PEM 编码的证书等:

00000003)
---
Certificate chain
 0 s:/CN=dc1.example.com
   i:/DC=com/DC=example/DC=dc1/CN=example-DC1-CA
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIGjDCCBXSgAwIBAgIKOxasfwAAAAAADDANBgkqhkiG9w0BAQUFADBaMRMwEQYK
...
-----END CERTIFICATE-----
...

您可以删除BEGIN CERTIFICATE行之前的所有内容以及行之后的所有内容END CERTIFICATE LINE,这样您就应该得到您想要的内容。

也有可能 AD 服务器不使用自签名证书,而是使用 AD 证书颁发机构颁发的证书。如果是这种情况,那么向 AD 人员索要 CA 证书可能更简单。

答案2

我建议在你的组织中拥有一个专用的证书颁发机构服务器。你将使用此服务器为公司中的所有服务器颁发证书。要查看证书、密钥或证书请求中的信息,你可以使用 openssl。请参阅:http://www.openssl.org/support/faq.htmlhttp://www.madboa.com/geek/openssl/

应将为您的 LDAP 服务器颁发的证书或最好是根证书导入到您的应用程序的 SSL 密钥库中。

相关内容