2023年2月8日水曜日

openldap サーバで tls を設定する方法

openldap サーバで tls を設定する方法

概要

前回 bitnami の openldap イメージで ldap サーバを構築してみました

今回は TLS 設定行ってみます

環境

  • Ubuntu 18.04
  • docker 20.10.7
  • bitnami/openldap 2.6.3

事前準備

  • ドメインの取得
  • A レコードの登録
  • A レコードの FQDN に対応した証明書の取得

は事前に済ませておいてください
ワイルドカード証明書があればそれでも OK です

今回証明書は certs 配下にデータを配置するディレクトリは data 配下とします

TLS + openldap の構築

コマンドは以下の通りです

docker run --name openldap -d \
    -v $(pwd)/certs:/opt/bitnami/openldap/certs \
    -v $(pwd)/data:/bitnami/openldap/ \
    -e ALLOW_EMPTY_PASSWORD=yes \
    -e LDAP_ENABLE_TLS=yes \
    -e LDAP_TLS_CERT_FILE=/opt/bitnami/openldap/certs/server.crt \
    -e LDAP_TLS_KEY_FILE=/opt/bitnami/openldap/certs/server.key \
    -e LDAP_TLS_CA_FILE=/opt/bitnami/openldap/certs/ca.crt \
    -p 1636:1636 \
    bitnami/openldap:latest

ちょっと解説

data ディレクトリは

  • mkdir data
  • chmod -R 777 data

しておきます
777 は「mkdir: cannot create directory ‘/bitnami/openldap/data’: Permission denied」対策です

ldapsearch で指定するホスト名は登録した FQDN でアクセスすることになるので 1636 ポートは外部からアクセスできるようにしておきます

証明書と鍵、CAファイルは指定が必須になります
証明書に CA 証明書の情報も記載されている場合はこちらの記事を参考に分割してください

動作確認

  • ldapsearch -x -H ldaps://your.ldap-server.com:1636 -b dc=example,dc=org -D "cn=admin,dc=example,dc=org" -w adminpassword

TLS である ldaps プロトコルの指定と 1636 ポートを指定します

これで検索結果が返却されれば OK です

トラブルシューティング

「-d 1」というオプションを付与すればデバッグ表示できます

  • ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

TLS の場合サーバ証明書のホスト名とアクセスするホスト名が同一でなければなりません
例えば ldaps://localhost:1636 などとすると上記のエラーになります

  • tls_write: want=31 error=Bad file descriptor

これは正常に検索結果が返ってきているにも関わらずデバッグ表示すると最後に表示されているエラーでした
基本は無視で問題ないかなと思います

最後に

Openldap で TLS を設定する方法を紹介しました
今回は docker から構築しましたが slapd を使った場合でも同じようなオプションが slapd.conf にあるのでそれを編集すれば有効にできると思います

ちなみに slapd.conf の場所はコンテナ内にはなくすべて ldif ファイルで管理されています

  • docker exec openldap slapcat -F /opt/bitnami/openldap/etc/slapd.d
  • sudo cat data/slapd.d/cn\=config.ldif

0 件のコメント:

コメントを投稿