Модуль ngx_mail_ssl_module
Модуль ngx_mail_ssl_module
обеспечивает работу
почтового прокси-сервера по протоколу SSL/TLS.
По умолчанию этот модуль не собирается, его сборку необходимо
разрешить с помощью конфигурационного параметра
--with-mail_ssl_module
.
Для сборки и работы этого модуля нужна библиотека OpenSSL.
Пример конфигурации
Для уменьшения загрузки процессора рекомендуется
- установить число рабочих процессов равным числу процессоров,
- включить разделяемый кэш сессий,
- выключить встроенный кэш сессий
- и, возможно, увеличить время жизни сессии (по умолчанию 5 минут):
worker_processes auto; mail { ... server { listen 993 ssl; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5; ssl_certificate /usr/local/nginx/conf/cert.pem; ssl_certificate_key /usr/local/nginx/conf/cert.key; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ... }
Директивы
Синтаксис: |
ssl |
---|---|
Умолчание: |
ssl off; |
Контекст: |
mail , server |
Включает протокол SSL/TLS для данного сервера.
Синтаксис: |
ssl_certificate |
---|---|
Умолчание: | — |
Контекст: |
mail , server |
Указывает файл
с сертификатом в формате PEM
для данного сервера.
Если вместе с основным сертификатом нужно указать промежуточные,
то они должны находиться в этом же файле в следующем порядке: сначала
основной сертификат, а затем промежуточные.
В этом же файле может находиться секретный ключ в формате PEM.
Синтаксис: |
ssl_certificate_key |
---|---|
Умолчание: | — |
Контекст: |
mail , server |
Указывает файл
с секретным ключом в формате PEM
для данного сервера.
Вместо файла
можно указать значение
engine
:имя
:id
(1.7.9),
которое загружает ключ с указанным id
из OpenSSL engine с заданным именем
.
Синтаксис: |
ssl_ciphers |
---|---|
Умолчание: |
ssl_ciphers HIGH:!aNULL:!MD5; |
Контекст: |
mail , server |
Описывает разрешённые шифры. Шифры задаются в формате, поддерживаемом библиотекой OpenSSL, например:
ssl_ciphers ALL:!aNULL:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
Полный список можно посмотреть с помощью команды
“openssl ciphers
”.
В предыдущих версиях nginx по умолчанию использовались другие шифры.
Синтаксис: |
ssl_client_certificate |
---|---|
Умолчание: | — |
Контекст: |
mail , server |
Эта директива появилась в версии 1.7.11.
Указывает файл
с доверенными сертификатами CA в формате
PEM, которые используются для
проверки клиентских сертификатов.
Список сертификатов будет отправляться клиентам. Если это нежелательно, можно воспользоваться директивой ssl_trusted_certificate.
Синтаксис: |
ssl_crl |
---|---|
Умолчание: | — |
Контекст: |
mail , server |
Эта директива появилась в версии 1.7.11.
Указывает файл
с отозванными сертификатами (CRL)
в формате PEM, используемыми для
проверки клиентских сертификатов.
Синтаксис: |
ssl_dhparam |
---|---|
Умолчание: | — |
Контекст: |
mail , server |
Эта директива появилась в версии 0.7.2.
Указывает файл
с параметрами для шифров с обменом EDH-ключами.
Синтаксис: |
ssl_ecdh_curve |
---|---|
Умолчание: |
ssl_ecdh_curve prime256v1; |
Контекст: |
mail , server |
Эта директива появилась в версиях 1.1.0 и 1.0.6.
Задаёт кривую для ECDHE-шифров.
Синтаксис: |
ssl_password_file |
---|---|
Умолчание: | — |
Контекст: |
mail , server |
Эта директива появилась в версии 1.7.3.
Задаёт файл
с паролями от
секретных ключей,
где каждый пароль указан на отдельной строке.
Пароли применяются по очереди в момент загрузки ключа.
Пример:
mail { ssl_password_file /etc/keys/global.pass; ... server { server_name mail1.example.com; ssl_certificate_key /etc/keys/first.key; } server { server_name mail2.example.com; # вместо файла можно указать именованный канал ssl_password_file /etc/keys/fifo; ssl_certificate_key /etc/keys/second.key; } }
Синтаксис: |
ssl_prefer_server_ciphers |
---|---|
Умолчание: |
ssl_prefer_server_ciphers off; |
Контекст: |
mail , server |
Указывает, чтобы при использовании протоколов SSLv3 и TLS серверные шифры были более приоритетны, чем клиентские.
Синтаксис: |
ssl_protocols
[ |
---|---|
Умолчание: |
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; |
Контекст: |
mail , server |
Разрешает указанные протоколы.
Параметры TLSv1.1
и TLSv1.2
работают
только при использовании библиотеки OpenSSL версии 1.0.1 и выше.
ПараметрыTLSv1.1
иTLSv1.2
поддерживаются только начиная с версий 1.1.13 и 1.0.12, поэтому при использовании OpenSSL версии 1.0.1 и выше на старых версиях nginx эти протоколы работать будут, однако их нельзя будет отключить.
Синтаксис: |
ssl_session_cache
|
---|---|
Умолчание: |
ssl_session_cache none; |
Контекст: |
mail , server |
Задаёт тип и размеры кэшей для хранения параметров сессий. Тип кэша может быть следующим:
off
- жёсткое запрещение использования кэша сессий: nginx явно сообщает клиенту, что сессии не могут использоваться повторно.
none
- мягкое запрещение использования кэша сессий: nginx сообщает клиенту, что сессии могут использоваться повторно, но на самом деле не хранит параметры сессии в кэше.
builtin
- встроенный в OpenSSL кэш, используется в рамках только одного рабочего процесса. Размер кэша задаётся в сессиях. Если размер не задан, то он равен 20480 сессиям. Использование встроенного кэша может вести к фрагментации памяти.
shared
- кэш, разделяемый между всеми рабочими процессами. Размер кэша задаётся в байтах, в 1 мегабайт может поместиться около 4000 сессий. У каждого разделяемого кэша должно быть произвольное название. Кэш с одинаковым названием может использоваться в нескольких серверах.
Можно использовать одновременно оба типа кэша, например:
ssl_session_cache builtin:1000 shared:SSL:10m;
однако использование только разделяемого кэша без встроенного должно быть более эффективным.
Синтаксис: |
ssl_session_ticket_key |
---|---|
Умолчание: | — |
Контекст: |
mail , server |
Эта директива появилась в версии 1.5.7.
Задаёт файл
с секретным ключом, применяемым при шифровании и
расшифровании TLS session tickets.
Директива необходима, если один и тот же ключ нужно использовать
на нескольких серверах.
По умолчанию используется случайно сгенерированный ключ.
Если указано несколько ключей, то только первый ключ используется для шифрования TLS session tickets. Это позволяет настроить ротацию ключей, например:
ssl_session_ticket_key current.key; ssl_session_ticket_key previous.key;
Файл
должен содержать 48 байт случайных данных и может быть
создан следующей командой:
openssl rand 48 > ticket.key
Синтаксис: |
ssl_session_tickets |
---|---|
Умолчание: |
ssl_session_tickets on; |
Контекст: |
mail , server |
Эта директива появилась в версии 1.5.9.
Разрешает или запрещает возобновление сессий при помощи TLS session tickets.
Синтаксис: |
ssl_session_timeout |
---|---|
Умолчание: |
ssl_session_timeout 5m; |
Контекст: |
mail , server |
Задаёт время, в течение которого клиент может повторно использовать параметры сессии, хранящейся в кэше.
Синтаксис: |
ssl_trusted_certificate |
---|---|
Умолчание: | — |
Контекст: |
mail , server |
Эта директива появилась в версии 1.7.11.
Задаёт файл
с доверенными сертификатами CA в формате PEM,
которые используются для
проверки клиентских сертификатов.
В отличие от ssl_client_certificate, список этих сертификатов не будет отправляться клиентам.
Синтаксис: |
ssl_verify_client
|
---|---|
Умолчание: |
ssl_verify_client off; |
Контекст: |
mail , server |
Эта директива появилась в версии 1.7.11.
Разрешает проверку клиентских сертификатов. Результат проверки передаётся в заголовке “Auth-SSL-Verify” в запросе аутентификации.
Параметр optional
запрашивает клиентский
сертификат, и если сертификат был предоставлен, проверяет его.
Параметр optional_no_ca
запрашивает сертификат
клиента, но не требует, чтобы он был подписан доверенным сертификатом CA.
Это предназначено для случаев, когда фактическая проверка сертификата
осуществляется внешним по отношению к nginx’у сервисом.
Содержимое сертификата доступно в запросах,
посылаемых
на сервер аутентификации.
Синтаксис: |
ssl_verify_depth |
---|---|
Умолчание: |
ssl_verify_depth 1; |
Контекст: |
mail , server |
Эта директива появилась в версии 1.7.11.
Устанавливает глубину проверки в цепочке клиентских сертификатов.
Синтаксис: |
starttls
|
---|---|
Умолчание: |
starttls off; |
Контекст: |
mail , server |
on
-
разрешить использование команд
STLS
для POP3 иSTARTTLS
для IMAP; off
-
запретить использование команд
STLS
иSTARTTLS
; only
- требовать предварительного перехода на TLS.