35. Аутентификатор cram_md5
Перевод выполнен Алексеем Паутовым в рамках некоммерческого проекта RussianLDP (http://www.rldp.ru/). Именно на этом сайте и надлежит искать новые версии, если таковые будут.
35. Аутентификатор cram_md5
Аутентификационный механизм cram_md5 описан в RFC 2195. Сервер посылает клиенту строку вызова, ответ содержит имя пользователя и CRAM-MD5 строки вызова, комбинированные с секретной строкой (паролем), который известен обоим, клиенту и серверу. Таким образом, секретная строка не посылается по сети открытым текстом, что делает этот аутентификатор более безопасным, чем plaintext. Однако, обратная сторона это то, что секретная строка должна быть доступна в открытом виде с обеих сторон.
35.1. Использование cram_md5 как сервера
Этот аутентификатор имеет одну серверную опцию, которая должна быть установлена для конфигурирования аутентификатора как сервера:
|
Когда серевер получает ответ клиента, имя пользователя помещается в переменную раскрытия $auth1, а server_secret раскрывается, для получения пароля этого пользователя. Тогда сервер вычисляет CRAM-MD5, который должен был послать клиент, и проверяет, что получена корректная строка. Если раскрытие server_secret принудительно неудачно, аутентификация неудачна. Если раскрытие неудачно по иной причине, клиенту возвращается временный код ошибки.
Для совместимости с предыдущими релизами exim, имя пользователя также помещается в $1. Однако, использование этой переменной для этой цели сейчас не приветствуется, поскольку может привести к беспорядку в раскрытиях строк, которые также используют числовые переменные для других целей.
Например, следующий аутентификатор проверяет, что имя пользователя, данное клиентом, ph10 и, если это так, используется secret как пароль. Для любых других имён пользователя аутентификация неудачна.
fixed_cram: driver = cram_md5 public_name = CRAM-MD5 server_secret = ${if eq{$auth1}{ph10}{secret}fail} server_set_id = $auth1 |
Если аутентификация успешна, установка server_set_id сохраняет имя пользователя в $authenticated_id. Более типичная конфигурация могла бы искать секретную строку в файле, используя имя пользователя как ключ. Например:
lookup_cram: driver = cram_md5 public_name = CRAM-MD5 server_secret = ${lookup{ $auth1}lsearch{/etc/authpwd}{$value}fail} server_set_id = $auth1 |
Отметьте, что это раскрытие явно вызывает принудительную неудачу, если поиск неудачен, поскольку $1 содержит неизвестное имя пользователя.
35.2. Использование cram_md5 как клиента
Когда аутентификатор cram_md5 используется как клиент, он обладает двумя опциями:
|
Эта строка раскрывается, и результат используется как данные имени пользователя при вычислении ответа на подсказку сервера.
|
Эта опция должна быть установлена, чтобы аутентификатор работал как клиент. Это значение раскрывается, и результат используется как секретная строка, когда вычисляется ответ.
Для различных серверов могут использоваться разные имера пользователей и пароли, используя опции $host и $host_address. Принудительная неудача любой раскрываемой строки обрабатывается как признак, индицирующий что этот аутентификатор не готов обработать этот случай. Exim двигается к следующему сконфигурированному клиентскому аутентификатору. Любые другие ошибки раскрытия заставляют exim прекратить попытки отправить сообщение текущему серверу. Простая конфигурация аутентификатора cram_md5, использующая фиксированные строки, такова:
fixed_cram: driver = cram_md5 public_name = CRAM-MD5 client_name = ph10 client_secret = secret |