2015-02-06 24 views
6

verwenden Ich mache derzeit eine Webanwendung mit node.js und https. Also versuche ich meine PFX zu verwenden (ich von hier http://www.cert-depot.com/ die Datei bekam) für die Zertifizierung für https erforderlich, wie folgenden Code:Ich benutze .pfx-Zertifizierung in meinem node.js https-Server und ich kann nicht 'Passphrase' in Option

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

var options = { 
    pfx: fs.readFileSync('./8ab20f7b-51b9-4c09-a2e0-1918bb9fb37f.pfx') 
    passphrase: 'password' 
}; 

var server = https.createServer(options, function (request, response) { 
    fs.readFile('index.html', function (error, data) { 
     response.writeHead(200, {'Content-Type': 'text/html'}); 
     response.end(data); 
    }); 
}).listen(12345, function(){ 
    console.log('server running'); 
}); 

Aber wenn ich diesen Code mit node.js beginnen, ich bin immer wird eine Fehlermeldung in meinem Windows-Konsole:

Passwort: 'Passwort'

Unexpected Kennung

Mein Code ist der offiziellen Hilfeseite von Node.js (http://nodejs.org/api/https.html#https_https_createserver_options_requestlistener) sehr ähnlich, aber ich kann meinen https-Server nicht starten.

Was ist falsch an meiner Passphrase? (Ich bin node.js in Windows 8 64bit läuft.)

+0

Sie ein Komma in den Optionen fehlendes Objekt, zwischen den beiden Schlüssel. – myusuf

Antwort

7

Ich denke, das fehlende Komma zwischen pfx und passphrase Eigenschaften ist es, was den Fehler verursachen. Hier habe ich das Komma:

var options = { 
    pfx: fs.readFileSync('./8ab20f7b-51b9-4c09-a2e0-1918bb9fb37f.pfx'), 
    passphrase: 'password' 
}; 
+0

Nur ein kleiner Zweifel. Das Passwort wird im Klartext angezeigt, wenn ich die Anwendung veröffentliche, so dass das Passwort im Code nicht sicher gespeichert werden kann Gibt es eine andere Möglichkeit, das Passwort verschlüsselt zu speichern, da der geheime Schlüssel für die Verschlüsselung oder Entschlüsselung ebenfalls im Code enthalten ist . –

+1

Fügen Sie es bei der Bereitstellung in eine Umgebungsvariable ein. PM2 unter anderen machen es einfach. Im Wesentlichen wirst du 'PASSPHRASE = password node myapp.js' ausführen. Von dort aus greifen Sie auf diesen Wert mit 'process.env.PASSPHRASE' zu. – Bill

2

bleibe ich ein Versprechen Wrapper auf meine Implementierung davon und halten es async (ES2015).

lib/pfx.js

import { readFile } from 'fs' 
import { resolve as resolvePath } from 'path' 

export const CERTIFICATE_ROOT = resolvePath(__dirname, '..', 'etc', 'certificates') 
export const getCertificatePath = filename => resolvePath(CERTIFICATE_ROOT, filename) 

export function readCertificate(filename) { 
    let certificatePath = getCertificatePath(filename) 
    return new Promise((resolve, reject) => { 
    readFile(certificatePath, (err, certificate) => { 
     if (err) 
     return reject(err) 
     resolve(certificate) 
    }) 
    }) 
} 

export function readPfx(filename, passphrase) { 
    assert.typeOf(passphrase, 'string', 'passphrase must be a string') 
    assert.isAbove(passphrase.length, 0, 'passphrase must not be empty') 
    return readCertificate(filename).then(pfx => ({ pfx, passphrase })) 
} 

und Nutzung

lib/app.js

import { readPfx } from './pfx' 
readPfx('8ab20f7b-51b9-4c09-a2e0-1918bb9fb37f.pfx', process.env.PASSPHRASE) 
    .then(opts => /* start server here */) 
    .catch(err => /* handle errors */)