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

如何为LDAP+SSL连接验证服务器SSL证书

宦翔飞
2023-03-14

我们的应用程序可以使用Active Directory用户和组。我们在端口389上使用LDAP进行Active Directory操作。现在,我们的一个客户机希望我们添加一个使用LDAP+SSL进行Active Directory通信的选项。

他们告诉我们,他们在域上安装了一个本地CA,并对LDAP使用自签名证书。他们还告诉我们,他们会提供证书,不需要相互信任,我们应该使用Windows证书存储。

他们所说的“我们应该使用Windows证书存储”是什么意思?他们希望我们自动将服务器的证书添加到本地计算机的可信证书存储区吗?

我用于LDAP+SSL连接的示例代码,

LdapConnection _connection = new LdapConnection(new LdapDirectoryIdentifier(m_DomainName, m_PortNo));
_connection.Timeout = TimeSpan.FromMinutes(10);
_connection.AuthType = AuthType.Basic;
_connection.Credential = new NetworkCredential(m_UserName, m_Password);

_connection.SessionOptions.ProtocolVersion = 3;
_connection.SessionOptions.SecureSocketLayer = true; 

_connection.SessionOptions.VerifyServerCertificate = (ldapCon, serverCertificate) =>
{
   //TODO: Verify server certificate
   return true;
};
_connection.SessionOptions.QueryClientCertificate = (con, trustedCAs) => null;

_connection.Bind();

共有1个答案

王修为
2023-03-14

哪个证书(根,用于LDAP+SSL的证书...)客户应该给我们吗?

签署LDAP服务器证书的根证书。他们也可以提前给你整个链,但无论如何都要在TLS握手期间发送。您只需预先获得根证书即可。

在.NET环境下工作的证书的格式应该是什么?

请注意,一旦您将根证书添加为受信任的,他们就可以为安装其根的客户端伪造任何服务器证书,并且他们签名的任何内容在该客户端上都将被视为有效。

奖励:添加半自定义验证和调试证书错误

您可能面临的一个问题是错误消息没有很大帮助。如果证书无法验证,您将得到一条非常通用的错误消息,其中没有关于实际问题的提示。出于其他原因,您可能还想挂接到验证过程中。

为此,您可以定义自己的验证:

private bool VerifyServerCertificate(LdapConnection ldapConnection, X509Certificate certificate)
{
    X509Certificate2 certificate2 = new X509Certificate2( certificate );
    return certificate2.Verify();
}
_connection.SessionOptions.VerifyServerCertificate = 
    new VerifyServerCertificateCallback( VerifyServerCertificate );

您可以在此方法中实现的另一件事是证书钉扎以获得额外的安全性,但这超出了本答案的范围。

 类似资料:
  • 我浏览了互联网,还没有找到一个解决方案或方法来验证证书时,通过HTTPS连接使用TIDWTTP。 我已经连接了一个idsslohandlersocketopenssl组件作为IOHandler,设置SSLModes,等等https://s3.amazonaws.com它无法验证证书。 OpenSSL(Indy)提供 “连接SSL时出错。SSL3\u获取\u服务器\u证书:证书验证失败” OpenS

  • 问题内容: 在以前的Express版本中,我可以这样做: 但是,在较新版本的express中,此功能不再起作用: 我应该打电话来设置证书吗?如果可以,怎么办? 问题答案: 请参阅Express文档以及https.createServer的Node文档(express建议使用的文档): createServer的其他选项位于:http : //nodejs.org/api/tls.html#tls_

  • 我正在尝试连接到LDAP以对用户进行身份验证。下面是我的代码,但是我不能使用我的C#代码设置SSL。 我从我的应用程序安全小组收到一条消息,我正在发送普通密码,所以我试图通过将身份验证类型设置为安全来保护它,通过尝试将选项设置为 但是我在连接对象中没有看到任何Sessionoption,我正在使用novel.LDAP dll进行LDAP操作。 有谁能帮帮我吗?如何在网络上以安全的方式发送密码供ld

  • 问题内容: 我正在尝试通过调用HTTPS REST API 。在开发过程中,我偶然发现以下错误: 因此,我在Google上搜索了一下,并找到了很多可行的解决方案。 使用Jersey客户端的HTTPS https://gist.github.com/outbounder/1069465 如何解决“ java.security.cert.CertificateException:不存在使用者替代名称”

  • 问题内容: 假设我编写了两个Java应用程序:并且它们被部署并在两个单独的服务器上运行(部署到和部署到),并且这两个应用程序需要通过SSL相互通信(双向)。我们还假设每个应用程序都有自己的SSL证书。 我(Java程序员)如何编码并验证彼此的SSL证书?每个CA是否都提供某种我可以使用的RESTful API ?Java是否有自己的证书验证API?我可以使用开放源代码的第三方JAR或服务吗? 当我

  • 我正在尝试通过调用HTTPS REST API。在开发过程中,我偶然发现了以下错误: 所以我用谷歌搜索了一下,找到了大量的解决方案,实际上是有效的。 使用泽西客户端的HTTPS https://gist.github.com/outbounder/1069465 如何修复java.security.cert.证书异常:不存在主题替代名称错误? http://www.mkyong.com/webse