我们正在开发一个 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.html和http://www.madboa.com/geek/openssl/
应将为您的 LDAP 服务器颁发的证书或最好是根证书导入到您的应用程序的 SSL 密钥库中。