【问题标题】:LDAP over TLS with ldap-client in nodeLDAP over TLS 与节点中的 ldap-client
【发布时间】:2018-06-28 05:50:46
【问题描述】:

我对域的概念相当陌生,并且正在尝试在节点中实现 LDAP over TLS。我已经被这个问题困扰了很多天了。我正在使用ldap-client

var LDAP = require('ldap-client');

var ldap = new LDAP({
    validatecert:    false,             // Verify server certificate
    ...
}, function(err) {
    // connected and ready    
});

因此,通过一些研究,我得出结论,如果要设置字段 validatecert 数量这些值

LDAP.LDAP_OPT_X_TLS_NEVER  = 0;
LDAP.LDAP_OPT_X_TLS_HARD   = 1;
LDAP.LDAP_OPT_X_TLS_DEMAND = 2; 
LDAP.LDAP_OPT_X_TLS_ALLOW  = 3;
LDAP.LDAP_OPT_X_TLS_TRY    = 4;

在库文档的TLS 部分下引用了

TLS 可以通过实例化时 URI 属性中的 ldaps:// 协议字符串来使用。如果您想避免服务器证书检查(例如,如果您有自签名的 cserver 证书),您可以将 verifycert 属性设置为 LDAP.LDAP_OPT_X_TLS_NEVER 或以下值之一:

我可以通过它建立安全连接。

我知道我们需要证书才能使 TLS 连接正常工作。一个由服务器持有,另一个由客户端(我)持有。 我的问题是我是否将该字段设置为上述任何方法:

  • 如何验证我的连接是否安全?
  • 在哪里可以看到证书或根本看不到证书?
  • 是否必须手动从服务器生成证书并使用它们?

【问题讨论】:

    标签: javascript node.js ssl ldap


    【解决方案1】:

    证书是一种帮助他人验证出示证书的实体确实是其声称的身份的方法。因此,当您连接到服务器并且服务器返回证书时,通过该证书您可以确定服务器确实是服务器而不是冒名顶替者。

    证书的权力归于颁发者(也称为证书颁发机构或 CA)。如果您信任颁发者,那么您实际上信任它颁发的证书。重要的 CA 列表通常存在于操作系统本身中,因此获取证书和对该证书的验证对应用程序开发人员来说是透明的,尤其是在您使用库时。


    一一记下你的观点:

    我知道我们需要证书才能使 TLS 连接正常工作。一个由服务器持有,另一个由客户端(我)持有。

    你没有在这里问任何问题,这里是一些一般信息。通常只需要服务器验证即可。在高安全性环境中,客户端验证也已完成,您(即客户端)将需要来自 CA 的证书来向服务器验证您自己。但是,在大多数应用程序中,服务器验证就足够了。

    类似于 RDBMS 规范化中的 Normal Forms。即使您有严格到 6NF 的范式,通常 RDBMS 也会被规范化到 3NF。


    如何验证我的连接是否安全?

    通常,如果您使用的是知名库(如 curl 或 openLDAP),调用其安全连接方法就足够了。您调用库声称是安全的函数的可能性非常小,但结果却是一场闹剧。

    不过,可以肯定的是,您可以查看服务器的流量。 Wireshark 常用于网络流量分析。


    我在哪里可以看到证书或根本看不到它们?

    在大多数情况下,您看不到证书。您所做的就是告诉您的图书馆您希望验证有多严格。然后你的库会处理剩下的事情——如果证书有问题,通常会抛出异常或记录错误。

    如果您使用的是客户端证书,那么您必须将其保存在文件系统中并将您的库指向它。它通常是一个 .pem 文件。


    我是否必须从服务器手动生成证书并使用它们?

    没有。对于服务器证书,服务器有责任为您提供有效的证书。您只需检查服务器发送的证书是否来自已建立的 CA - 如前所述,对于使用该库的开发人员而言,这通常是一个透明的步骤。

    如果您不太在意,或者在您想开始编码并且 CA 尚未为您颁发证书的情况下,您可以对服务器进行编程以向其客户端提供自签名证书并对客户端进行编程使验证不那么严格。

    自签名证书在安全性方面几乎没有价值。这就像服务器说 - '嘿,我告诉你,我是你想与之交谈的人。这显然是不够的。您需要您完全信任的第三方(即 CA)来确认您想与之交谈的人。

    【讨论】:

    • 这是一个老问题。我什至不记得我做了什么来修复它。但据我所知,我想我使用了自签名证书。但是这个答案非常详细。如果其他人遇到与我相同的问题,我会选择它作为正确答案。感谢您抽出宝贵时间回答所有问题。
    • @Prasanna:我知道这是一个旧的。我给出了答案来记录我的学习。我自己一直在努力解决这些和其他相关问题。
    • 这不能回答所提出的问题。
    • @reinierpost:我没有回答哪一个?
    • @displayName:对不起,我的错,你确实回答了他们。我一直在寻找如何做事的具体例子,但问题并没有要求它们。
    猜你喜欢
    • 2021-05-07
    • 1970-01-01
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 2015-05-13
    • 2013-05-10
    • 2020-08-07
    相关资源
    最近更新 更多