我在我的 node.js https 服务器中使用 .pfx 认证,但我无法在选项中使用 'passphrase'
I'm using .pfx certification in my node.js https server and I can't use 'passphrase' in option
我目前正在使用 node.js 和 https 制作网络应用程序。
所以我尝试使用我的 .pfx(我从这里 http://www.cert-depot.com/ 获得文件)进行 https 所需的认证,如以下代码:
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 控制台中收到一条错误消息:
passphrase: 'password'
Unexpected identifier
我的代码和Node.js(http://nodejs.org/api/https.html#https_https_createserver_options_requestlistener)的官方引导页面非常相似,但是我无法启动我的https服务器。
我的密码有什么问题?
(我是 运行 node.js Windows 8 64 位。)
我想您的 pfx
和 passphrase
属性之间 缺少逗号 是导致错误的原因。这里我加了逗号:
var options = {
pfx: fs.readFileSync('./8ab20f7b-51b9-4c09-a2e0-1918bb9fb37f.pfx'),
passphrase: 'password'
};
我在我的实现上贴了一个 promise 包装器并保持异步 (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 */)
我目前正在使用 node.js 和 https 制作网络应用程序。 所以我尝试使用我的 .pfx(我从这里 http://www.cert-depot.com/ 获得文件)进行 https 所需的认证,如以下代码:
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 控制台中收到一条错误消息:
passphrase: 'password'
Unexpected identifier
我的代码和Node.js(http://nodejs.org/api/https.html#https_https_createserver_options_requestlistener)的官方引导页面非常相似,但是我无法启动我的https服务器。
我的密码有什么问题? (我是 运行 node.js Windows 8 64 位。)
我想您的 pfx
和 passphrase
属性之间 缺少逗号 是导致错误的原因。这里我加了逗号:
var options = {
pfx: fs.readFileSync('./8ab20f7b-51b9-4c09-a2e0-1918bb9fb37f.pfx'),
passphrase: 'password'
};
我在我的实现上贴了一个 promise 包装器并保持异步 (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 */)