web-dev-qa-db-ja.com

node.js httpsサーバーで.pfx認定を使用していますが、オプションで「パスフレーズ」を使用できません

私は現在、node.jsとhttpsを使用してWebアプリケーションを作成しています。そのため、次のコードのように、httpsに必要な認証に.pfx(ここからファイルを取得しました http://www.cert-depot.com/ )を使用しようとしています。

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を実行しています。)

10
Jack O'Neill

pfxプロパティとpassphraseプロパティの間のカンマがないがエラーの原因だと思います。ここにコンマを追加しました:

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

私はそれの実装に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 */) 
2
cchamberlain