web-dev-qa-db-ja.com

Javaアプリケーションにパスワードを保存する

Java Webアプリケーションにパスワードを保存する最も安全な方法は何ですか?

私はDBへのパスワードについて話しているわけではないので、復号化可能な方法で保存する必要があります。これはクラウド環境です。WebアプリケーションのVMが危険にさらされても、DB資格情報を保護する必要があります。

私のオプションは何ですか?暗号化して保存する場合、暗号化キーはどこに/どのように保存すればよいですか?

9
AaronS

Javaアプリケーションにパスワードを保存する最良の方法は、Windowsベースのシステムで実行している場合、MicrosoftのDPAPIを使用することです。これは、ユーザーのWindowsクレデンシャルを使用してパスワードを暗号化します。 。 http://msdn.Microsoft.com/en-us/library/ms995355.aspx

Java便利なラッパー http://jdpapi.sourceforge.net/ もあります。

Windowsがキーを管理するため、キーを自分で管理する必要はありません。 Javaでは、キーを管理してパスワードを保存する独自のメカニズムを作成することを決して考えないでください。 .jarファイルにアクセスできる人は誰でも簡単にソースコードファイルにリバースエンジニアリングしてメカニズムを取得できるため、安全ではありません。 CryptProtectData()は進むべき道です

7
sudhacker

Javaアプリケーションを2つの部分に分割します。フロントエンドはHTTPリクエストを処理し、バックエンドはデータベースを処理します。これらはシンプルなAPI(IPC)を介して相互に通信します。したがって、データベース資格情報はバックエンドアプリケーションに残り、フロントエンドアプリケーションが危険にさらされても安全です。各アプリケーションが自分のユーザーで実行され、お互いのファイルにアクセスできないことを確認してください。Linuxを使用している場合は、SELinuxのようなMACを使用することをお勧めします、TOMOYO、AppArmorを使用してアプリケーションを分離します。または、各アプリケーションを独自のVMまたは物理マシン内で実行することもできますが、これはリソースの浪費になります。

https://en.wikipedia.org/wiki/Inter-process_communication

https://stackoverflow.com/questions/830641/is-it-possible-to-have-interprocess-communication-in-Java

5
Matrix