web-dev-qa-db-ja.com

アプリケーションの秘密のsshキーを保存する方法は?

JWTの暗号化と復号化に使用している秘密鍵と公開SSH鍵のペアがあります。

そのため、私はJWTを作成して秘密鍵で署名し、公開鍵をクライアントと共有して、クライアントはそれを使用してJWTをデコードします。

これを行うために秘密鍵を頻繁に使用するので、秘密鍵をどこにどのように保存しますか?

私のアプリケーションは複数のサーバーインスタンスにまたがっています。では、秘密鍵ファイル(.pemファイル)をアプリケーションコードに保存して、新しいインスタンスにデプロイするたびに簡単に使用できるようにしますか、それともdbに保存しますか?または、これらのどちらも正しくありませんか?

誰かがこれを手伝ってくれませんか?

1
megamind79

秘密暗号化キーは安全に保管する必要があります。これは、それらのキーにアクセスする正当な必要性がある人/ソフトウェアだけがアクセスでき、他の人/キーはアクセスできないことを意味します。

最悪の方法は、アプリケーションコードに秘密キーをバンドルすることです。

  • 開発者に本番環境で使用されるキーへのアクセスを提供します
  • あなたの鍵はあなたのソフトウェアのコピーを購入する人々に提供されるでしょう
  • キーが変更された場合(失効または失効により)、新しいバージョンをロールアウトする必要があります。

ベストプラクティスは、構成ファイル(または名前/パスが構成ファイルで構成されているキーファイル)からキーを読み取ることです。同じキーを使用する必要のあるサーバーインスタンスが複数ある場合、これを調整するのは少し難しいですが、キーが共有ファイルシステムに保存されている場合は調整できます。

データベースにキーを保存することは、その中間のどこかです。これは、アプリケーションのすべてのインスタンスからアクセスできる場所であり、(偶発的な)漏洩からキーを保護できますが、管理者がファイルシステムにキーを置くよりもキーを更新するのが少し難しいです。