TLS = requiredを使用してOpenLDAPを構成する


16

ここで説明するように、現在、OpenLDAPはldapmodify cn = configで設定する必要があります。しかし、TLSトラフィックのみを受け入れるように設定する方法は見つかりません。サーバーが暗号化されていないトラフィックを受け入れることを確認しました(ldapsearchとtcpdumpを使用)。

通常、IPテーブルを使用して非SSLポートを閉じるだけですが、SSLポートの使用は推奨されないため、そのオプションはありません。

したがって、次のようなSSL構成コマンドを使用します。

dn: cn=config
changetype:modify
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/bla.key
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/bla.crt
-
replace: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/ca.pem

TLSを強制するためのパラメーターはありますか?

編集:olcTLSCipherSuiteを試してみましたが、機能しません。デバッグ出力:

TLS: could not set cipher list TLSv1+RSA:!NULL.
main: TLS init def ctx failed: -1
slapd destroy: freeing system resources.
slapd stopped.
connections_destroy: nothing to destroy.

Edit2(ほぼ修正済み):ロードすることで修正できました:

# cat force-ssl.tx 
dn: cn=config
changetype:  modify
add: olcSecurity
olcSecurity: tls=1

しかし、その後のようなコマンド

ldapmodify -v -Y EXTERNAL -H ldapi:/// -f /etc/ssl/tls-required.ldif

もう動作しません...そしてそれを次のように変更します:

ldapmodify -v -x -D "cn=admin,dc=domain,dc=com" -H ldap://ldap.bla.tld/ -ZZ -W -f force-ssl.txt

「ldap_bind:Invalid credentials(49)」が表示されます。どうやら、このbinddnがrootdnとして指定されていても、それを使用して変更することはできませんcn=config。変更できますか?

回答:


16

私はそれを得たように見えました:

これは私がしました:

dn: olcDatabase={1}hdb,cn=config
changetype:  modify
add: olcSecurity
olcSecurity: tls=1

そして、それは望ましい効果があるようです。私はまだ次のようなコマンドを実行できます:

ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config

ただし、ldapsearch -xLLL -b ...SSLなしで「」とバインドしようとすると、「TLSの機密性が必要です」と表示されます。


2
+1それはうまくいくようです。残念ながら、クライアントがSTARTTLSなしで認証しようとすると、パスワードがプレーンテキストで送信され、サーバーはTLS confidentiality requiredメッセージで応答します。
カルロスキャンデロス

1
セキュリティ上の問題としてOpenLDAPメーリングリストに投稿しました。FTPの例を挙げました。USERを与えるとすぐにブロックします。しかし、私は却下されました。こちらをご覧ください。
ハーフガー

おかしい、私はこの答えを見つける前にそのスレッドを見ていた:)
カルロス・カンペロス

ありがとう、まさに私が探していたもの。平文でネットワークを通過するパスワードは、クライアント側ソフトウェアに固有の実装になります。TLS要件は、ユーザーとしてバインドする前に、最初に匿名バインドでテストできます。
サーバー障害

3

これは、TLSCipherSuiteオプションを使用して実現されます。例は、OpenLDAP ZytraxブックのLDAPセキュリティの章に記載されています。これにより、サーバーが受け入れる暗号スイートをOpenLDAPに伝えることができます。たとえば、NULL暗号スイート(つまり、非暗号化セッション)が必要ないことを伝えることができます。

ただし、OpenLDAPはOpenSSLまたはGnuTLSライブラリに対してリンクできることに注意してください。それらは異なる暗号リストを使用して、暗号化のサポートを記述します。OpenSSL暗号リストはのようなコマンドで取得できopenssl ciphers -v、GnuTLSリストはで取得できますgnutls-cli -l

暗号化なしで接続を無効にする最も簡単な方法は、次のようになります。

dn: cn=config
changetype: modify
replace: olcTLSCipherSuite
olcTLSCipherSuite: ALL:!NULL

GnuTLS構文を使用したより具体的な制限:

dn: cn=config
changetype: modify
replace: olcTLSCipherSuite
olcTLSCipherSuite: TLS_RSA_CAMELLIA_128_CBC_SHA1:TLS_RSA_CAMELLIA_256_CBC_SHA1:!NULL

より完全な例は次のとおりですOpenSSL構文を使用):

dn: cn=config
changetype: modify
replace: olcTLSCipherSuite
olcTLSCipherSuite: HIGH:+SSLv3:+TLSv1:MEDIUM:+SSLv2:@STRENGTH:+SHA:+MD5:!NULL

同様の質問について読む価値があるOpenLDAPメーリングリストのディスカッションがあります。

また、OpenLDAPのcliツールなどldapsearch、暗号化されていない接続を禁止するサーバーに接続するときに、TLSを使用するように自動的に切り替えられることにも注意してください。つまり、argsリストに追加する必要ありませ-Z


私はそれを試してみました。うまくいきませんでした。質問を編集して、それを反映させました。
Halfgaar

あなたが報告するエラーは、TLS実装が知っている暗号に関連していると思います。OpenLDAPは、OpenSSLまたはgnuTLSライブラリを使用してコンパイルできます。私が与えた例ではOpenSSL構文を使用しましたが、実装はおそらくgnuTLSを使用しています。私はたとえば、あなたが簡素化のCipherSuiteをしようと提案をいただきたいALL:!NULL
トニン

「警告:巧妙にしないで、TLSCipherSuiteをHIGH:MEDIUM:-SSLv2のような巧妙なものに変更してください-これはopensslディレクティブです」-rogermoffatt.com/2011/08/24/ubuntu-openldap-with-ssltlsを読んでください
-Xdg
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.