我来自this other question但没有得到答复:
好吧,我发现了一些新东西。我仍然无法导入我的证书,当我尝试执行我的Node / express应用程序时,它失败了同样的错误,但现在我认为不知何故,fs包没有正确读取我的.pem文件。
看看:
// 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);
});
我得到以下输出:
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)
正如您可能想象的那样,这甚至与真实证书或密钥文件的外观都不相似。它们具有以下内容(显示它们没有问题,因为它们是免费的,自动签名的密钥仅用于测试目的):
那么......出了什么问题?为什么Node将这些文件读为...一个十六进制缓冲区?我真的不懂。
更新:
好的,感谢Derek Brown,我现在可以看到这两个文件的内容,但我一直收到同样的错误:&#34; bad base64 decode&#34;:
_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)
答案 0 :(得分:2)
readFileSync(...)
将返回十六进制缓冲区。您应该将编码指定为utf8
(或您正在使用的任何文件编码),以便不会发生这种情况:
const options = { key: fs.readFileSync("./key.pem", "utf8"), cert: fs.readFileSync("./cert.pem","utf8") };