0

Java Swing フロントエンドが postgres データベースにアクセスするシステムを構築しています。今週Jasyptを発見する前は、もともと Postgres 独自の暗号化メカニズムを使用する予定でした。それは問題なく機能しましたが、ネットワーク上のパスワードを暗号化する必要があったため、Jasypt に目を向けました。

問題は、Postgres ストアド関数に固定パスワードを入力する必要があることです。つまり、入力パスワードが 'aaa' の場合、Postgres ストアド関数 ('aaa' 以外) に入力された他のパスワードは一致しません。

これら 2 つの暗号化メカニズムを連携して動作させる方法はありますか、それとも Postgres をダンプする必要がありますか?

私のユーザーテーブル:

CREATE TABLE "user"
(
  id serial NOT NULL,
  cryptpwd text NOT NULL,
  md5pwd text NOT NULL,
  ...
)

暗号化パスワード:

cryptedPassword = crypt(passwordIn, gen_salt('md5'));
md5Password = md5(passwordIn);
INSERT INTO "user"(username, cryptpwd, md5pwd, ...)
      VALUES (usernameIn, cryptedPassword, md5Password, ...);

パスワードの復号化:

select ..... from "user" .... where username = usernameIn and cryptpwd = crypt(passwordIn, cryptpwd);

2 つを連携させることができない場合は、ネットワーク上で暗号化する必要があるため、Postgres のメカニズムをダンプする必要があります。

また、データベース接続文字列とデータベースのユーザー名とパスワード(フレームワークを使用していない...うまくいけばSSLを使用した単純な古いjdbc接続-まだ実装していない)に関しては、Jasyptを使用できるとは思わない.データベースレベルで復号化する必要があります。この場合、SSL だけで十分でしょうか?

ありがとう。

4

1 に答える 1

0

パスのすべての部分で SSL だけで十分だと思います。LedgerSMB では (Perl ベースではありますが) 別のことを行い、サーバー間およびサーバーとクライアント間の SSL 保護リンクに依存しています。ただし、アプローチに関して考慮すべき点がいくつかあります。

実際には、クライアントから SSL 接続を介して再利用可能な形式 (プレーン テキスト) で db ユーザー名とパスワードをミドルウェアに渡し、別の SSL 接続を使用して PostgreSQL にログインし、この方法で認証します。これは問題なく機能しますが、私たちが直面している問題の領域は、皆さんが直面する問題の領域と多少似ています。これらには以下が含まれます:

  1. ロギング。パスワードが誤ってログに記録される可能性はありますか? これは LedgerSMB に関する懸念事項であり、できる限りの対策を講じていますが、サーバーの構成が不適切であるか、プログラムが改ざんされていると、ユーザー名とパスワードがログに記録される可能性があります。私たちの場合、これは主にミドルウェア レベルで行われますが、あなたの場合、クエリ ロギングでもこれを行うことができますよね?

  2. 資格情報が意図せずに再利用される可能性はありますか? いくつかの方法でこれを防ぎますが、検討する価値があります。

全体として、私たちは SSL を信頼しています。それを超えて追加の暗号化を追加しても得られるものはあまりなく、キー管理により多くの複雑さが追加され、IMO のわずかな利益に値しません。

于 2013-04-04T13:04:41.607 に答える