現在、サーバーをセットアップするために Net::LDAP::Server を使用していますが、十分に安全ではありません。TLS またはその他の安全な接続を介して LDAP サーバーをセットアップできるモジュールまたは方法はありますか?
安全な LDAP サーバーに接続する方法に関する多くの情報を見つけましたが、安全な LDAP サーバーをセットアップする方法が見つかりません。誰かアドバイスをいただけますか?
LDAPS接続はどのように機能しますか
LDAPSは非公式のプロトコルです。HTTPSはHTTPに対して、つまり、ポート636(デフォルト)へのセキュリティで保護されたSSL(「セキュアソケットレイヤー」)接続を介して実行されるまったく同じプロトコル(この場合はLDAPv2またはLDAPv3)です。
すべてのサーバーがLDAPS接続をリッスンするように構成されているわけではありませんが、リッスンする場合は、通常、通常のプレーンテキストのLDAPポートとは異なるポートにあります。
LDAPSを使用すると、上記の脆弱性を解決できる可能性がありますが、SSLを単に「使用」することは、システムを自動的に「安全」にする特効薬ではないことに注意してください。
まず、LDAPSは、正しいサーバーに接続していることを確認する問題を解決できます。クライアントとサーバーが接続すると、特別なSSL「ハンドシェイク」が実行されます。その一部には、サーバーとクライアントがX.509証明書を使用して記述された暗号化キーを交換することが含まれます。クライアントが正しいサーバーに接続されていることを確認したい場合は、ハンドシェイクで送信されるサーバーの証明書を確認するだけです。これは2つの方法で行われます。
証明書が信頼できる人によって署名(信頼)されていること、および証明書が取り消されていないことを確認してください。たとえば、サーバーの証明書がVerisign(www.verisign.com)によって署名されている可能性があり、正当な証明書に署名するためにVerisignを信頼することにしました。サーバーの証明書のDN内の最下位のcnRDNが、LDAPSオブジェクトの作成時に接続したホスト名の完全修飾ホスト名であることを確認してください。たとえば、サーバーがの場合、チェックするRDNはcn=ldap.example.comです。これを行うには、Net :: LDAPSオブジェクトを作成するときにcafileおよびcapathオプションを使用し、verifyオプションを「require」に設定します。
ハッカーが接続上のパスワードやその他の情報を「盗聴」するのを防ぐために、SSL接続で使用される暗号化アルゴリズムが十分に優れていることも確認する必要があります。これは、SSLハンドシェイクによって決定されるものでもあります。クライアントとサーバーが許容可能なアルゴリズムについて合意できない場合、接続は確立されません。
Net :: LDAPSは、デフォルトで、OpenSSLのコピーに組み込まれているすべてのアルゴリズムを使用します。ただし、「低」強度の暗号化を使用すると見なされるアルゴリズムと、エクスポート強度の暗号化を使用するアルゴリズムは除きます。'ciphers'オプションを使用してNet::LDAPSオブジェクトを作成するときに、これをオーバーライドできます。
安全な接続を確立したら、実際に使用されている暗号化アルゴリズムが許容できるものであることも確認する必要があります。壊れたサーバーが「フェイルオーバー」して暗号化されていない接続を提供するフィールドで観察されているので、それを確認する必要があります。
LDAPとTLSはどのように機能しますか
SSLは、多くのネットワークセキュリティ問題に対する優れたソリューションですが、標準ではありません。IETFは、SSLメカニズムのいくつかの欠陥を修正し、TLS( "Transport Layer Security")を説明するRFC 2246と呼ばれる標準を公開しました。これは、SSLのクリーンアップおよび標準化されたバージョンです。
TLSはLDAPv3サーバーでのみ使用できます。これは、LDAPおよびTLSの標準(RFC 2830)で、通常のLDAP接続(つまり、ポート389)をプレーンテキストからTLS接続にオンデマンドで切り替えることができることを要求しているためです。切り替えメカニズムは、特別な拡張LDAP操作を使用します。これらはLDAPv2では無効であるため、LDAPv3接続でのみTLSに切り替えることができます。
したがって、LDAPv3でTLSを使用する方法は、Net :: LDAP :: new()を使用して通常のLDAPv3接続を作成してから、Net :: LDAP :: start_tls()を使用して切り替えを実行することです。start_tls()メソッドはNet :: LDAPS :: new()とほぼ同じ引数を取るので、詳細については上記を確認してください。
まあ、おそらく LDAPS は RFC ではありませんが、それが標準でもセキュアでもないと言うのは、確かに言い過ぎです。
LDAPS は、すべての LDAP サーバー ベンダーによってサポートされています。LDAPS は少なくとも HTTPS と同じくらい安全です。すべての SSL (または TLS) と同様に、セキュリティの弱点は証明書の処理方法です。
確かに LDAPS は、TLS よりも LDAP サーバーのベンダーとクライアントによってサポートされています。一例として、Active Directory は TLS をサポートしていません。supportedExtention 1.3.6.1.4.1.1466.20037 の rootDSE をクエリすると、特定の LDAP サーバーで TLS がサポートされているかどうかが表示されます (表示されるはずです)。
http://ldapwiki.willeke.com/wiki/Perl%20LDAP%20Samplesにいくつかの例があります 。