web-dev-qa-db-ja.com

NodeJS&SSL-「不正なパスワード読み取り」

ノードは、SSL通信用のセキュアコンテキストの作成に失敗しています。

具体的には、iOSで動作するようにリモート通知を取得しようとしています。このエラーをスローするnode-apnと呼ばれるモジュールを使用します。

Error: error:0906A068:PEM routines:PEM_do_header:bad password read
at Error (native)
at Object.createSecureContext (_tls_common.js:108:19)
at Object.exports.connect (_tls_wrap.js:852:21)
at apnSocket (/home/Slurp/node_modules/apn/lib/socket.js:56:19)
at Connection.<anonymous> (/home/Slurp/node_modules/apn/lib/connection.js:188:17)
at _fulfilled (/home/Slurp/node_modules/apn/node_modules/q/q.js:834:54)
at self.promiseDispatch.done (/home/Slurp/node_modules/apn/node_modules/q/q.js:863:30)
at Promise.promise.promiseDispatch (/home/Slurp/node_modules/apn/node_modules/q/q.js:796:13)

ただし、これは一般的なエラーのようであり、APNとは特に関係ありません。

39
MrQuiw

これは、証明書の生成時にパスフレーズを指定したためです。これは、使用したい人が提供する必要があるパスワードです。

資格情報にパスフレーズフィールドを追加すると、問題が解決します。

var credentials = {
    key: fs.readFileSync('XXX.key', 'utf8'),
    cert: fs.readFileSync('XXX.crt', 'utf8'),
    passphrase: 'XXXX'
}

var httpsServer = https.createServer(credentials, app);
79
Gang Su

次のコマンドは暗号化されていないキーを生成するため、パスフレーズを提供する必要はありません。

openssl rsa -in yourKey.key -out newKey.key

このコマンドにより、パスフレーズの入力が求められます。

8
Daniel

これらを使用してpemを生成します。

openssl genrsa -out server-key.pem 1024 openssl req -new -key server-key.pem -out server-csr.pem openssl x509 -req -in server-csr.pem -signkey server-key.pem -out server-cert.pem