Настройка поддержки LDAPS на контроллере домена

Для защиты соединений с сервером LDAP, работающим на контроллере домена, может использоваться шифрование трафика на основе протоколов SSL/TLS (LDAP over SSL, LDAPS).

В Эллес используется реализация SSL/TLS, предоставляемая библиотекой GnuTLS.

Для поддержки LDAPS на сервере, выполняющем функции контроллера домена, устанавливается сертификат X.509.

Общие требования

При работе с ключами и сертификатами должны выполняться следующие общие требования:

  • закрытый ключ должен быть доступен без парольной фразы, то есть он не должен быть зашифрован;

  • файлы с ключами и сертификатами должны быть в формате PEM, представляющем собой DER-сертификат, закодированный в формате Base64 и помещенный между блоками -----BEGIN CERTIFICATE----- и -----END CERTIFICATE-----;

  • если используются промежуточные сертификаты, они должны быть добавлены в файл cert.pem после сертификата сервера.

Параметры LDAPS в smb.conf

Для управления поддержкой LDAPS в разделе [global] конфигурационного файла smb.conf (полный путь после установки — /app/inno-samba/etc/) могут задаваться следующие параметры:

  • tls enabled — поддержка TLS для всех соединений, для которых это возможно; возможные значения: yes, no; значение по умолчанию — tls enabled = yes;

  • tls keyfile — имя и путь (относительно каталога /app/inno-samba/private/, если путь не начинается с символа '/') к файлу закрытого RSA-ключа в формате PEM; значение по умолчанию — tls keyfile = tls/key.pem;

  • tls certfile — имя и путь (относительно каталога /app/inno-samba/private/, если путь не начинается с символа '/') к файлу RSA-сертификата в формате PEM; значение по умолчанию — tls certfile = tls/cert.pem;

  • tls cafile — имя и путь (относительно каталога /app/inno-samba/private/, если путь не начинается с символа '/') к файлу с сертификатами удостоверяющих центров в формате PEM; значение по умолчанию — tls cafile = tls/ca.pem;

  • tls crlfile — имя и путь (относительно каталога /app/inno-samba/private/, если путь не начинается с символа '/') к файлу со списком сертификатов, помеченных удостоверяющих центром как отозванные; значение по умолчанию — tls crlfile =;

  • tls priority — строка, описывающая протоколы TLS, которые должны поддерживаться в компонентах Эллес, использующих библиотеку GnuTLS; значение параметра изменяет список приоритетов библиотеки GnuTLS по умолчанию (см. подробнее в документации на библиотеку); значение по умолчанию — tls priority = NORMAL:-VERS-SSL3.0;

    Для обеспечения совместимости в Samba по умолчанию разрешено использование устаревших алгоритмов шифрования и обмена ключами при подключении к серверу LDAP.

    Чтобы повысить уровень безопасности, рекомендуется их отключить, указав в параметре следующее значение:

    tls priority = NORMAL:-VERS-TLS1.0:-VERS-TLS1.1:-RSA
  • tls verify peer — правила проверки параметров соединения при взаимодействии по LDAPS; возможные значения:

    • no_check — проверка сертификата не выполняется;

    • ca_only — выполняются проверки:

      • сертификат подписан одним из удостоверяющих центров, которые перечислены в файле, указанном в параметре tls cafile (в этом случае данный параметр является обязательным);

      • срок действия сертификата не истек;

      • сертификат не отозван удостоверяющим центром (если в параметре tls crlfile указан файл);

    • ca_and_name_if_available — все проверки, выполняемые при использовании опции ca_only, а также проверка соответствия имени хоста имени сертификата, если имя хоста не в формате строки IP-адреса;

    • ca_and_name — все проверки, выполняемые при использовании опции ca_and_name_if_available, а также проверка имени хоста, даже если оно задано в формате строки IP-адреса;

    • as_strict_as_possible (по умолчанию) — все проверки, выполняемые при использовании опции ca_and_name, а также дополнительные проверки, которые могут быть реализованы в будущем.

Убедитесь, что в файле smb.conf в параметре ldap server require strong auth, который устанавливает требование обязательного подписания или подписания и шифрования трафика LDAP, не задано значение no или allow_sasl_over_tls. По умолчанию он имеет значение yes.

Данный параметр был добавлен в целях совместимости. Большинство сценариев использования службы каталогов не предполагают изменение его значения по умолчанию.

Использование автоматически созданного собственного сертификата

При первом запуске Эллес создает следующие файлы:

  • /app/inno-samba/private/tls/key.pem — закрытый ключ;

  • /app/inno-samba/private/tls/cert.pem — собственный (self-signed) сертификат;

  • /app/inno-samba/private/tls/ca.pem — сертификат удостоверяющего центра.

Период действия сертификатов — 700 дней (задан на уровне исходного кода).

По умолчанию в smb.conf используется следующий набор параметров:

