12

自分のプロジェクトでTypesafe の Configを使用したいのですが、統合サーバーまたは運用サーバーのファイル システム上のどのファイルにもクリア テキストのパスワードを使用したくありません。また、クリア テキストのパスワードを保存するために環境変数を使用したくありません。

理想的には、Spring で利用可能なJasypt EncryptablePropertyPlaceholderConfigurerと同様のソリューションが必要です。これにより、一部のプロパティ値を暗号化されているものとして指定し、値をアプリケーションに渡す前に構成システムがそれらを自動的に復号化できるようになります。JCE キーストアを使用してキーを保存し、アプリに渡したいのですが、データベースを使用してキーを保存する他のツールも使用できます。

Typesafe Config プロジェクトをこのように動作させることができた人はいますか?

更新: sourcedelica は、キーを環境変数として渡すことに依存するソリューションを批判するのは完全に正しかったです。より安全な方法でキーを処理するソリューションをリクエストするように質問を変更しました。

4

4 に答える 4

7

暗号化キーを環境変数として渡すことに満足している場合は、代わりにすべての機密プロパティを環境変数として渡すことができ、Typesafe 構成ライブラリで暗号化を直接使用することを心配する必要はありません。

例えば:

my.sensitive = ${FOO_ENV}

環境変数を使用して平文のパスワードを保存したくないとおっしゃいましたが、暗号化キーを環境変数に保存している場合は同等です。

または、環境変数の代わりにシステム プロパティを使用することもできます。たとえば、アプリを起動するときは、 を使用します-Dmy.sensitive=xxx

暗号化された値を構成に取得することになった場合は、ラッパー クラスを使用して復号化を行うことができます。 ラッパー クラスを使用して、optString Configなどのメソッドを追加します。のようなメソッドを追加できdecryptStringます。

本番環境で使用する鍵の保護に関する議論については、私の質問:本番環境でのパスワードの保護を参照してください。

于 2013-04-26T22:13:17.063 に答える
0

あなたがすでに知っていることをあなたに話す危険を冒して...

  • パスワードを保存しない -- 代わりに保存してハッシュと比較する
  • パスワード ハッシュには Bcrypt を使用します。これは遅いため、ブルート フォース攻撃を防ぐのに適しています。
  • ソルトを使用 -- レインボー テーブル スタイルの攻撃を防ぐ
  • SSL (https) を使用 -- パスワードが平文で見られないようにする


Mindrot jBCrypt ライブラリ を使用する例を次に示します。

  def PasswordHash( name:String, pwd:String, version:Int = 1 ) : String = {
    if( バージョン == 2 && false )
    {
      // 変更は新しいバージョンとして作成し、ここに追加する必要があります
      ""
    }
    そうしないと
    {
      import org.mindrot.jbcrypt.BCrypt // jbcrypt-0.3m.jar

      // ソルトはパスワード ハッシュに組み込まれます
      val salt = BCrypt.gensalt(12) // デフォルトは 10、または 2**10 ラウンドです。より多くのラウンドは遅くなります。

      BCrypt.hashpw( (名前 + pwd), 塩 )
    }
  }

  def VerifyPassword( name:String, pwd:String, hash:String, version:Int = 1 ) : Boolean = {
    if( バージョン == 1 )
    {
      import org.mindrot.jbcrypt.BCrypt // jbcrypt-0.3m.jar

      BCrypt.checkpw( (名前 + pwd), ハッシュ )
    }
    そうしないと
      間違い
  }


> PasswordHash( "johnny", "mypassword" )
res4: 文字列 = $2a$12$dHIlTL14.t37Egf7DqG4qePE446GzzhIUAVuewMfkhfK0xxw3NW6i

> VerifyPassword(「johnny」、「mypassword」、「$2a$12$dHIlTL14.t37Egf7DqG4qePE446GzzhIUAVuewMfkhfK0xxw3NW6i」)
res5: ブール値 = true

> VerifyPassword(「johnny」、「mommiespassword」、「$2a$12$dHIlTL14.t37Egf7DqG4qePE446GzzhIUAVuewMfkhfK0xxw3NW6i」)
res6: ブール値 = false

あなたがやろうとしていることについては、「名前」、「パスワードハッシュ」、および「ハッシュバージョン」を構成に保存すると思います。

于 2013-04-26T20:43:41.923 に答える