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

Как запретить Cyrus обслуживать корневой сертификат?

После изменения сертификата для моего экземпляра cyrus я получаю следующее предупреждение всякий раз, когда подписываюсь с помощью cyradm:

cyradm --user cyrus --authz cyrus localhost
verify error:num=19:self signed certificate in certificate chain

что является ошибкой OpenSSL, которая также появляется при подключении к серверу с openssl s_client -connect FQDN (Я заменил свое имя субъекта / сертификата на полное доменное имя и пропустил блок сертификата для публикации):

CONNECTED(00000003)
depth=2 /C=US/ST=UT/L=Salt Lake City/O=The USERTRUST Network/OU=http://www.usertrust.com/CN=UTN-USERFirst-Hardware
verify error:num=19:self signed certificate in certificate chain
verify return:0
---
Certificate chain
 0 s:/OU=Domain Control Validated/CN=FQDN
   i:/C=NL/O=TERENA/CN=TERENA SSL CA
 1 s:/C=NL/O=TERENA/CN=TERENA SSL CA
   i:/C=US/ST=UT/L=Salt Lake City/O=The USERTRUST Network/OU=http://www.usertrust.com/CN=UTN-USERFirst-Hardware
 2 s:/C=US/ST=UT/L=Salt Lake City/O=The USERTRUST Network/OU=http://www.usertrust.com/CN=UTN-USERFirst-Hardware
   i:/C=US/ST=UT/L=Salt Lake City/O=The USERTRUST Network/OU=http://www.usertrust.com/CN=UTN-USERFirst-Hardware
---
Server certificate
-----BEGIN CERTIFICATE-----
(omitted)
-----END CERTIFICATE-----
subject=/OU=Domain Control Validated/CN=FQDN
issuer=/C=NL/O=TERENA/CN=TERENA SSL CA
---
No client certificate CA names sent
---
SSL handshake has read 4171 bytes and written 328 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : DHE-RSA-AES256-SHA
    Session-ID: 88FC7D094D2B0A0EAD11ADBAB0F4605CFF8B72DA0079C3C6E47939018C4CA3D4
    Session-ID-ctx: 
    Master-Key: A88EF226C587C6F9AE43EC7D04D6BC462E657ED851B6FC336940898A57C31E55BCFFACDFFEDBAFB3C65A024F27EB1006
    Key-Arg   : None
    Start Time: 1431561482
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---
* OK [CAPABILITY IMAP4rev1 LITERAL+ ID ENABLE AUTH=LOGIN AUTH=PLAIN SASL-IR] FQDN Cyrus IMAP v2.4.12-Debian-2.4.12-2 server ready

Это из моего /etc/imapd.conf:

tls_ca_path:            /etc/ssl/certs
tls_ca_file:            /etc/ssl/certs/TERENA_SSL_CA.pem
tls_cert_file:          /etc/ssl/certs/mail.pem
tls_key_file:           /etc/ssl/private/mail.key

Я получил сертификат TERENA CA от https://www.terena.org/activities/tcs/repository/, Раздел «Сертификаты TCS CA (SHA1) / TERENA SSL CA (PEM)». Проверка файла с помощью less показывает, что в файле есть только один сертификат, поэтому это не может быть причиной включения корневого сертификата. Рассматриваемый корневой сертификат "UTN_USERFirst_Hardware_Root_CA.pem" является частью ca-certificates пакет, который установлен на сервере.

Я понятия не имею, почему Сайрус настаивает на доставке корневого сертификата цепочки, а затем жалуется на это.

Обновление 1:

Вероятно, сообщение об ошибке вводит в заблуждение - я тоже получаю эту ошибку, так как изменил servername установка в imapd.conf (Debian 8.2 / стабильный).

Я установил два двойных сервера, std install, используя промежуточный сертификат от RapidSSL. Оба запускают cyrus-imapd с абсолютно идентичной настройкой (я сравнил файлы конфигурации с diff Чтобы убедиться). Просто б / с я педантичен, поменял servername в imapd.conf к одному и тому же CNAME на обоих серверах - один является главным, другой должен стать сервером-репликой для переключения при отказе, отсюда то же имя. Это, конечно же, изменяет область AUTH SASL. Пока на srv1 Я получаю ошибку 19, которую вы наблюдали также при использовании cyrus uid со стандартной областью (простое имя хоста), на srv2 Я получаю еще одну ошибку (с идентичной настройкой, но с другим каноническим доменным именем), а именно эту:

Login failed: authentication failure at /usr/lib/x86_64-linux-gnu/perl5/5.20/Cyrus/IMAP/Admin.pm line 120.

Забавно, правда? Если я раскомментирую servername в imapd.conf на первом или втором сервере все работает без ошибок. Мое решение заключалось в том, чтобы добавить пользователя cyrus SASL с областью servername и снова все работает нормально. Ошибка "самоподписанный сертификат" исчезла.

Прочитав ваш вопрос, я провел еще несколько тестов: Если я установил tls_ca_path: /tmp/ и tls_ca_file: только для промежуточного сертификата, Cyrus по-прежнему выводит связанный корневой сертификат CA. НО: это не вызывает эту ошибку при раскомментировании servername или при добавлении пользователя SASL cyrus с той же сферой, что и servername.

Довольно странно. Поскольку Cyrus все равно выводит сертификат корневого CA, я уверен, что это не причина этого сообщения об ошибке. Я не получаю его ни на втором сервере, ни на мастере с правильной настройкой области SASL! В моем случае это был неправильный мир, ваш пробег может отличаться. Таким образом, сообщение err 19 никоим образом не связано с сертификатом корневого CA.

Надеюсь, это поможет, lbc (еще один ненавистник Perl :-)