デモ目的で秘密鍵を生成しています。
$ openssl genrsa
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAvB8fZFRS83Kztend5KO9cnWXaqLWot0qLDeLcS8ly718FUdm
3VcCY5j737zz4iwmFf3b20Q2XxlbYC/M13wTJzHBf2d1mRDlpZq7CgX/JSEUW/Hr
uXiF6PI+ypkvskyoQcz04rlT8skd7tanXhXINnLwW7gCiNlxQQFkrpfO8Fkh+vYL
...
Ewac3GAh9CiMikQEYNxpsuLLboS4NcaQWiGB+1imtPtbp8Gf89pJSVBDubgza2Bb
rucNxP3HZtPd6G9CvkMJREYL7jHkXYa5DBzs9LB9mLB4b5H/6KN/fsfj
-----END RSA PRIVATE KEY-----
\n
削除する各行の末尾に改行文字があります。すべてを1行にまとめて環境変数に設定できることを願っています。注:複数行の環境変数はサポートされていない.env
ため保存できません。docker-compose
新しい行をすべて削除しました。
$(openssl genrsa | tr -d '\n')
-----BEGIN RSA PRIVATE KEY-----MII...-----END RSA PRIVATE KEY-----
次に、2つの改行文字を手動で挿入します\n
。これをスクリプトで自動化しようとしています(したがって、この記事)。そうしないと、JWT署名は失敗します。
-----BEGIN RSA PRIVATE KEY-----\nMII...\n-----END RSA PRIVATE KEY-----
.env
ファイルで定義します。
JWT_PRIVATE_KEY=-----BEGIN RSA PRIVATE KEY-----\nMII...\n-----END RSA PRIVATE KEY-----
ノードとドットフ私は次のようにアクセスします。
privateRsaKey = process.env.JWT_PRIVATE_KEY.replace(/\\n/gm, '\n'),
これで、privateRsaKey
次のようになります。
-----BEGIN RSA PRIVATE KEY-----
MII...
-----END RSA PRIVATE KEY-----
さて、実際に秘密鍵を使って署名します。JWT
const signed = jwt.sign(payload, privateRsaKey, {
algorithm: 'RS256',
...
});
Dockerコンテナを起動すると、上記のすべての操作が期待どおりに機能します。
2つを手動で挿入する必要がないように、スクリプトの助けが必要です。\n
あなたの助けと忍耐に感謝します。本当にありがとうございます。
答え1
改行文字をに置き換えると、改行文字または生の改行文字になる可能性がある\n
ため、結果があいまいになります。入力が含まれていないため、この特別な場合は問題になりませんが、許可されている場合はコメントを含めることができるいくつかのPEM形式を含む他の多くの場合は問題になります。\n
\n
\n
\n
転送メカニズムを介してデータを渡す一般的な方法(あなたの場合はDockerコンテナに保存)は、Base64でエンコードすることです。 Base64エンコーディングには、ASCII文字(大文字と小文字)、数字、句読点の3つのみが含まれます+/=
。スペースは重要ではありません。改行なしでエンコード:
private_key="$(openssl genrsa)"
export encoded_private_key="$(printf '%s\n' "$private_key" | base64 | tr -d '\n')"
デコード:
private_key=$(echo "$encoded_private_key" | base64 -d)
または
echo "$encoded_private_key" | base64 -d >private_key.pem
答え2
Shellの専門家がこれをより簡単にします。しかし、私の意見は次のとおりです。
openssl genrsa 2>/dev/null | awk '{ if ($0~"BEGIN RSA") {ORS="\\n"; print} else {if ($0~"END RSA") {print "\\n"; print} else {ORS=""; print}}}'
-----BEGIN RSA PRIVATE KEY-----
MIIE....skipped
-----END RSA PRIVATE KEY-----
ご希望の製品を生産してみてください。