Назад | Перейти на главную страницу

TLS с GNU Mailutils 0.6 IMAP4d

Я уже довольно давно борюсь с древним GNU Mailutils 0.6. Я должен настроить службу IMAP4d из этой версии для проверки ИТ-безопасности. Я могу не обновлять программу, но могу настроить как мне нравится.

Пока мне удалось заставить службу работать на моей виртуальной машине, но весь трафик передается в виде открытого текста, включая имена пользователей и пароли. Конечно, это плохо для безопасности. Кажется, Mailutils 0.6 уже поддерживает TLS, поэтому я хотел бы включить его для службы. Но я понятия не имею, как это сделать.

Единственные документы, которые я нашел для этой версии, - это те, которые идут с исходным кодом (из Вот). Есть глава о шифровании, но она не очень полезна:

Эти параметры управляют шифрованием TLS / SSL в демонах imap4d и pop3d.

--ssl-cert {файл}
Этот параметр указывает имя файла сертификата SSL на стороне сервера (принимает формат PEM).

--ssl-key {файл}
Эта опция указывает имя файла закрытого SSL-ключа на стороне сервера (принимает формат PEM). Ключ должен быть защищен правами доступа к файлу 0600 (u = rw, g =, o =), иначе демоны imap4d или pop3d откажутся поддерживать шифрование TLS / SSL.

--ssl-cafile {файл}
Эта опция указывает файл, содержащий список доверенных центров сертификации (список PEM) для проверки сертификатов клиента. Эта опция не обязательна.

По крайней мере, это говорит мне, что действительно существует поддержка TLS для IMAP4d. Но не о том, как этим воспользоваться. Больше ничего в документации найти не удалось.

Что я сделал до сих пор:

- скачал исходник, скомпилировал и установил

./configure --with-gnutls
make
make install

- создал файл конфигурации mailutils.rc (Не уверен насчет последней строчки):

:mailbox --mail-spool /var/spool/mail
:logging --log-facility mail
imap4d --ssl-cert /root/CA/imap.cert.pem --ssl-key /root/CA/imap.key.pem

- настроил inetd для запуска IMAP4d

50123    stream    nowait    root    /usr/local/sbin/imap4d    imap4d

Он работает на указанном порту, но, очевидно, без использования TLS. Я пытался подключиться к openssl s_client

openssl s_client -connect 192.168.178.29:50123
CONNECTED(00000003)
5769:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:601:

Я почти уверен, что что-то упускаю. Кто-нибудь из присутствующих, кто действительно имеет опыт работы с таким устаревшим программным обеспечением, может мне помочь?

Заранее спасибо!

В большинстве случаев для установки безопасного соединения требуется, чтобы сервер имел что-то, что можно было предоставить клиенту для идентификации. Для этого требуется ключ, используемый для криптоматематики, и публичный сертификат. Сертификат содержит информацию о ключе, так что только система с ключом может доказать клиенту, что он уполномочен использовать этот сертификат, а также содержит информацию об идентичности системы, например имя хоста. Эта информация затем подписывается «другим» сертификатом, который является «эмитентом» во взаимоотношениях, и этот эмитент известен как «центр сертификации» (CA). Их сертификату должны (прямо или косвенно) доверять клиенты. Затем существует множество широко распространенных центров сертификации, поддерживаемых большинством браузеров и почтовых клиентов. Вы можете пропустить этот шаг для тестирования с самозаверяющим сертификатом.

(Это игнорирует операцию без сертификата и целый ряд менее распространенных режимов; вышеупомянутое, используя что-то, называемое X.509 PKI (инфраструктура открытого ключа), далеко самый распространенный.)

Итак, как минимум вы создаете ключ и сертификат (в формате PEM) и настраиваете их в --ssl-key и --ssl-cert. Вы также можете поместить целую группу сертификатов CA вместе в файл, если вы собираетесь требовать «клиентские сертификаты», в результате чего обе стороны сеанса TLS должны предоставить сертификаты.

Различные сайты расскажут, как создавать ключи и сертификаты; несколько лет назад я писал: http://lopsa.org/SSLIntro