2014-01-02 4 views
3

Некоторое время назад я пытался в значительной степени тот же код на предыдущей версии nodejs, и она работала (предположим, что мы имеем маршрутизатор уже)Не удается запустить сервер NodeJS HTTPS. v0.10.23

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

var private_key = fs.readFileSync("cert/domainname.key").toString(); 
var cert = fs.readFileSync("cert/domainname.crt").toString(); 
var options = crypto.createCredentials({ 
    key: private_key, 
    cert: cert 
}); 

var server = https.createServer(options, router); 
server.listen(8080); 

я получил ошибку Missing PFX или сертификат + закрытый ключ , Почему? Я передал как закрытый ключ, так и сертификат.

+0

Это правильный относительный путь? У вас есть разрешения на чтение файлов? – brandonscript

+0

Да, ответ ниже –

ответ

6

Вы не должны использовать crypto.createCredentials() или .toString() содержимое файла:

var options = { 
    key: fs.readFileSync('cert/domainname.key'), 
    cert: fs.readFileSync('cert/domainname.crt') 
}; 

var server = https.createServer(options, router): 

https.createServer() ожидает optionsObject, либо с pfx или key и cert, а не credentials object созданный crypto.createCredentials().

И используя .toString() на Buffer с от readFileSync() будет пытаться лечить бинарник, как UTF-8 и преобразовать в UTF-16 String, что на самом деле может привести к потере данных.


Side Примечание: В отличие от require(), fs пути, как 'cert/domainname.key' будет относительно current working directory. Чтобы относиться к ним как к текущему файлу модуля, вы можете объединить их с __dirname.

fs.readFileSync(__dirname + '/cert/domainname.key') 
+0

Правильно, спасибо, первая часть ответа - это то, что мне нужно. –

Смежные вопросы