2017-10-23 7 views
1

ich von this other question kommen auszudrücken, die unbeantwortet gelassen:Kann nicht .pem-Dateien importieren

Nun entdeckte ich etwas Neues. Ich kann mein Zertifikat immer noch nicht importieren und wenn ich versuche, meine Node/Express-App auszuführen, schlägt es mit dem gleichen Fehler fehl, aber jetzt denke ich, dass das fs-Paket meine .pem-Dateien nicht korrekt liest.

Werfen Sie einen Blick:

// Setup HTTPS 
const httpsPort = 3443; 
const options = { 
    key: fs.readFileSync("./key.pem"), 
    cert: fs.readFileSync("./cert.pem") 
}; 

console.log("KEY: ", options.key) 
console.log("CERT: ", options.cert) 

var secureServer = https.createServer(options, app).listen(httpsPort,() => { 
    console.log(">> CentraliZr listening at port "+httpsPort); 
}); 

bekomme ich folgende Ausgabe:

C:\Zerok\dev\centralizr>node index.js 
KEY: <Buffer 2d 2d 2d 2d 2d 42 45 47 49 4e 20 50 52 49 56 41 54 45 20 4b 45 59 2d 2d 2d 2d 2d 0d 0a 70 52 39 37 51 33 6f 50 5a 5a 59 75 39 46 6c 31 54 6d 30 0d 0a ... > 
CERT: <Buffer 2d 2d 2d 2d 2d 42 45 47 49 4e 20 43 45 52 54 49 46 49 43 41 54 45 2d 2d 2d 2d 2d 0a 4d 49 49 45 4a 54 43 43 41 36 79 67 41 77 49 42 41 67 49 49 48 48 ... > 
_tls_common.js:85 
     c.context.setKey(options.key, options.passphrase); 
       ^

Error: error:0906D064:PEM routines:PEM_read_bio:bad base64 decode 
    at Error (native) 
    at Object.createSecureContext (_tls_common.js:85:17) 
    at Server (_tls_wrap.js:776:25) 
    at new Server (https.js:26:14) 
    at Object.exports.createServer (https.js:47:10) 
    at Object.<anonymous> (C:\Zerok\dev\centralizr\index.js:29:26) 
    at Module._compile (module.js:570:32) 
    at Object.Module._extensions..js (module.js:579:10) 
    at Module.load (module.js:487:32) 
    at tryModuleLoad (module.js:446:12) 

Wie Sie sich vorstellen können, ist dies nicht einmal ähnlich das, was ein echtes Zertifikat, noch Schlüsseldatei, sieht aus wie . Sie haben den folgenden Inhalt (es gibt kein Problem, sie, da sie frei sind, autosigned Schlüssel nur zu Testzwecken angezeigt):

enter image description here

enter image description here

Also ... was ist los? Warum liest Node diese Dateien als ... einen Hex-Puffer? Ich verstehe es nicht wirklich.

UPDATE:

Ok, dank Derek Brown, kann ich jetzt den Inhalt der beiden Dateien sehen, obwohl ich immer die gleichen Fehler: "bad base64 decode":

_tls_common.js:85 
     c.context.setKey(options.key, options.passphrase); 
       ^

Error: error:0906D064:PEM routines:PEM_read_bio:bad base64 decode 
    at Error (native) 
    at Object.createSecureContext (_tls_common.js:85:17) 
    at Server (_tls_wrap.js:776:25) 
    at new Server (https.js:26:14) 
    at Object.exports.createServer (https.js:47:10) 
    at Object.<anonymous> (C:\Zerok\dev\centralizr\index.js:29:26) 
    at Module._compile (module.js:570:32) 
    at Object.Module._extensions..js (module.js:579:10) 
    at Module.load (module.js:487:32) 
    at tryModuleLoad (module.js:446:12) 

Antwort

2

readFileSync(...) kehrt ein Hex-Puffer, wenn keine Codierung angegeben ist. Sie sollten die Codierung als utf8 (oder was auch immer Datei-Codierung Sie verwenden) angeben, damit dies nicht geschieht:

const options = { key: fs.readFileSync("./key.pem", "utf8"), cert: fs.readFileSync("./cert.pem","utf8") }; 
+0

dass der erste Teil fixiert, danke! Aber ich bekomme den anderen Fehler ... jetzt kann ich den Inhalt beider Dateien richtig sehen, obwohl es immer noch den Fehler "bad base64 decode" auslöst. – Zerok

+1

Zerok haben Sie den Inhalt Ihres privaten Schlüssels überprüft? Es sieht nicht lange genug aus –

+0

Eigentlich bin ich nicht wirklich sicher, ob das in Ordnung ist. Das ist das Passwort, das ich bei der Erstellung der Zertifizierung verwendet habe, aber vielleicht muss ich das nicht dort angeben? Wie kann ich den eigentlichen Zertifikatsschlüssel von StartSSL abrufen, wissen Sie, wie es geht? Ich versuche, nach mehr zu suchen, aber ich kann nichts anderes finden – Zerok