我对域的概念相当陌生,并试图在节点中通过TLS实现LDAP。我已经被这个问题困扰了很多天了。我正在使用ldap客户机。
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:// protocol字符串使用TLS。如果您想避开服务器证书检查(例如,如果您有自签名的cserver证书),可以将verifycert属性设置为LDAP.LDAP_OPT_X_TLS_NEVER,或者设置以下值之一:
我可以用它建立一个安全的连接。
我知道我们需要TLS连接到工作的证书。一个由服务器持有,另一个由客户端(me)持有。我的问题是,是否将字段设置为上述任何一种方法:
发布于 2020-01-23 17:46:58
证书是帮助其他人验证提交证书的实体确实是它声称的那个人的一种手段。因此,当连接到服务器时,服务器返回证书,然后通过该证书,可以确保服务器确实是服务器,而不是冒名顶替者。
证书的权力应归于颁发者(也称为证书颁发机构或CA)。如果您信任发行人,那么您就可以有效地信任它颁发的证书。操作系统本身通常包含一个突出的CA列表,因此获得证书和验证证书对应用程序开发人员是透明的,特别是在使用库时。
一个接一个地提出你的观点:
我知道我们需要TLS连接到工作的证书。一个由服务器持有,另一个由客户端(me)持有。
你在这里没有问任何问题,这是一些一般的信息。通常,服务器验证是所需的。在高度安全的环境中,客户端验证也会完成,在那里,您(即客户端)将需要一个来自CA的证书来验证自己到服务器。但是,在大多数应用程序中,服务器验证就足够了。
它类似于RDBMS规范化中的规范形式。尽管有像6NF这样严格的标准形式,但RDBMS通常是规范化到3NF的。
如何验证我的连接是否安全?
通常,如果您使用的是一个众所周知的库(比如curl或openLDAP),那么调用它的安全连接方法就足够了。调用库声称是安全的函数是非常不可能的,但结果却是一场闹剧。
当然,您可以使用服务器查看您的流量。Wireshark常用于网络流量分析。
我在哪里看到或根本没有看到证书?
在大多数情况下,您看不到证书。你所做的就是告诉你的库,你希望验证是多么的严格。然后,您的库将处理其余部分--如果证书有问题,通常会抛出异常或记录错误。
如果使用的是客户端证书,则必须将其保存在文件系统上,并将库指向它。它通常是一个.pem文件。
我是否必须从服务器手动生成证书并使用它们?
不是的。对于服务器证书,服务器有责任向您提供有效的证书。您只需检查服务器发送的证书是否来自已建立的CA --正如前面所述,对于使用库的开发人员来说,这通常是一个透明的步骤。
在您不太关心的情况下,或者在您希望开始编码并且CA尚未为您颁发证书的情况下,您可以编写服务器程序以向其客户端提供自签名证书,并对客户端进行编程以使验证不那么严格。
自签名证书在安全性方面没有什么价值。就像服务生说:‘嘿,我告诉你我就是你想要找的人。’显然这还不够。你想要第三个人(也就是CA),你完全信任他,来确认他就是你想要交谈的人。
https://stackoverflow.com/questions/51075517
复制相似问题