web-dev-qa-db-ja.com

Node.js https pemエラー:routines:PEM_read_bio:no start line

私は今node.jsでログインフォームをいじっています、私はpemキーとcsrを使用して作成しようとしました

openssl req -newkey rsa:2048 -new -nodes -keyout key.pem -out csr.pem

ただし、ノードserver.jsを実行するとエラーが発生します

これが私のserver.jsです

var http = require('http'),
    express = require('express'),
UserServer = require('./lib/user-server');

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

var options = {
  key: fs.readFileSync('./key.pem', 'utf8'),
  cert: fs.readFileSync('./csr.pem', 'utf8')
};

var app = express();

app.configure(function(){
  app.use(express.bodyParser());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

var httpserver = http.createServer(app).listen('3004', '127.0.0.1');
var https_server = https.createServer(options, app).listen('3005', '127.0.0.1');
UserServer.listen(https_server);

ここにエラーがあります

crypto.js:104
  if (options.cert) c.context.setCert(options.cert);
                          ^
Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
    at Object.exports.createCredentials (crypto.js:104:31)
    at Server (tls.js:1107:28)
    at new Server (https.js:35:14)
    at Object.exports.createServer (https.js:54:10)

走ってみた

openssl x509 -text -inform DER -in key.pem

それは与えます

unable to load certificate
140735208206812:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1319:
140735208206812:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:381:Type=X509

私の暗号化ファイルは既に.pemファイルであるため、エラーの意味が正確にはわかりません。

ありがとう

43
xbd

間違った証明書ファイルを使用している可能性があります。必要なのは、次のように実行できる自己署名証明書を生成することです

openssl req -newkey rsa:2048 -new -nodes -keyout key.pem -out csr.pem
openssl x509 -req -days 365 -in csr.pem -signkey key.pem -out server.crt

次に、server.crtを使用します

   var options = {
      key: fs.readFileSync('./csr.pem', 'utf8'),
      cert: fs.readFileSync('./server.crt', 'utf8')
   };
73
Hassaan

次のコードを記述して、このエラーを削除しました

ターミナルを開く

  1. openssl req -newkey rsa:2048 -new -nodes -keyout key.pem -out csr.pem

  2. openssl x509 -req -days 365 -in csr.pem -signkey key.pem -out server.crt

ここで、server.crtとkey.pemファイルを使用します

app.jsまたはserver.jsファイル

var https = require('https');
var https_options = {
  key: fs.readFileSync('key.pem', 'utf8'),
  cert: fs.readFileSync('server.crt', 'utf8')
};

var server = https.createServer(https_options, app).listen(PORT);
console.log('HTTPS Server listening on %s:%s', Host, PORT);

動作しますが、証明書は信頼されていません。画像ファイル内の画像を表示できます。

enter image description here

9
VIKAS KOHLI

同じ問題に直面していた私の場合、certのオプションパラメータをpfxに変更し、utf8エンコーディングを削除しました。

before:

var options = {
    hostname : 'localhost',
    path : '/',
    method : 'POST',
    cert: fs.readFileSync(testCert, 'utf8'),
    passphrase:passphrase,
    agent:false,
    rejectUnauthorized:false
};

後:

var options = {
    hostname : 'localhost',
    path : '/',
    method : 'POST',
    pfx: fs.readFileSync(testCert),
    passphrase:passphrase,
    agent:false,
    rejectUnauthorized:false
};
8
Mayank Kumar

これは、nodejs証明書の有効期限が切れているためだと思います。次の行を入力します。
npm set registry http://registry.npmjs.org/
その後、npm installで再試行してください。これで実際に問題が解決しました。

2
Avanthika

私にとって問題は、キーと証明書を交換したことでした。

var options = {
   key: fs.readFileSync('/etc/letsencrypt/live/mysite.com/privkey.pem'),
   cert: fs.readFileSync('/etc/letsencrypt/live/mysite.com/fullchain.pem'),
   ca: fs.readFileSync('/etc/letsencrypt/live/mysite.com/chain.pem')
};
2
Kyle Coots

実際に、これと同じエラーメッセージが表示されました。

問題は、構成オブジェクトでkeyおよびcertファイルがスワップされていたことです。

0
H. Green

記録する場合

var options = {
  key: fs.readFileSync('./key.pem', 'utf8'),
  cert: fs.readFileSync('./csr.pem', 'utf8')
};

不適切なエンコードのために無効な文字があることに気付くかもしれません。

0
F.O.O

Windowsを使用している場合は、証明書ファイルcsr.pemとkey.pemにUNIXスタイルの行末文字がないことを確認する必要があります。 Opensslは、UNIXスタイルの行末でキーファイルを生成します。これらのファイルは、unix2dosなどのユーティリティまたはnotepad ++などのテキストエディターを使用して、DOS形式に変換できます。

0
neesh