2015-01-17 9 views
5

Ho letto questa domanda e ho risposto: " Is it Possible to Dynamically Return an SSL Certificate in NodeJS?" ... ma utilizza file .key e .crt per i domini e il server.Come configurare node.js in esecuzione su Windows per utilizzare più certificati SSL con più nomi di dominio?

Su un computer Windows 2008 R2, non riesco a trovare i file domain1.key, server.key e server.crt. Invece ho creato un file domain1.pfx esportando il certficate SSL da IIS.

Sono in grado di eseguire correttamente un server HTTPS node.js utilizzando questo file uno PFX con un dominio in questo modo:

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); 

Tuttavia ciò che se ho un certificato di domini multipli più un altro certificato per un singolo dominio , come sarebbero configurate le funzioni SNICallback e getSecureContext in modo che ogni nome di dominio utilizzi il certificato corretto?

Penso che il certificato del server dovrebbe essere lo stesso per entrambi i file PFX poiché sono sullo stesso server, quindi sto usando solo il primo file PFX (per dominio1) come certificato del server.

Ho provato a cambiare l'oggetto secureContext in questo modo:

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

Questo mi dà l'errore "ascoltare EACCES'

Nella mia situazione specifica Ho due certificati SSL Uno è un esteso.. certificato di convalida per un nome di dominio e il secondo è un certificato di dominio multiplo che supporta cinque nomi di dominio

Ho trovato molto difficile eseguire il debug dell'errore EACCES. Non sembra esserci più dettaglio di ciò che è causando l'EACCES la mia configurazione è sbagliata, c'è un problema con i certificati? So che questi certificati funzionano correttamente quando li utilizzo in IIS con un server IIS (anziché un server node.js) sullo stesso server Windows 2008 R2.

Mi piacerebbe rimanere con una pura configurazione di windows e node.js. (Non nginx, iisnode o altre librerie se possibile).

+0

Hai guardato iisnode? –

risposta

3

Risolto. L'errore EACCES è dovuto al fatto che non elenco tutti i siti che devono utilizzare i due certificati. Dal momento che stavo testando, stavo solo lavorando con due nomi di siti, ma il certificato multi-dominio include altri siti. Ogni sito deve essere elencato come di seguito. Altrimenti uno o più siti non avranno un certificato associato con questo causando l'errore EACCES.

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