Ich habe LDAP-Verbindungen ordnungsgemäß mit node-ldapjs. Ich versuche LDAPS-Verbindungen mit node-ldapjs zu implementieren. Die Einrichtung/Konfiguration, die ich verwende, entspricht der Lösung, die von einer anderen Person als erfolgreich beschrieben wurde und hier veröffentlicht wurde - https://github.com/mcavage/node-ldapjs/issues/307. Mein Code ist unten gezeigt. Wenn ich den Code ausführen, bekomme ich die folgende Meldung:NodeJS-Fehlermeldung - UNABLE_TO_GET_ISSUER_CERT_LOCALLY - LDAPS-Verbindung versuchen
{[Error: unable to get local issuer certificate] code: 'UNABLE_TO_GET_ISSUER_CERT_LOCALLY'}
Hier ist die vollständige Stacktrace -
Error: unable to get local issuer certificate
at Error (native)
at TLSSocket.<anonymous> (_tls_wrap.js:1022:38)
at emitNone (events.js:67:13)
at TLSSocket.emit (events.js:166:7)
at TLSSocket._init.ssl.onclienthello.ssl.oncertcb.TLSSocket._finishInit (_tls_wrap.js:586:8)
at TLSWrap.TLSSocket._init.ssl.onclienthello.ssl.oncertcb.ssl.onnewsession.ssl.onhandshakedone (_tls_wrap.js:428:38)
auf demselben Client-Computer, die meine NodeJS App auf läuft, LDAPS bindet zum entfernten DC sind erfolgreich, wenn ich mit LDP oder Apache Directory Studio teste.
Kann mir jemand helfen zu bestimmen (1) was ist die Ursache der Fehlermeldung oben und (2) wie kann ich dieses Problem beheben?
Hier ist mein Code:
var fs = require('fs');
var tls = require('tls');
var ldap = require('ldapjs');
var tlsOptions = {
host: 'FQDN',
cert: fs.readFileSync('mycert.pem'),
ca: fs.readFileSync('my-root-CA.cer'),
rejectUnauthorized: true
};
var server = tls.connect(636,tlsOptions,function() {
console.log('tls connect');
console.log('client connected', server.authorized ? 'authorized' : 'unauthorized');
process.stdin.resume();
process.stdin.pipe(server);
if (server.authorized)
{
var client = ldap.createClient({url: 'ldaps://domainControllerIP:636',tlsOptions:tlsOptions});
client.bind(username, password, function (err) {
cb(err === null, err);
});
//Perform LDAP search operation
var opts = {
filter: '(&(objectclass=organizationalRole))',
scope: 'sub',
attributes: ['cn']
};
client.search('dc=domain,dc=local', opts, function(err, res) {
res.on('searchEntry', function(entry) {
console.log('entry: ' + JSON.stringify(entry.object));
});
res.on('searchReference', function(referral) {
console.log('referral: ' + referral.uris.join());
});
res.on('error', function(err) {
console.error('error: ' + err.message);
});
res.on('end', function(result) {
console.log('status: ' + result.status);
});
});
}
});
server.setEncoding('utf8');
server.on('data',function(data){
console.log('data section: ',data);
});
server.on('secureConnect',function(data){
console.log('secure connect section: ',data);
});
server.on('error', function(error) {
console.log('client closing...',error);
});