Node.js中TLS LDAP连接的tlsOptions参数配置疑问
嗨,我来帮你理清楚这个TLS LDAP连接的配置问题~
首先咱们得先搞明白tlsOptions里cert和ca这两个参数的核心作用差异:
ca参数的作用:它是用来告诉你的Node.js客户端「哪些CA机构是我信任的」。当你和LDAP服务器建立TLS连接时,服务器会返回它的证书,你的客户端需要用ca里指定的CA证书去验证这个服务器证书是不是由可信的机构签发的,以此确认服务器的身份是合法的。这就是为什么你去掉ca后连接直接失效——客户端没法确认服务器是不是真的可信,自然就拒绝建立连接了,这个参数在大多数TLS单向认证场景下都是必须的。cert参数的作用:这个是用来给客户端自己提供身份凭证的,只有当LDAP服务器开启了「双向TLS认证」(也就是服务器不仅要让客户端验证自己,还要求客户端出示自己的证书来证明身份)的时候,这个参数才是必须的。如果你的LDAP服务器只要求单向认证(只需要客户端验证服务器,服务器不验证客户端),那客户端根本不需要提供自己的证书,所以你去掉cert后连接依然能正常工作。
那回到你的两个问题:
要不要在
tlsOptions里保留cert?
完全看你的LDAP服务器配置。如果服务器没有启用客户端证书认证(也就是现在这种去掉cert还能正常连接的情况),那你完全可以删掉这个参数,留着也不会有问题,但属于冗余配置。如果之后服务器改成双向认证了,那你就得把它加回来。为什么只留
ca就能正常工作?
因为你的LDAP服务器用的是单向TLS认证模式:只需要客户端验证服务器的身份(靠ca来完成),而服务器不需要验证客户端的身份,所以客户端不需要提供自己的cert凭证,连接自然能正常建立。
最后给你个小建议:你可以去确认下LDAP服务器的TLS配置文档或者问下运维同事,确认服务器是否真的不需要客户端证书,如果确定不需要,那删掉cert让配置更简洁也挺好的。
备注:内容来源于stack exchange,提问作者The KNVB

