Уважаемые, прошу Вашего авторитетного мнения и совета.
Есть почтовый сервер exim-4.80.1 (НЕ в локальной сети, доступен всем в Интернете). Есть OpenSSL 1.0.1c.
Требование № 1
Что нужно: чтобы любой почтовый сервер, выступающий в роли клиента и устанавливающий SMTP-соединение с моим сервером exim всегда использовал шифрование. Только так и никак иначе. Клиенты без поддержки TLS и не имеющие сгенерированных пар ключей идут лесом.
Что сделал:
- Собрал exim с поддержкой TLS.
- В конфигурационном файле exim задал настройки
tls_advertise_hosts = * tls_certificate = /etc/ssl/exim.crt tls_privatekey = /etc/ssl/exim.pem daemon_smtp_ports = 25 : 465 tls_on_connect_ports = 465
Вопрос: достаточно ли этого и если нет, что ещё нужно сделать, чтобы принуждать клиентов шифровать соединение?
Требование № 2
Что нужно: чтобы абсолютно любой почтовый сервер, выступающий в роли клиента мог установить шифрованное соединение с сервером exim с использованием криптоалгоритмов AES и RSA и длиной ключей 512 бит и 1024 бита соответственно. Не важно, с кем устанавливается соединение, главное - чтобы оно было зашифрованным. Т.е. НЕ нужна двусторонняя аутентификация по сертификатам. Подлинность сертификата exim'а всё равно никто не сможет проверить (он будет самоподписанным), т.к. невозможно установить корневой (авторитативный) сертификат CA, которым мог быть подписан сертификат exim'а, на всех почтовых серверах Интернета в качестве доверенного.
Что сделал:
- Прочитал RFC 2246
- Прочитал, что такое гибридная криптосистема
- Прочитал, что такое криптоалгоритм RSA
- Прочитал, что такое криптоалгоритм AES
Нифига не понял.
Вопросы:
- Нужно ли (и как) настраивать openssl (или сам exim с поддержкой TLS) для реализации требования?
- Как заставить использовать симметричный алгоритм AES (а не 3DES, IDEA или любой другой) и асимметричный алгоритм RSA (а не Диффи-Хеллмана или любой другой)?
- Как установить длину 512 бит для сеансового ключа AES, который генерируется автоматически при каждом новом соединении?
Требование № 3
Что нужно: чтобы шифрование соединения осуществлялось по криптоалгоритмам ГОСТ 28147-89 (для симметричного шифрования - сеансовый ключ) и ГОСТ Р 34.10-2001 (для асимметричного шифрования с функцией хэширования по ГОСТ 34.11-94) - если клиенты это поддерживают. Если поддержки ГОСТ у клиентов нет, то шифровать алгоритмами, указанными в требовании № 2.
Что сделал:
- Включил поддержку ГОСТ в openssl
openssl ciphers -v | grep GOST GOST2001-GOST89-GOST89 SSLv3 Kx=unknown Au=unknown Enc=unknown Mac=unknown GOST94-GOST89-GOST89 SSLv3 Kx=unknown Au=unknown Enc=unknown Mac=unknown
- Сгенерировал сертификат и закрытый ключ по алгоритмам ГОСТ.
Вопросы:
- Достаточно ли того, что сертификат и закрытый ключ сгенерированы по ГОСТ 34.10-2001, чтобы сеансовый симметричный ключ автоматически генерировался openssl по алгоритму ГОСТ 28147-89 (а не AES или любой другой) и если нет, что нужно для этого сделать?
- Как заставить exim определять, поддерживает ли клиент ГОСТ и на основании этого подсовывать клиенту тот или другой сертификат? В настройках exim, если я не ошибаюсь, возможно указание директивы tls_privatekey только один раз (а надо хотябы два!).
Благодарю, если дочитали до этого места! :-)