web-dev-qa-db-ja.com

ActiveDirectoryによる安全なLDAP認証

Active Directoryドメインにバインドし、ユーザーの資格情報をドメインに渡して、ユーザーがWebアプリケーションのいずれかにアクセスできるようにする前に、ユーザーが正常に認証されていることを確認する必要があるWebプロジェクトに取り組んでいます。フロントエンドが資格情報を受け入れるためにHTTPSが正常に機能しています。私たちが直面している問題は、サーバーとActiveDirectoryサーバー間の接続にあります。 Active Directoryサーバーは、IT部門の別のセクションによって管理されており、アクセスできません。このActiveDirectoryサーバーは自己署名証明書を使用しており、完全修飾ドメイン名(つまり、people.local)を持っていません。

TLS_REQCERT変数をneverに設定することについて話している多くの場所を読みました。ただし、man-in-the-middle攻撃が心配で、この設定のままにしておくのは気が進まない。また、LinuxコマンドラインからActive Directoryサーバーにクエリを実行し、自己署名証明書を表示し、自己署名証明書をローカルLinuxサーバーに保存して、この証明書を信頼に使用できることについて説明している記事もいくつか読みました。そのため、TLS_REQCERTをneverに設定する必要はありません。 Linuxコマンドラインから自己署名証明書を表示して保存する方法がわかりません。これを操作可能にするために必要な、実行中のCentOSサーバーがいくつかあります。

あなたが提供できるどんな助けでも大いに感謝されるでしょう。前もって感謝します。

5
John

TLS_REQCERT変数をneverに設定することについて話している多くの場所を読みました。ただし、man-in-the-middle攻撃が心配で、この設定のままにしておくのは気が進まない。

セキュリティについて考えることと、TLS_REQCERTを設定することの意味を理解することの両方で称賛されるべきです。

また、LinuxコマンドラインからActive Directoryサーバーにクエリを実行したり、自己署名証明書を表示したり、自己署名証明書をローカルLinuxサーバーに保存したりできることについて説明している記事もいくつか読んだことがあります...

これを行うには、opensslツールを使用できます。ポート636でLDAP-over-SSLを介してActiveDirectoryにアクセスできると仮定すると、次のことができます。

openssl s_client -connect server.example.com:636 > output < /dev/null

また、コマンドが完了すると、出力にPEMでエンコードされた証明書が含まれていることがわかります。

00000003)
---
Certificate chain
 0 s:/CN=dc1.example.com
   i:/DC=com/DC=example/DC=dc1/CN=example-DC1-CA
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIGjDCCBXSgAwIBAgIKOxasfwAAAAAADDANBgkqhkiG9w0BAQUFADBaMRMwEQYK
...
-----END CERTIFICATE-----
...

BEGIN CERTIFICATE行の前のすべてとEND CERTIFICATE LINEの後のすべてを削除でき、探しているものが得られるはずです。

ADサーバーが自己署名証明書を使用しておらず、代わりにAD認証局によって発行された証明書を使用している可能性もあります。この場合、AD担当者にCA証明書を要求する方が簡単な場合があります。

6
larsks

組織内に専用の認証局サーバーを設置することをお勧めします。このサーバーを使用して、社内のすべてのサーバーの証明書を発行します。証明書、キー、または証明書要求からの情報を表示するには、opensslを使用できます。参照: http://www.openssl.org/support/faq.html および http://www.madboa.com/geek/openssl/

LDAPサーバー用に発行された証明書、またはできればルート証明書は、アプリケーションのSSLキーストアにインポートする必要があります。

0