Настройка аутентификации клиента по сертификату.

Конфигурация сервера и настройка учётной записи клиента.

Для того чтобы сервер мог проверять подлинность сертификатов предоставляемых клиентами, необходимо указать цепочку сертификатов содержащую сертификат которым подписаны клиентские сертификаты. Это будет файл ca-crt.pem созданный в п 1.1. Для использования с Manjary необходимо дополнить цепочку в файле ca-crt.pem разделом CRL (отозванных сертификатов).:

openssl ca -config ca.conf -gencrl -keyfile ca-key.pem -cert ca-crt.pem -out ca-crl.pem
cat ca-crl.pem >>ca-crt.pem

Примечание

Если утилита cat не установлена, для дополнения файла ca-crt.pem содержимым ca-crl.pem под Windows и OS/2 можно использовать команду type ca-crl.pem >>ca-crt.pem.

Приведённые далее узлы конфигурации записываются как дочерние узла module-IMAP4.

<SSL-ca-file>C:\Manjary\cert\ca-crt.pem</SSL-ca-file>

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

<SSL-verify-peer>optional</SSL-verify-peer>

Если сертификат предоставлен клиентом, успешно проверен сервером и клиент запросил аутентификацию по сертификату, сервер должен знать в каких частях сертификата искать имя пользователя. Мы будем использовать поле Common Name (CN):

<cert-username><dn>CN</dn></cert-username>

При наличии в конфигурации узла cert-username сервер будет сообщать клиентам что поддерживается метод аутентификации EXTERNAL, т.е. аутентификация по сертификату.

После внесения изменений в конфигурацию необходимо дать сигнал серверу для чтения новой конфигурации:

manjary -k reconfig

По-умолчанию аутентификация по сертификату для клиентов отключена. Чтобы её включить перейдите в веб-интерфейс управления сервером, выберите домен example.domain, затем пользователя u1 и установите переключатель Аутентификация с использованием сертификата (Certificate-based authentication).

Приватный ключ и сертификат клиента.

Создадим приватный ключ для клиента и запрос на выпуск сертификата клиента подписанного полученным ранее сертификатом Центра Сертификации. Запрос будет содержать полное имя пользователя в поле Common Name (CN) раздела сертификата Distinguished Name (DN):

openssl genrsa -out u1-key.pem 2048
openssl req -new -key u1-key.pem -out u1.csr -subj "/CN=u1@example.domain"

Полученные файлы: приватный ключ клиента u1-key.pem, запрос на выпуск сертификата u1.csr. Выпустим сертификат клиента:

openssl x509 -req -in u1.csr -CA ca-crt.pem -CAkey ca-key.pem -CAcreateserial -out u1-crt.pem -days 365 -sha256

Мы получили клиентский сертификат u1-crt.pem. Файл запроса u1.csr больше не потребуется, теперь его можно удалить.

Установка приватного ключа и сертификата клиента.

Для импорта ключа и сертификата в Mozilla Thunderbird их необходимо конвертировать в один файл формата PKCS#12. При этом будет запрошен пароль для защиты получаемого файла. Этот пароль понадобится при импорте на стороне клиента. Для нашего примера можно ввести пустой пароль.

openssl pkcs12 -export -out u1.pfx -inkey u1-key.pem -in u1-crt.pem

Полученный файл u1.pfx необходимо установить на стороне клиента: в Mozilla Thunderbird импортируйте его в список сертификатов "Ваши сертификаты" указав тот же пароль что был указан при создании файла u1.pfx. В списке "Центры Сертификации" уже находится самоподписанный сертификат созданный ранее (см. п. 1.2.). После этого можно перейти в параметры учётной записи и поменять настройки: Защита соединения: STARTTLS, Метод аутентификации: Сертификат TLS. После этого всё готово для работы. При установке шифрованного соединения пользователю будет предложено выбрать один из установленных клиентских сертификатов для аутентификации, выбираем единственный только что импортированный и устанавливаем переключатель для запоминания этого выбора. При возникновении проблем, смотрите лог-файл сервера для выяснения причин отказов.

Примечание

Т.к. по протоколу IMAP4 устаналиваются "долгоживущие" соединения, возможно, для подключения с новыми настройками нужно будет перезапустить Mozilla Thunderbird или перевести в автономный режим и обратно в режим подключения к сети.