2015-01-17 6 views
5

Ich habe diese Frage und Antwort gelesen: " Is it Possible to Dynamically Return an SSL Certificate in NodeJS?" ... aber es verwendet. Key und .crt-Dateien für die Domänen und den Server.Wie node.js unter Windows konfigurieren, um mehrere SSL-Zertifikate mit mehreren Domänennamen zu verwenden?

Auf einem Windows 2008 R2-Computer kann ich die Dateien domain1.key, server.key und server.crt nicht finden. Stattdessen habe ich eine domain1.pfx-Datei erstellt, indem ich das SSL-Zertifikat von IIS exportiert habe.

Ich bin in der Lage ein https node.js Server mit diesem einer PFX-Datei mit einer Domain wie dies erfolgreich auszuführen:

var fs = require('fs'); 
var https = require('https'); 
var crypto = require('crypto'); 

function getSecureContext(domain) { 
    return crypto.createCredentials({ 
     pfx:  fs.readFileSync('/path/to/' + domain + '.pfx'), 
     passphrase: 'passphrase' 
    }).context 
} 
var secureContext = { 
    'domain1': getSecureContext('domain1') 
} 
var options = { 
    SNICallback: function (domain) { 
     return (secureContext.hasOwnProperty(domain) ? secureContext[domain] : {}); 
    }, 
    pfx: fs.readFileSync('/path/to/domain1.pfx'); // for the server certificate 
}; 
var server = https.createServer(
    options, 
    requestListener).listen(443); 

Doch was ist, wenn ich ein mehr Domain-Zertifikat sowie ein weiteres Zertifikat für eine einzelne Domain Wie würden die Funktionen SNICallback und getSecureContext konfiguriert werden, damit jeder Domänenname das richtige Zertifikat verwendet?

Ich denke, das Server-Zertifikat sollte für beide PFX-Dateien identisch sein, da sie auf dem gleichen Server sind, so verwende ich nur die erste PFX-Datei (für Domäne1) als das Serverzertifikat.

Ich habe versucht, das secureContext Objekt wie folgt zu ändern:

var secureContext = { 
    'domain1': getSecureContext('domain1'), 
    'domain2': getSecureContext('domain2'), 
    . 
    . 
} 

Das gibt mir die Fehlermeldung „hören EACCES‘

In meiner besonderen Situation Ich habe zwei SSL-Zertifikate Eine davon ist eine erweiterte.. Validierungszertifikat für einen Domain-Namen und das zweite ist ein Multi-Domain-Zertifikat, das fünf Domain-Namen unterstützt

Ich habe es sehr schwer gefunden, den EACCES-Fehler zu debuggen.Es scheint nicht mehr Details zu geben, was ist was die EACCES verursacht meine Konfiguration falsch, gibt es ein Problem mit den Zertifikaten? Ich weiß, dass diese Zertifikate ordnungsgemäß funktionieren, wenn ich sie in IIS verwende, auf dem ein IIS-Server (anstelle eines node.js-Servers) auf demselben Windows 2008 R2-Server ausgeführt wird.

Ich möchte mit einer reinen Windows und node.js Konfiguration bleiben. (Nicht nginx, iisnode oder andere Bibliotheken, wenn möglich).

+0

Haben Sie sich Iisnode angesehen? –

Antwort

3

Gelöst es. Der EACCES-Fehler ist darauf zurückzuführen, dass ich nicht alle Websites aufgelistet habe, die die beiden Zertifikate verwenden müssen. Seit ich getestet habe, habe ich nur mit zwei Site-Namen gearbeitet, aber das Multi-Domain-Zertifikat enthält einige andere Sites. Jede Site muss wie folgt aufgeführt sein. Anderenfalls wird einer oder mehreren Sites kein Zertifikat zugeordnet, das den EACCES-Fehler verursacht.

var secureContext = { 
    'domain1': getSecureContext('domain1'), 
    'domain2': getSecureContext('domain2'), 
    'domain3': getSecureContext('domain2'), 
    'domain4': getSecureCOntext('domain2') 
} 
Verwandte Themen