LINUX.ORG.RU
ФорумAdmin

Dovecot и клиентские сертификаты


0

2

Вернулся к попытке заставить работать dovecot , используя аутентификацию по клиентским сертификатам.
Первоначальные попытки приводили к появлению в логах

dovecot: auth(default): Client didn't present valid SSL certificate

При этом в конфиг dovecota было добавлено следующее

ssl_ca_file = /etc/ssl/ca.pem
ssl_verify_client_cert = yes

auth default {
ssl_require_client_cert = yes
ssl_username_from_cert = yes
..
}


Потом на http://wiki1.dovecot.org/SSL/DovecotConfiguration

обратил внимание на то, что

The CA file should contain the certificate(s) followed by the matching CRL(s). Note that the CRLs are required to exist.

Добавил в сертификат CA список отозванных сертификатов.

В логах появилось следующее

Dovecot v1.2.17 starting up (core dumps disabled)
Jun 12 06:59:48 mxs dovecot: imap-login: Valid certificate: /O=Root CA/OU=http://www.cacert.org/CN=CA Cert Signing Authority/emailAddress=support@cacert.org
Jun 12 06:59:48 mxs dovecot: imap-login: Valid certificate: /CN=CAcert WoT User/emailAddress=asd@xxx.ru
Jun 12 07:00:56 mxs dovecot: imap-login: Disconnected (cert required, client didn't start TLS): user=<CAcert WoT User>, method=PLAIN, rip=5.6.7.8, lip=1.2.3.4, TLS

Обратил внимание на user=<CAcert WoT User>

Also, in the documentation

The username is taken from the subject's DN's CommonName <http://wiki.dovecot.org/CommonName> field (using OpenSSL's X509_NAME_get_text_by_NID() function).

Изменил

auth default {
ssl_require_client_cert = yes
ssl_username_from_cert = no
..
}
В логах :

Jun 12 07:02:27 mxs dovecot: Dovecot v1.2.17 starting up (core dumps disabled)
Jun 12 07:02:38 mxs dovecot: imap-login: Valid certificate: /O=Root CA/OU=http://www.cacert.org/CN=CA Cert Signing Authority/emailAddress=support@cacert.org
Jun 12 07:02:38 mxs dovecot: imap-login: Valid certificate: /CN=CAcert WoT User/emailAddress=asd@xxx.ru
Jun 12 07:03:05 mxs dovecot: imap-login: Login: user=<asd@xxx.ru>, method=PLAIN, rip=5.6.7.8, lip=1.2.3.4, TLS

Jun 12 07:04:24 mxs dovecot: imap-login: Valid certificate: /O=Root CA/OU=http://www.cacert.org/CN=CA Cert Signing Authority/emailAddress=support@cacert.org
Jun 12 07:04:24 mxs dovecot: imap-login: Valid certificate: /CN=CAcert WoT User/emailAddress=asd@xxx.ru
Jun 12 07:04:35 mxs dovecot: imap-login: Login: user=<asd@xxx.ru>, method=CRAM-MD5, rip=5.6.7.8, lip=1.2.3.4, TLS

Получается логин все равно проходит не по сертификату, а либо по plain или по cram-md5.
В качестве почтового клиента icedove 2.0.24

★★★

Видно, что сейчас на стороне dovecot'а всё работает правильно. Очевидно, есть какие-то проблемы с настройкой SASL-взаимодействия. Проще говоря, нужно посмотреть, о чём всё же договариваются клиент и сервер. В данном случае очевидно, что об EXTERNAL аутентификации они не договорились, а PLAIN и CRAM-MD5 предполагают передачу пароля, которого нет.
Самый простой способ проверить - самому стать клиентом, т.е. подключиться к 143-ему порту и вручную набивать тэги (на самом деле это просто аналог нумерации строк) и команды IMAP-протокола.

DRVTiny ★★★★★ ()
Ответ на: комментарий от DRVTiny

Очевидно, есть какие-то проблемы с настройкой SASL-взаимодействия.


Jun 12 07:00:56 mxs dovecot: imap-login: Disconnected (cert required, client didn't start TLS):

Скорее всего похоже на ошибку в dovecote, так как соединение установлено на 993 порту.

dovecot.conf
protocols = imaps pop3s

В данном случае очевидно, что об EXTERNAL аутентификации они не договорились, а PLAIN и CRAM-MD5 предполагают передачу пароля, которого нет.


Пароль передается и логин проходит успешно.

И еще непонятно по какому username будет проходить логин , если

ssl_username_from_cert = no ?

vlb ★★★ ()
Ответ на: комментарий от vlb

Небольшое продвижение с клиентскими сертификатами.

Все таки непонятно откуда dovecot возьмет имя для логина, если
ssl_username_from_cert = no ?


Изменил на ssl_username_from_cert = yes.

Но dovecot берет из сертификата username= commonName

Jun 13 10:19:21 mxs dovecot: imap-login: Valid certificate: /O=Root CA/OU=http://www.cacert.org/CN=CA Cert Signing Authority/emailAddress=support@cacert.org
Jun 13 10:19:21 mxs dovecot: imap-login: Valid certificate: /CN=CAcert WoT User/emailAddress=asd@xxx.ru
Jun 13 10:19:22 mxs dovecot: auth(default): new auth connection: pid=3995
Jun 13 10:19:51 mxs dovecot: auth(default): client in: AUTH 1 EXTERNAL service=imap secured valid-client-cert cert_username=CAcert WoT User lip=127.0.0.1 rip=127.0.0.1 lport=993 rport=42081 resp=<hidden>
Jun 13 10:19:51 mxs dovecot: auth(default): ldap(CAcert WoT User,127.0.0.1): pass search: base=ou=mail, dc=xxx, dc=ru scope=subtree filter=(&(objectClass=JammMailAccount)(mail=CAcert WoT User)(accountActive=TRUE)) fields=mail,clearPassword
Jun 13 10:19:51 mxs dovecot: auth(default): ldap(CAcert WoT User,127.0.0.1): unknown user
Jun 13 10:19:53 mxs dovecot: auth(default): client out: FAIL 1 user=CAcert WoT User

Значит дело в ssl_cert_username_field
В dovecot.conf советуют ssl_cert_username = commonName или X500UniqueIdentifier

Но это все не то.
И посмотрев на Valid certificate: /CN=CAcert WoT User/emailAddress=asd@xxx.ru

Понял, что в ssl_cert_username_field должна быть запись

ssl_cert_username_field = emailAddress

В логах при этом получил следующее

Jun 13 10:34:49 mxs dovecot: imap-login: Valid certificate: /O=Root CA/OU=http://www.cacert.org/CN=CA Cert Signing Authority/emailAddress=support@cacert.org
Jun 13 10:34:49 mxs dovecot: imap-login: Valid certificate: /CN=CAcert WoT User/emailAddress=asd@xxx.ru
Jun 13 10:34:51 mxs dovecot: auth(default): new auth connection: pid=4586
Jun 13 10:35:15 mxs dovecot: auth(default): client in: AUTH 1 EXTERNAL service=imap secured valid-client-cert cert_username=asd@xxx.ru lip=127.0.0.1 rip=127.0.0.1 lport=993 rport=60492 resp=<hidden>
Jun 13 10:35:15 mxs dovecot: auth(default): ldap(asd@xxx.ru,127.0.0.1): pass search: base=ou=mail, dc=xxx, dc=ru scope=subtree filter=(&(objectClass=JammMailAccount)(mail=asd@xxx.ru)(accountActive=TRUE)) fields=mail,clearPassword
Jun 13 10:35:15 mxs dovecot: auth(default): ldap(asd@xxx.ru,127.0.0.1): result: clearPassword(password)=<hidden> mail(user)=asd@xxx.ru
Jun 13 10:35:15 mxs dovecot: auth(default): ldap(asd@xxx.ru,127.0.0.1): Password mismatch

Это уже лучше.

vlb ★★★ ()
Ответ на: комментарий от vlb

Изучив
http://www.mail-archive.com/dovecot@dovecot.org/msg26905.html, удалось сделать аутентификацию по сертификатам.

Правда, в выше приведенной ссылке речь идет об использовании аутентификации ТОЛЬКО по клиентским сертификатам, а мне хотелось бы в дополнении к уже существующим.

В dovecot.conf добавил mechanisms = login plain cram-md5 external

passdb passwd-file {
args = /etc/dovecot.crt
}
userdb passwd {
args = /etc/dovecot.crt
}


# cat /etc/dovecot.crt
asd@xxx.ru:::::nopassword=y

Далее

# openssl
OpenSSL> s_client -cert asd.pem -connect localhost:993
.............................
.............................
.............................
01 AUTHENTICATE EXTERNAL =

И получаем успешный логин по сертификату.
Все вроде отлично, но одно но.

Все это работает при наличии в конфиге

ssl_require_client_cert=yes

И получается, что другие методы аутентификации без сертификата не работают.
А убрав эту строку, получим, что клиенты, указанные в dovecot.crt могут логиниться с сертификатом, а могут и без него с пустым паролем.

Получается, что аутентификацию external надо делать в dovecote отдельной секцией.

vlb ★★★ ()
Ответ на: комментарий от vlb

Можно пример генерации сертификатов (Для сервера и для клиента)?

vonabarak ()
Ответ на: комментарий от vonabarak

А в чем проблема?
Есть маcса примеров генерации сертификатов с использованием openssl.
Сейчас я использую бесплатные сертификаты от cacert.org

vlb ★★★ ()
Ответ на: комментарий от vlb

Да, собственно, я уже и сам разобрался. Но все равно, спасибо за отзыв.

vonabarak ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.