[global]
    tls enabled  = yes
    tls keyfile  = tls/key.pem
    tls certfile = tls/cert.pem
    tls cafile   = tls/ca.pem

Создание и добавление собственного сертификата

Чтобы создать и использовать собственный (self-signed) сертификат:

  1. Выполните вход на сервер и перейдите в каталог, где будет храниться закрытый ключ и сертификат.
    Например:

    cd /app/inno-samba/private/tls
  2. Получите полное доменное имя (FQDN) сервера.
    Например:

    hostname -f
  3. Создайте закрытый ключ RSA и самоподписанный сертификат, например, со сроком действия 1 год. При создании в ответ на запрос общего имени (Common Name) сервера укажите его полное доменное имя.
    Пример команды создания ключа и сертификата с помощью утилиты openssl:

    openssl req \
       -newkey rsa:2048 \
       -keyout myKey.pem \
       -nodes \
       -x509 \
       -days 365 \
       -out myCert.pem
    Полученный в данном примере сертификат будет функционировать и как сертификат сервера, и как сертификат удостоверяющего центра (CA). При использовании других методов формирования самоподписанных сертификатов сертификат сервера и сертификат CA могут различаться. Также они всегда различны при использовании коммерческих сертификатов.
  4. Ограничьте права доступа для файла закрытого ключа.
    Например:

    chmod 600 myKey.pem
  5. Добавьте имена файлов и пути к ним в конфигурационный файл smb.conf.
    Например:

    [global]
        tls enabled  = yes
        tls keyfile  = tls/myKey.pem
        tls certfile = tls/myCert.pem
        tls cafile   =
  6. Убедитесь, что в файле smb.conf не задан параметр ldap server require strong auth = no.

  7. Для применения изменений перезапустите службу inno-samba:

    sudo systemctl restart inno-samba.service

Добавление доверенного сертификата

Чтобы использовать сертификат, выпущенный удостоверяющим центром (Certificate Authority, CA):

  1. Выполните вход на сервер и перейдите в каталог, где будет храниться закрытый ключ и сертификат.
    Например:

    cd /app/inno-samba/private/tls
  2. Создайте закрытый ключ RSA для сервера с помощью утилиты openssl.
    Например:

    openssl genrsa -out myKey.pem 2048
  3. Получите полное доменное имя (FQDN) сервера.
    Например:

    hostname -f
  4. Сформируйте зашифрованный запрос на выпуск сертификата (Certificate Signing Request, CSR).
    Например:

    openssl req \
       -new \
       -key myKey.pem \
       -out myCSR.pem
  5. Используйте сформированный запрос для выпуска сертификата удостоверяющим центром.

  6. Поместите полученный от удостоверяющего центра сертификат в каталог с закрытым ключом сервера.

  7. Если используются промежуточные сертификаты, поместите их в тот же каталог.

  8. Добавьте имена файлов и пути к ним в конфигурационный файл smb.conf.
    Например:

    [global]
        tls enabled  = yes
        tls keyfile  = tls/myKey.pem
        tls certfile = tls/myCert.pem
        tls cafile   = tls/myIntermediate.pem
  9. Убедитесь, что в файле smb.conf не задан параметр ldap server require strong auth = no.

  10. Для применения изменений перезапустите службу inno-samba:

    sudo systemctl restart inno-samba.service

Просмотр информации о сертификате

Для просмотра существующего сертификата с помощью утилиты openssl используйте следующий синтаксис:

openssl x509 -in /path/to/certificate-file.pem -noout -text

Проверка сертификата

Для проверки сертификата с помощью утилиты openssl используйте следующий синтаксис:

  • локально:

    • собственный сертификат:

      openssl verify /path/to/certificate-file.pem
    • сертификат, выпущенный удостоверяющим центром:

      openssl verify /path/to/certificate-file.pem -CApath /path/to/ca-file.pem
  • удаленно по TCP:

    • собственный сертификат:

      openssl s_client -showcerts -connect hostname:636
    • сертификат, выпущенный удостоверяющим центром:

      openssl s_client -showcerts -connect hostname:636 -CAfile /path/to/ca-file.pem

Проверка соединения

Для проверки соединения по LDAPS после добавления сертификата на сервере:

  1. Скопируйте файл сертификата, созданный для сервера LDAP, на рабочую станцию или рядовой сервер с клиентом LDAP в домене.

  2. Укажите путь к скопированному файлу в параметре TLS_CACERT в файле /etc/ldap/ldap.conf.

  3. Выполните команду ldapwhoami с указанием пути к серверу по LDAPS для существующей учетной записи.
    Например:

    ldapwhoami \
       -H ldaps://dc1.samdom.example.com \
       -D CN=Administrator,CN=Users,DC=samdom,DC=example,DC=com \
       -W

Если соединение установлено корректно, команда вернет NetBIOS-имя домена и имя учетной записи пользователя в формате DOMAIN\UserName.