web-dev-qa-db-ja.com

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

Openldapサーバーがあり、暗号化されていない通信を許可したくないので、ポート389(starttls)を介したtlsまたは636(ldaps)を介したsslのいずれかを使用できます。

構成にslapd.confを使用するため、olcSecurityはオプションではありません。

TLSCipherSuiteはslapd.confでそれを行う方法のようです。ただし、そのslapdを使用すると、設定が開始されないか無視されます(つまり、暗号化されていない要求を受け入れます)。

以下を使用すると、slapdが起動しません(エラー:TLS init def ctxが失敗しました:-1)。

- TLSCipherSuite ALL
- TLSCipherSuite Default
- TLSCipherSuite ALL:!NULL
- TLSCipherSuite ALL:!aNULL
- TLSCipherSuite AES256-SHA #one of the ciphers offered by openssl

slapdは起動しますが、以下を使用すると暗号化されていない要求を受け入れます。

- TLSCipherSuite NORMAL
- TLSCipherSuite NORMAL:!NULL #would be acceptable
- TLSCipherSuite !NULL #would be acceptable

でテストします

ldapsearch -L -x -W -h [SERVER] -D [USER] - b [SEARCHBASE] uid=[USER] 

(暗号化されていない)

そして

ldapsearch -L -x -W -ZZ -h [SERVER] -D [USER] - b [SEARCHBASE] uid=[USER]

(暗号化)

Osopenldapが実行されているのはdebian8.7です。 openldapバージョンはopensslではなくgnutlsを使用しているようです。そのため、問題の原因である可能性があります。

しかし、最後の3つのTLSCipherSuiteバリエーションは有効な構文のようで、少なくともslapdはエラーなしで開始します。なぜ!NULL slapdが暗号化されていないリクエストを受け入れないようにしますか?最後の2つ(使用可能な暗号を使用しますが、暗号を許可しない)は許容されます。

追加の設定/パラメータが必要ですか?

ここ (上記のとおり)の提案を試しましたが、うまくいきませんでした。

2
blockbax

_slapd.conf_の使用を停止しますが、これは一般的なアドバイスです。 _olc*_のすべてではないにしてもほとんどの_slapd-config_ディレクティブは、_slapd.conf_スタイル構成の非olcディレクティブとして使用できます。

securityの場合、非TLS SASLも実行しない限り、_security tls=1_のオーダーで十分です。


TLSCipherSuiteの操作は、TLSが使用された後にのみ受け入れ可能な暗号を制御するため、機能しません。TLSを使用/要求するかどうかを選択するかどうかは重要ではありません。そのためには、securityを使用する必要があります。ただし、より適切なTLSオプションを使用する必要があります。少なくとも_TLSCipherSuite HIGH:!aNull:!MD5:@STRENGTH_および_olcTLSProtocolMin 3.1_。


slapd.conf(5)から:

_security <factors>_
必要なセキュリティ強度係数のセット(空白で区切って)を指定します(セキュリティ強度係数の説明については、_sasl-secprops's minssf_オプションを参照してください)。ディレクティブは、グローバルに、および/またはデータベースごとに指定できます。 _ssf=<n>_全体的なセキュリティ強度係数を指定します。 _transport=<n>_トランスポートセキュリティ強度係数を指定します。 _tls=<n>_ TLSセキュリティ強度係数を指定します。 _sasl=<n>_ SASLセキュリティ強度係数を指定します。 _update_ssf=<n>_ディレクトリの更新に必要な全体的なセキュリティ強度係数を指定します。 _update_transport=<n>_ディレクトリの更新に必要なトランスポートセキュリティ強度係数を指定します。 _update_tls=<n>_ディレクトリの更新に必要なTLSセキュリティ強度係数を指定します。 _update_sasl=<n>_ディレクトリの更新に必要なSASLセキュリティ強度係数を指定します。 _simple_bind=<n>_単純なユーザー名/パスワード認証に必要なセキュリティ強度係数を指定します。トランスポート係数は、基礎となるトランスポートによって提供されるセキュリティの尺度であることに注意してください。 ldapi://(そして最終的にはIPSEC)。通常は使用しません。

1
84104

Slapd.confを引き続き使用する必要がある場合は、 このスレッド が必要な答えを保持します。

男slapd.confから

TLSVerifyClient<level>

demand | hard | true

互換性の理由から、これらのキーワードはすべて同等です。クライアント証明書が要求されます。証明書が提供されていない場合、または不正な証明書が提供されている場合、セッションはただちに終了します。

暗号の選択に関して、 ロケット科学者のためのZytraxのLDAP はいくつかのヒントを提供します:

# Cipher-list contains only RSA based
# authentication and key-exchange suites 
# supported by TLSv1 (and SSLv3)
TLS_CIPHER_SUITE TLSv1+RSA

# Cipher-list contains only RSA based
# authentication and key-exchange suites 
# supported by TLSv1 (and SSLv3)
# excludes EXPORT and NULL suites
TLS_CIPHER_SUITE TLSv1+RSA:!EXPORT:!NULL

# Ordered list of RSA based
# authentication and key-exchange suites
TLS_CIPHER_SUITE DES-CBC-SHA:DES-CBC3-SHA:RC4-SHA:RC4-MD5

# All ciphers excluding NULL
TLS_CIPHER_SUITE ALL:!NULL

# Default equivalent value if not defined
TLS_CIPHER_SUITE ALL

TLS_CIPHER_SUITETLSCipherSuiteに変更する必要があります。また、どの暗号名が機能するかを確認することをお勧めします( 管理ガイド から):

個々の暗号名に加えて、TLSv1、SSLv3、およびSSLv2とともに、指定子HIGH、MEDIUM、LOW、EXPORT、およびEXPORT40が役立つ場合があります。

GnuTLSで暗号のリストを取得するには、次を使用します。

   `gnutls-cli -l`
0