在节点

时间:2018-06-28 05:50:46

标签: javascript node.js ssl ldap

我对域的概念还很陌生,正在尝试在节点中通过TLS实现LDAP。我已经在这个问题上困扰了很多天。我正在使用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部分下引用

  可以在实例化时通过URI属性中的ldaps://协议字符串使用

TLS。如果要避免检查服务器证书(例如,如果您具有自签名的服务器证书),则可以将verifycert属性设置为LDAP.LDAP_OPT_X_TLS_NEVER或以下值之一:

我可以用来建立安全连接。

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

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

1 个答案:

答案 0 :(得分:1)

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

证书的权力归于颁发者(也称为证书颁发机构或CA)。如果您信任颁发者,那么您就可以有效地信任由颁发者颁发的证书。操作系统本身通常会列出一些著名的CA,因此,获得证书和对该证书的验证对应用程序开发人员来说是透明的,尤其是在使用库时。


一一列出您的观点:

我知道我们需要证书才能进行TLS连接。一个由服务器保存,另一个由客户端(我)保存。

您在这里没有问任何问题,这里是一些常规信息。通常,只需要服务器验证即可。在高安全性环境中,也要进行客户端验证,因此您(即客户端)需要CA颁发的证书才能向服务器验证自己。但是,在大多数应用程序中,服务器验证就足够了。

它类似于RDBMS规范化中的“普通形式”。即使您具有6NF严格的范式,通常RDBMS的范式也会标准化到3NF。


我该如何验证我的连接安全?

通常,如果您使用的是众所周知的库(例如curl或openLDAP),则调用其安全连接方法就足够了。您极不可能调用该函数库声称是安全的函数,但事实证明这是一场闹剧。

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


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

在大多数情况下,您不会看到证书。您要做的就是告诉您的图书馆您希望验证的严格程度。然后,您的库将处理其余的工作-如果证书存在问题,通常会引发异常或记录错误。

如果使用的是客户端证书,则必须将其保留在文件系统上,然后将库指向该证书系统。通常是一个.pem文件。


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

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

在您不太在意的情况下或要开始编码而CA尚未为您颁发证书的情况下,可以对服务器进行编程,以为其客户端提供自签名证书,并对客户端进行编程保持严格的验证。

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