5

DIGEST-MD5暗号化を使用してLDAPサーバーへの認証を試みています。Simple暗号化を使用している間は問題なく機能しますが、明らかな理由により、パスワードをプレーンテキストでネットワーク経由で送信することはできません。奇妙なことに、Softerra LDAPブラウザーを使用している間、Digest-MD5を使用してサーバーに接続できますが、コードを介してさまざまなエラーが発生します。

これは、初期コンテキストを作成する前にセキュリティ認証などを設定しようとするLDAP認証クラスのコードスニペットです。

Hashtable env = new Hashtable(11);
env.put(Context.SECURITY_AUTHENTICATION, "DIGEST-MD5");
env.put(Context.SECURITY_PRINCIPAL, username);
env.put(Context.SECURITY_CREDENTIALS, password);
env.put(Context.PROVIDER_URL, ldapURI);
env.put(Context.INITIAL_CONTEXT_FACTORY, context);
env.put("com.sun.jndi.ldap.trace.ber", System.out);
try{
    DirContext ctx = new InitialLdapContext(env,null);
} Catch (NamingException e){
    e.printStackTrace();
}
4

1 に答える 1

4

私の回答はあなたの質問への回答ではなく、誤解を正すものです。BIND リクエストで SASL DIGEST-MD5 メカニズムを使用するには、ディレクトリ サーバーがユーザーのパスワードにアクセスできる必要があります。ディレクトリ サーバーがパスワードにアクセスできるようにするには、パスワードをクリア テキストで保存するか、可逆パスワード スキームで暗号化する必要があります。リバーシブル パスワード スキームは、ソルト付き SHA ハッシュ、特に長いダイジェストを持つソルト付き SHA-2 ハッシュよりも本質的に安全性が低くなります。その結果、DIGEST-MD5 で SASL を使用することは、安全な接続を介して単純な BIND 要求を使用する場合よりも安全性が低くなります。 StartTLS 拡張操作であり、SASL EXTERNAL メカニズムまたは Kerberos よりも安全性が低くなります。

誤解は、「プレーン テキストでネットワーク経由で送信されるパスワード」という概念は安全ではないということです。長いダイジェスト長のソルト付き SHA-2 ハッシュ) を使用し、安全な接続を介してクリア テキストのパスワードを送信する方が、ディレクトリ サーバーにパスワードをクリア テキストまたは可逆暗号化スキームで保存させるよりも安全です。したがって、DIGEST-MD5 を使用した SASL は避ける必要があります。. 暗号化されたセッションの確立中に提示された証明書からサーバーが認証情報を抽出する EXTERNAL メカニズムを使用した SASL は、より優れた代替手段です。Kerberos も優れた代替手段です。ソルト SHA アルゴリズムでパスワードをハッシュした後にサーバーがパスワードを保存している場合、ネットワーク上のプレーンテキストもより安全です。

DIGEST-MD5 で SASL を使用することが絶対に不可欠な場合は、利用可能な最も強力な暗号化スキーム (私が間違っていなければ AES) を使用してパスワードを暗号化するようにディレクトリ サーバーを構成する必要があります。プロ品質のサーバーは、AES を使用してパスワードを暗号化できます。

于 2012-08-09T12:05:12.067 に答える