|
|
www.lissyara.su
—> документация
—> EXIM
—> 4.70
—> часть 39
39. Шифрование соединений с использованием TLS/SSL
Поддержка для TLS (Transport Layer Security), прежде известной как SSL (Secure Sockets Layer), осуществлена с использованием библиотеки OpenSSL или библиотеки GnuTLS (exim требует GnuTLS, релиза 1.0 или более позднего). В дистрибутиве exim'a нет никакого кода для непосредственного осуществления TLS. Для его использования, вы должны инсталлировать OpenSSL или GnuTLS, и, затем, собрать версию exim'a в которую включена поддержка TLS (смотрите раздел 4.7). Также, вы должны понимать базовые концепции шифрования на организационном уровне, и, в частности, способы использования публичных ключей, частных ключей, и сертификатов.
RFC3207 задаёт, как SMTP-соединения могут использовать шифрование. Как только установлено подключение, клиент даёт команду STARTTLS. Если сервер её принимает, клиент и сервер договариваются о механизме шифрования. Если договорённость успешна, данные, впоследствии передаваемые между ними, - зашифрованы.
ACL exim'a позволяют детектировать, зашифрован текущий сеанс, или нет, и, таким образом, какой метод шифрования используется, предоставил ли клиент сертификат, и был ли сертификат проверен. Это позволяет серверу exim принимать или отклонять определённые команды основанные на состоянии шифрования.
Warning: Определённые типы файрволлов и определённые типы антивирусных продуктов могут прерывать TLS-соединения. Вам необходимо выключить SMTP-сканирование для этих продуктов, чтобы TLS заработало.
39.1 Поддержка для наследственного “ssmtp ” (или “smtps ”) протокола
Ранние воплощения шифрованного SMTP использовали иной порт TCP, вместо обычного, и ожидали, что переговоры о шифровании начнутся немедленно, вместо ожидания команды клиента STARTTLS, использующего стандартный SMTP-порт. Протокол назывался “ssmtp ” или “smtps ”, и для этой цели был выделен 465 порт.
Этот подход был оставлен, когда было стандартизовано шифрованное SMTP, но, всё ещё есть клиенты, использующие его по наследству. Exim поддерживает этих клиентов путём глобальной опции “tls_on_connect_ports ”. Её значение должно быть списком номеров портов; обычное использование - таково:
tls_on_connect_ports = 465
| Номер порта, определяемый этой опцией, применяется ко всем SMTP-соединениям, и через демона, и через “inetd ”. Вам всё ещё необходимо задавать все порты используемые демоном (путём установки “daemon_smtp_ports ” или “local_interfaces ” или опции командной строки “-oX ”), поскольку “tls_on_connect_ports ” не добавляет дополнительного порта, скорее, она определяет иное поведение на порту определённом в другом месте.
Также, есть опция командной строки “-tls-on-connect ”. Она переопределяет “tls_on_connect_ports ”; она вызывает наследование поведения для всех портов.
39.2 OpenSSL против GnuTLS
Первая поддержка TLS в exim`e была осуществлена с использованием OpenSSL. Поддержка GnuTLS последовала позднее, когда была выпущена первая версия GnuTLS. Для сборки exim'a с использованием GnuTLS, вам необходимо установить
в “Local/Makefile ”, в дополнение к
Также, вы должны установить TLS_LIBS и TLS_INCLUDE соответственно, так, чтобы были найдены файлы заголовков и библиотеки для GnuTLS.
Есть некоторые отличия при использовании GnuTLS вместо OpenSSL:
Опция “tls_verify_certificates ” должна содержать имя файла, а не имя директории (для OpenSSL - это может быть любым).
Опция “tls_dhparam ” - игнорируется, поскольку ранние версии GnuTLS не имели средств для изменения параметров Diffie-Hellman. Я понимаю, что это изменилось, но exim не был обновлён для предоставления этого средства.
Строка “выдающегося имени ” (DN) сообщаемая библиотекой OpenSSL использует слэш для разделения полей; GnuTLS использует использует запятые, в соответствии с RFC2253. Это вызываeтся значением переменной “$tls_peerdn ”.
OpenSSL идентифицирует шифр используя дефисы, как разделители, например: DES-CBC3-SHA. GnuTLS использует подчёркивания, например: RSA_ARCFOUR_SHA. Что хуже - OpenSSL жалуется на присутствие символов подчёркивания в списке шифров. Чтобы упростить жизнь, exim заменяет подчёркивания на дефисы для OpenSSL, и дефисы на подчёркивания для GnuTLS при обработке списков шифров в опциях “tls_require_ciphers (глобальная опция и транспортная опция “smtp ”).
Опции “tls_require_ciphers ” работают иначе, как описано в разделе 39.4 и 39.5.
39.3 Вычисление параметра GnuTLS
GnuTLS использует параметры D-H, которые требуют для вычисления существенного времени. Неблагоразумно вычислять их заново для каждой сессии TLS. Поэтому, exim сохраняет эти данные в файле, в своей директории спула, называемой “gnutls-params ”. Файл принадлежит пользователю exim'a и читаем лишь его владельцем. Каждый процесс exim'a, который запускает GnuTLS читает параметры D-H из этого файла. Если файл не существует, первый процесс exim'a, которому он нужен, вычисляет данные и записывает их во временный файл, переименовываемый по завершении. Не имеет значения, если несколько процессов exim'a делают это одновременно (кроме траты некоторых ресурсов). Как только файл помещён на место, новый процессы exim'a немедленно начинают его использовать.
Для максимальной безопастности, параметры, которые сохраняются в этом файле, периодически, должны быть повторно вычислены, частота зависит от уровня вашей параноидальности. Упорядочивание этого - принципиально просто; просто удалите файл, когда вы хотите вычислить новое значение. Однако, могут быть проблемы. Для вычисления новых параметров необходимы случайные числа, и они берутся из “/dev/random ”. Если система не очень активна, “/dev/random ” может задержать возврат данных, пока не будет доступно достаточно хаоса. Это может вызывать зависание exim'a на довольно существенное время, вызывая таймауты для входящих соединений.
Решение - генерировать параметры снаружи exim'a. Они сохраняются в “gnutls-params ” в формате PEM, что означает, что они могут быть сгенерированы внешне, используя команду “certtool ”, которая является частью GnuTLS.
Для замены параметров новыми, вместо удаления файла и разрешения exim`y пересоздать его, вы можете генерировать новые параметры используя “certtool ”, и, после завершения, заменить файл кэша exim'a путём переименования. Уместные команды - что то типа этого:
# rm -f new-params
# touch new-params
# chown exim:exim new-params
# chmod 0400 new-params
# certtool --generate-privkey --bits 512 >new-params
# echo "" >>new-params
# certtool --generate-dh-params --bits 1024 >> new-params
# mv new-params gnutls-params
| Если exim никогда не генерирует параметры самостоятельно, возможность остановки - удалена (наверное, имеется ввиду задержка при генерации - прим. lissyara).
39.4 Требование специфических шифров в OpenSSL
В библиотеке OpenSSL есть функция, которая может передавать список наборов шифров до того, как имеет место переговор о шифре. Этим определяется, какие шифры доступны. Список - разделён двоеточиями, и может содержать имена типа DES-CBC3-SHA. Exim передаёт раскрытое значение “tls_require_ciphers ” напрямую этому вызову функции. Следующее цитирование документации OpenSSL определяет, какие формы элементов допустимы в строке шифра:
Он может состоять из одного шифра, типа RC4-SHA.
Он может представлять список шифров содержащих определённый алгоритм, или шифры определённого типа. Например, SHA1 представляет все шифры используя алгоритм SHA1 и SSLv3 представляет все алгоримы SSL v3.
Списки наборов шифров могут быть объединены в одну строку шифра, используя символ “+ ”. Это используется как логическая операция “и ”. Например, SHA1+DES представляет все наборы шифров содержащие алгоритмы SHA1 и DES.
Каждой строке шифра, произвольно, может предшествовать один из символов “! ” или “- ” или “+ ”.
Если используется “! ” - шифр удаляется из списка. Удалённые шифры не могут вновь появляться в списке, даже если они явно заявлены.
Если используется “- ”, шифр удаляется из списка, но некоторые, или все шифры могут быть добавлены последующими позднее опциями.
Если используется “+ ”, шифр перемещается в конец списка. Эта опция не добавляет новых шифров; она лишь перемещает существующие.
Если не присутствует ни один из этих символов, строка интерпретируется как список шифров, который будет добавлен к текущему привелигированному списку. Если список включает какие-то шифры, которые уже пристутсвуют, они будут проигнорированы: т.е. они не будут перемещены в конец списка.
39.5 Специфические шифры или другие параметры требующиеся в GnuTLS
Библиотека GnuTLS позволяет вызывающему определить список разрешённых методов обмена ключами, главный шифрующий алгоритм, алгоритмы MAC и протоколы. К несчастью, эти списки цифровые, и библиотека не имеет функций для преобразования имён в номера. Поэтому, список распознаваемых имён вкомпилирован в приложение. Разрешённые методы обмена ключами, шифры, и алгоритмы MAC могут использоваться в любой комбинации с формой шифрования. Это - отличие от OpenSSL, где полное имя шифрования передаётся её управляющей функции.
Для совместимости с OpenSSL, опция “tls_require_ciphers ” может быть установлена в полное имя шифра, такое как “RSA_ARCFOUR_SHA ”, но для GnuTLS эта опция контролирует только алгоритм шифрования. Exim ищет каждый элемент в списке для имени доступного алгорима. Например, если список содержит RSA_AES_SHA, тогда распознаётся AES, и поведение точно такое же как если задан просто AES.
Есть дополнительные опции с именами “gnutls_require_kx ”, “gnutls_require_mac ”, и “gnutls_require_protocols ” которые могут использоваться для ограничения методов обмена ключами, алгоритсов MAC, и протоколов, соответственно. При использовании OpenSSL эти опции игнорируются.
Все четыре опции доступны как глобальные опции, контролирующие как exim ведёт себя в роли сервера, и, также, как опции транспорта “smtp ” - контролирующие как exim ведёт себя в роли клиента. Все значения - раскрываемые. После раскрытия, значение может быть списком разделённым двоеточием, разделитель может быть изменён обычным способом.
Каждый из четырёх списков начинается с дефолтового набора алгоритмов. Если первый элемент в списке не начинается с восклицательного знака, все дефолтовые элементы удаляются. В этом случае, может использоваться только то, что точно задано. Если первый элемент в списке начинается с восклицательного знака, значения по умолчанию помещаются слева списка.
Тогда, любой элемент, начинающийся с восклицательного знака, вызывает удаление релевантных алгоритмов из списка, и любой элемент, не начинающийся с восклицательного знака, вызывает добавление релевантных алгоритмов в список. Нераспознанные элементы списка - игнорируются. Таким образом,
tls_require_ciphers = !ARCFOUR
| разрешают все дефолтовые значения, исключая ARCFOUR, тогда как
tls_require_ciphers = AES : 3DES
| разрешает лишь шифрование использующее AES и 3DES.
Для “tls_require_ciphers ” распознаваемые имена - AES_256, AES_128, AES (оба из предшествовавших), 3DES, ARCFOUR_128, ARCFOUR_40 и ARCFOUR (оба из предшествовавших). Список по умолчанию не содержит их всех; в нём находятся AES_256, AES_128, 3DES, и ARCFOUR_128.
Для “gnutls_require_kx ” распознаваемые имена DHE_RSA, RSA (который включает DHE_RSA), DHE_DSS, и DHE (который включает оба DHE_RSA и DHE_DSS). Список по умолчанию содержит RSA, DHE_DSS, DHE_RSA.
Для “gnutls_require_mac ” распознаваемые имена SHA (синоним SHA1), и MD5. Список по умолчанию содержит SHA, MD5.
Для “gnutls_require_protocols ” распознаваемые имена TLS1 и SSL3. Список по умолчанию содержит TLS1 и SSL3.
В сервере, порядок списка не имеет значения. Сервер будет извещать о доступности всех допустимых методов шифрования. Однако, в клиенте, порядок в списке “tls_require_ciphers ” определяет предпочтительный порядок алгоритмов шифрования. Первым пробуется первый из клиентского списка, о котором, также, извещал сервер. Порядок значений по умолчанию - перечислен выше.
39.6 Конфигурирование сервера exim для использования TLS
Когда exim собран с поддержкой TLS, он извещает клиентские хосты, совпадающие с “tls_advertise_hosts ” о доступности команды STARTTLS, но не какие-либо другие хосты. Значение по умолчанию этой опции - не задано, что означает, что о STARTTLS никто не извещается. Такое значение по умолчанию выбрано, поскольку вы должны привести в порядок некоторые другие опции, чтобы сделать доступным TLS, и, также, это разумно для систем, которые хотят использовать TLS лишь в роли клиента.
Если клиент выдаёт команду STARTTLS, и на сервере существует какая-то конфигурационная проблема, команда отклоняется с ошибкой 454. Если клиент упорствует в попытках подавать команды SMTP, все они, кроме QUIT, отклоняются с ошибкой:
Если команда STARTTLS подаётся в пределах существующей TLS-сессии, она отклоняется с кодом ошибки 554.
Для включения операций TLS на сервере, вы должны установить опцию “tls_advertise_hosts ” в соответствие каким-то хостам. Вы можете, разумеется, установить её в “* ” - для соответствия всем хостам. Однако, это не всё, что вы должны сделать. TLS-сессии на сервере не будут работать без некоторого дальнейшего конфигурирования в конце сервера.
По слухам известно, что все существующие клиенты, которые поддерживают TLS/SSL, используют шифрование RSA. Чтобы это работало, вам необходимо установить в сервере:
tls_certificate =/some/file/name
tls_privatekey =/some/file/name
| Фактически, эти опции - раскрываемые строки,таким образом, вы можете сделать их зависимыми от подключенного клиента, если захотите. Первый файл содержит серверный сертификат X509, и, второй, содержит частный ключ, который с ним идёт. Эти файлы должны быть читаемы пользователем exim'a, и, всегда должны быть даны с полным путём. Это может быть один и тот же файл, если в нём содержатся сертификат и ключ. Если опция “tls_privatekey ” не задана, или если раскрытие принудительно неудачно, или результат - пустая строка, предполагается такой случай. Файл сертификата также может содержать промежутчный сертификаты, которые необходимы для отсылки клиенту, с целью аутентифицировать сертификаты сервера.
Если вы непонимаете о ключах и сертификатах, пожалуйста, попробуйте найти источник этой вводной информации, которая не является специфической для exim'a. (Есть несколько комментариев ниже, в разделе 39.11.)
Отметьте: Эти опции не применяются когда exim работает как клиент - они применяются лишь в случае сервера. Если вам необходимо использовать сертификат в exim`e в роли клиента, вы должны установить опции с теми же самыми названиями в транспорте “smtp ”.
Только с этими опциями, сервер exim'a способен использовать TLS. Этим не требуется, чтобы клиент обладал сертификатом (но, смотрите ниже, как настоять на этом). Существует одна иная опция, которая бывает необходима в других ситуациях. Если опция
tls_dhparam = /some/file/name
| установлена, библиотека SSL инициализируется для использования шифрования Diffie-Hellman, с параметрами, содержащимися в файле. Это увеличивает набор методов шифрования, поддерживаемых сервером. Смотрите команду
для способа генерации этих данных. В настоящее время, “tls_dhparam ” используется лишь когда exim слинкован с OpenSSL. При использовании GnuTLS, она игнорируется.
Строки, предоставляемые для этих трёх опций, раскрываются при каждом подключении клиентского хоста. Поэтому возможно использовать различные сертификаты и ключи для разных хостов, если вы этого желаете, для управления раскрытием, путём использования клиентского IP-адреса в переменной “$sender_host_address ”. Если строка раскрытия принудительно неудачна, exim ведёт себя так, будто эта опция неустановлена.
В переменную “$tls_cipher ” устанавливается метод шифрования, о котором договорились для входящего соединения TLS. Это включается в заголовок “Received: ” входящего сообщения (по умолчанию - разумеется, вы можете это изменить), и, также, включается в в строку лога прибывающего сообщения, с ключом “X= ”, если не выключен лог селектор “tls_cipher ”. Условие “encrypted ” может использоваться для тестирования специфического шифрования в ACL. (Для исходящих доставок SMTP переменная “$tls_cipher ” сброшена - смотрите раздел 39.9)
Как только соединение TLS установлено, ACL которые запускаются для последующих команд SMTP могут проверить имя метода шифрования и изменить свои действия соответствующим образом. Имена методов шифрования изменяемые, зависят от используемой библиотеки TLS. Например, OpenSSL использует имя DES-CBC3-SHA для шифрования, известного в других контекстах как TLS_RSA_WITH_3DES_EDE_CBC_SHA. Для дополнительных деталей проверьте документацию OpenSSL.
39.7 Запрос и проверка клиентских сертификатов
Если вы хотите, чтобы сервер exim'a запросил сертификат при переговорах о TLS-сессии с клиентом, вы должны установить или “tls_verify ” или “tls_try_verify_hosts ”. Разумеется, вы можете установить любой из них в “* ”, для применения ко всем соединениям TLS. Для любого хоста, который совпадает с этими опциями, exim запрашивет сертификат как часть установки сессии TLS. Содержимое сертификата проверяется путём его сравнения со списком ожидаемых сертификатов. Они должны быть доступны в файле, или, только для OpenSSL (не для GnuTLS), каталоге, идентифицируемом путём “tls_verify_certificates ”.
Файл может содержать много сертфикатов, связанных конец к концу. Если используется директория (только для OpenSSL), каждый сертификат должен быть в отдельном файле, с именем (или символической ссылкой) формы “<hash>.0 ”, где “<hash> ” - значение хэша созданное из сертификата. Вы можете вычислить релевантный кэш путём запуска команды
openssl x509 -hash -noout -in /cert/file
| где “/cert/file ” - содержит один сертификат.
Различие между “tls_verify_hosts ” и “tls_try_verify_hosts ” - в том, что происходит если клиент не предоставляет сертификат, или если сертификат не совпадает ни с одним из сертификатов в коллекции из “tls_verify_certificates ”. Если клиент совпадает с “tls_verify_hosts ”, попытка установить TLS-сессию прерывается, и входящее соединение обрыватся. Если клиент совпадает с “tls_try_verify_hosts ”, продолжается (шифрованная) SMTP-сессия. ACL`ы, запускаемые для последующих команд SMTP, могут детектировать факт, что сертификат не был проверен, и соотвтественно изменить свои действия. Например, вы можете настаивать на сертификате до принятия сообщения для релея, но не когда сообщения предназначено для локальной доставки.
Когда клиент предоставляет сертификат, (проверенный, или нет), значение DN сертификата становится доступным в переменной “$tls_peerdn ” в процессе последующей обработки сообщения.
Поскольку часто это - длинная текстовая строка, по умолчанию она не включается в строку лога или заголовок “Received: ”. Вы можете принять меры для её логгирования, установив ключ “DN= ”,в лог селекторе “tls_peerdn ”, и вы можете использовать “received_header_text ” - для изменения заголовка “Received: ”. Когда сертификат не предоставлен, переменная “$tls_peerdn ” пуста.
39.8 Отменённые сертификаты
Издатели сертификатов выпускают Списки Аннулированных Сертификатов (Certificate Revocation Lists - CRLs), когда сертификаты отменяются. Если у вас есть такой список, вы можете передать его серверу exim'a используя глобальную опцию “tls_crl ”, и клиенту exim'a, используя опцию с идентичным названием для транспорта “smtp ”. В каждом случае, значение опции раскрывается, и должно быть именем файла содержащего CRL в формате PEM.
39.9 Конфигурирование клиента exim'a для использования TLS
Лог селекторы “tls_ciphe ” и “tls_peerdn ” применяются к исходящим SMTP-доставкам также, как и ко входящим, последние вызывают логгирование серверных DN сертификатов. Оставшаяся клиентская конфигурация для TLS - вся в транспорте “smtp ”.
Нет необходимости устанавливать какие-либо опции для работы TLS в транспорте “smtp ”. Если exim собран с поддержкой TLS, и сервер оповестил о поддержке TLS, транспорт “smtp ”.всегда пробует запустить TLS-сессию. Однако, это может быть предотвращено установкой “hosts_avoid_tls ” (транспортная опция) в список серверных хостов, с которыми не используется TLS.
Если вы не хотите чтобы exim пытался отправить сообщения незашифрованными, когда попытка установки шифрованного соединения была неудачной, вы можете установить опцию “hosts_require_tls ” в список хостов, для которых шифрования является обязательным. Для этих хостов, доставка всегда задерживается, если не может быть установлено шифрованное соединение. Если для адреса есть другие хосты, они пробуются обычным способом.
Когда хост сервера не находится в “hosts_require_tls ”, exim может попробовать доставить сообщение незашифрованным. Он всегда так делает, если ответ на STARTTLS - код 5xx. Для временного кода ошибки, или для ошибки переговоров о сессии TLS после успешного кода ответа, происходящее контролируется путём опции “tls_tempfail_tryclear ” транспорта “smtp ”. Если она ложна, доставка к хосту задерживается, и пробуются другие хосты (если доступны). Если она истинна, exim пытается доставить нешифрованное сообщение после 4xx ответа на STARTTLS, и, если STARTTLS принимается, но последующие переговоры о TLS неудачны, exim закрывает текущее соединение (поскольку оно в неизвестном состоянии), открывает новое к тому же самому хосту, и, затем, пытается доставить сообщение нешифрованным.
Опции “tls_certificate ” и “tls_privatekey ” транспорта “smtp ” предоставляют клиенту сертификат, который он передаёт на сервер, если тот его запрашивает. Если сервер - exim, то он будет просить сертификат лишь если клиент совпадает с опцией “tls_verify_hosts ” или “tls_try_verify_hosts ”.
Если для транспорта “smtp ” установлена опция “tls_require_ciphers ”, она должна быть именем файла, или, только для OpenSSL (не для GnuTLS), директорией, которая содержаит коллекцию ожидаемых серверных сертификатов. Клиент проверяет сертификат сервера со своей коллекцией, принимая во внимание любые отозванные сертификаты, которые находятся в списке, заданном опцией “tls_crl ”.
Если для транспорта “smtp ” установлена опция “tls_require_ciphers ”, она должна содержать список разрешённых методов шифрования. Если любая из этих проверок неудачна, доставка к текущему хосту прекращается, и транспорт “smtp ” пробует доставить на альтернативный хост, если он есть.
Отметьте: Эти опции должны быть заданы в транспорте “smtp ” exim'a для использования TLS, когда он работает как клиент. Exim не предполагает, что серверный сертификат (установленный путём глобальной опции с тем же самым именем) также должен использоваться при работе в роли клиента.
Все опции TLS, в транспорте “smtp ”, раскрываются до использования, с “$host ” и “$host_address ” содержащими имя и адрес сервера, на который подключился клиент. Принудительная ошибка раскрытия заставляет exim вести себя так, как будто соответствующая опция незадана.
До установления SMTP соединения, переменные “$tls_cipher ” и “$tls_peerdn ” - пусты. (В процессе первого соединения, оно содержат значения которые которые установлены при приёме сообщения) Если, в последствии, STARTTLS проходит успешно, эти переменные устанавливаются в соответствующие значения для исходящего соединения.
39.10 Несколько сообщений через одно шифрованное TCP/IP соединение
Exim посылает много сообщений по одному TCP/IP соединению путём запуска нового процесса для каждого сообщения, передавая сокет от одного процесса следующему. Эта реализация не очень хорошо для работы с TLS, поскольку есть много информации о состоянии, ассоциированной с соединением TLS, а не только идентификатор сокета. Передача всей информации о состоянии другому процессу - невыполнима. Следовательно, exim завершает существующую сессию TLS до передачи сокета новому процессу. Новый процесс может попробовать запустить сеанс TLS, и, в случае успеха, может попробовать заново аутентифицироваться, если используется AUTH, до посылки следующего сообщения.
Из RFC неясно, действительно или нет, SMTP сессия продолжается в чистом виде после закрытия TLS, или же TLS может быть перезапущен позже, как было описано. Однако, если сервер - exim, эта остановка и реинициализация - работает. Неизвестно, каким (или обоими) образом себя ведут другие сервера, если клиент закрывает сеанс TLS, и продолжает с нешифрованным SMTP, но, разумеется, есть те, которые не работают. Для таких серверов, exim не должен передавать сокет другому процессу, поскольку неудача последующей попытки его использования заставила бы exim записать в логи временную ошибку хоста, и задержать иные доставки на этот хост.
Для тестирования этого случая, exim посылает команду EHLO на сервер после закрытия TLS сессии. Если она удачна, то соединение закрывается вместо пеердачи новому новому процессу доставки, но информация о повторе не записывается.
Также есть ручная отмена; вы можете установить опцию “hosts_nopass_tls ” транспорта “smtp ” в совпадение с этими хостами, для которых exim не должен передавать соединение новому процессу, если используется TLS.
39.11 Сертификаты и всё такое
Для полного понимания работы TLS, вам необходимо знать о сертификатах, подписании сертификатов, и авторизаторах сертификатов. Это - не место для обучения (имеется ввиду - этот документ - прим. lissyara), тем более, что я не очень много знаю об этом. Некоторое полезное введение может быть найдено в FAQ дополнения SSL к Apache, в настоящее время:
http://www.modssl.org/docs/2.7/ssl_faq.html#ToC24
Другие части документации по “modssl ” - также полезны, и имеют ссылки на дальнейшие файлы. Книга Eric`a Rescorla`a - “SSL and TLS ”, опубликованная Addison-Wesley (ISBN 0-201-61598-3), содержит введение и дополнительные всесторонние описания. Некотрые типовые программы, взятые из книги, доступны по адресу:
http: // www.rtfm.com/openssl-examples/
39.12 Цепочки сертификатов
Файл указанный в “tls_certificate ” может содержать более одного сертификата. Это полезно в случае, когда посылаемый сертификат проверяется промежуточным сертификатом, которого не имеет другая сторона. Несколько сертификатов должны быть в правильном порядке в файле. Вначале, хост сертифицирует сам себя, затем, следующий сертификат для проверки выданного хостом, затем следующее - для проверки предыдущего, и так далее, до (опционально) - корневого сертификата. Корневой сертификат уже должен быть доверенным у получателя, для успешной проверки, разумеется, если он заранее не установлен, посылка корневого сертификата вместе с остальными делает его доступным пользователю для установки, если конечный получатель - пользовательский MUA, который может взаимодействовать с пользователем.
39.13 Самоподписанные сертификаты
Вы можете создать самоподписанный сертификат, используя команду “req ”, предоставляемую OpenSSL, например так:
openssl req -x509 -newkey rsa:1024 -keyout file1 -out file2 \
-days 9999 -nodes
| “file1 ” и “file2 ” могут быть одним и тем же файлом; ключ и сертификат разграничены, и могут быть идентифицированы независимо. Опция “-days ” период, в течение которого сертификат действителен. Опция “-nodes ” - важна: если вы её не зададите, ключ шифруется с запрашиваемой у вас парольной фразой, и любое использование ключа вызывает запрос парольной фразы. Это бесполезно, если вы собираетесь использовать ключ в MTA, где запрос невозможен.
Самоподписанный сертификат, сделанный таким образом, вполне достаточен для тестирования, и может быть адекватен для всех ваших требований, если вы, главным образом, интересуетесь шифрованием передачи, а не секурной идентификацией.
Однако, многие клиенты требуют чтобы предоставленный сервером сертификат был пользовательским (также назваемый “leaf ” or “site ”) сертификатом, и не самоподписанным сертификатом. В этой ситуации, самоподписанный сертификат, должен быть установлен на клиентском хосте как доверенный корневой “авторитативный сертификат ” (CA), и сертификат используемымй exim`ом, должен быть пользовательским сертификатом, подписанным с этим самоподписанным сертификатом.
Для информации о создании самоподписанных сертификатов и использовании их для подписания пользовательских сертификатов, смотрите часть “General implementation overview ” книги “Open-source PKI ”, доступной в онлайне http://ospkibook.sourceforge.net/.
=============
translated by lissyara
verifying by Gerk
Ссылка на обсуждение: http://forum.lissyara.su/viewforum.php?f=20.
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту
Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis
Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS
Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT
В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat
Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp
Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration
Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster
HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS
История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire
Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной
Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server
Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs
Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec
Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash
Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
2010-12-05, Fomalhaut
root ZFS, GPT
Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
2010-09-05, Cancer
Настройка аудиоплеера на ximp3
Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
2010-08-31, Cancer
Установка и настройка OpenVPN
На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
2010-08-25, manefesto
freebsd lvm
Использование linux_lvm для работы с LVM разделами из-под FreeBSD. Проблемы которые возники при монтирование lvm раздела
2010-04-30, gonzo111
proftpd file auth"a
Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
2010-04-22, lissyara
tw_cli
Пошаговая инструкция по восстановлению RAID на контроллере 3ware, из которого выпал один диск. Настройка мониторинга состояния рейда и отчётов о его состоянии на email.
2010-04-14, fox
MySQL Master+Master
MySQL (Master Master) and (Master Slave) Как настроить репликацию…
2010-03-09, terminus
DNS zones
Краткий ликбез про управление DNS зонами. Примеры проведения делегирования прямых и обратных DNS зон.
2010-03-09, aspera
Squid+AD (group access)
Настройка прокси сервера SQUID с автроризацией пользователей в AD. Разделение пользователей на группы
2010-03-02, BlackCat
Шлюз: Часть 4
Настройка дополнительных сервисов: синхронизация времени (OpenNTPD), клиент DynDNS.org.
2010-03-01, BlackCat
Шлюз: Часть 3
Настройка DHCP и DNS серверов для работы внутри частной сети, c поддержкой внутренних (частных зон) DNS, а так же интеграция DHCP и DNS сервисов.
2010-03-01, BlackCat
Шлюз: Часть 2
Конфигурация МСЭ pf для проброса портов с изменением порта назначения и без, а так же поддержки активного режима FTP и ограничения максимального размера сегмента
2010-03-01, BlackCat
Шлюз: Часть 1
Быстрая настройка шлюза/маршрутизатора с установлением PPPoE-соединения, поддержкой NAT и DNS-forwarding.
2010-02-23, Morty
darkstat
Простая считалка траффика, со встроенным веб-сервером. Очень маленькая, может делать отчеты трафика по хостам, портам, протоколам, а также строить графики
2010-01-23, gonzo111
squid+sams+sqstat
Пилим squid и sams - примеры конфигов с объяснениями. Установка SqStat.
2009-12-19, schizoid
mpd5 + radius + ng_car + Abills
Настройка pppoe-сервера с биллинговой системой Abills и шейпером ng_car
2009-11-16, lissyara
UFS->ZFS
Удалённая миграция с UFS на ZFS. Загрузка с раздела zfs. Настройка для работы с малым количеством памяти под архитектурой i386.
2009-11-13, gx_ua
fusefs-ntfs
Установка, настройка и использование fusefs-ntfs, драйвер NTFS, предназанченного для монтирования NTFS разделов под FreeBSD
2009-11-12, Morty
LiveCD
Создание собственного LiveCD с необходимыми вам изменениями, автоматизирование данного процесса, а так же вариант скоростной сборки СД.
2009-09-27, lissyara
Samba как PDC
Контроллер домена - аналог M$ NT4 домена под самбой, без использования LDAP и прочей хиромантии. Просто и быстро =)
2009-08-30, terminus
ipfw nat
Подробное руководство по ipfw nat, сложные случаи конфигурации.
2009-08-24, levantuev
HotSpot
Установка Hotspot системы в общественное заведение.
2009-08-18, lissyara
diskless
Создание бездисковых терминалов под управлением FreeBSD - с загрузкой по сети. Используются для старта rdesktop и подключения к виндовому серверу терминалов.
|