Для того чтобы сервер мог проверять подлинность сертификатов
предоставляемых клиентами, необходимо указать цепочку сертификатов
содержащую сертификат которым подписаны клиентские сертификаты. Это
будет файл 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 или перевести в автономный режим и обратно в режим подключения к сети.