2015-02-06 130 views
6

中使用'密碼'我目前正在使用node.js和https製作Web應用程序。 所以我嘗試使用我的.PFX(我從這裏http://www.cert-depot.com/文件)爲HTTPS所需的證明,像下面的代碼:我在我的node.js https服務器中使用.pfx證書,並且我無法在選項

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

但是,當我開始這個代碼的node.js,我越來越在我的Windows控制檯的錯誤消息:

密碼: '密碼'

意外標識符

我的代碼與Node.js的官方指南頁面非常相似(http://nodejs.org/api/https.html#https_https_createserver_options_requestlistener),但我無法啓動我的https服務器。

我的密碼短語有什麼問題? (我在Windows 8 64位運行的node.js)

+0

你缺少在選項逗號對象,兩者之間鍵。 – myusuf 2016-11-30 13:22:46

回答

7

我猜缺少逗號pfxpassphrase性能之間是什麼導致錯誤。在這裏,我加入了逗號:

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

只是一個小小的懷疑。當我部署應用程序時,密碼將變得清晰,因此它不安全以將密碼存儲在代碼中。是否有任何其他方式可以存儲加密的密碼,並指出加密或解密的密鑰也將位於代碼中。 – 2015-03-24 08:01:33

+1

部署時將其放入環境變量中。 PM2等使這一切變得簡單。基本上你只要運行'PASSPHRASE =密碼節點myapp.js'。從那裏你可以用'process.env.PASSPHRASE'來訪問這個值。 – Bill 2015-09-08 02:37:40

2

我堅持我的實現其承諾的包裝,並保持它異步(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 })) 
} 

和使用

的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 */) 
相關問題