Регистрация...

Eserv Forum / E4 / Mail / Перестал работать Eserv SSL с конфигом PIG

recent wikipost // (v1)
Продукты и услуги Скачать Документация Купить Поддержка Форумы Партнёрам Статьи О компании
acIMAP4 + Pigmail

Создал новый сертификат для домена (от StartSSL, 2048, SHA2) получил, экспортировал в .pem (сертификат + ключ) подсунул на сервер в виде: server.pem

Перезапустил сервис acIMAP — результат клиенты отваливаются с ошибкой соединения. В логах:
17:27:07 99 Error 1 in the rule file "myconf\imap\STARTTLS.rules.txt", line: 1, char: 68
17:27:30 103 Error 1 in the rule file "myconf\imap\OnThreadConnect.rules.txt", line: 38, char: 69
17:27:30 103 Error 1 in the rule file "myconf\OnThreadConnect.rules.txt", line: 8, char: 51

вернул старый сертификат — перезапустил серверы, ничего не изменилось. Клиенты отваливаются (Thunderbird) в логах те же ошибки

что произошло?
 
Комментарии к этой версии (23.11.2015 17:33) [~asm] 35149636
АвторДатаТекстtags
asm23.11.2015 17:57
Так, старый сертификат приживился (правда потребовалась перезагрузка сервера), но остался вопрос, как быть с новым сертификатом.

Есть подозрение, что он не воспринимается ESERV-ом из-за использования SHA2 (SHA256) при генерации сертификата CA и/или длины в 2048
wikipost
ac23.11.2015 21:34
asm пишет: Есть подозрение, что он не воспринимается ESERV-ом из-за использования SHA2 (SHA256) при генерации сертификата CA и/или длины в 2048

Это легко проверить, перегенерировав сертификат. Длина ключа наверняка не проблема, а шифр — вполне может быть, openssl в комплекте уже не очень свежий (тоже можно заменить для тестов).
wikipost
ac23.11.2015 21:34
ред: 23.11.2015 21:35
asm пишет: при генерации сертификата CA

Кстати, если вы при генерации ставили именно флаг CA, то это тоже может вызывать проблемы. Для SSL нужны сертификаты, предназначенные для использования serverAuth (extendedKeyUsage).
wikipost
Asm23.11.2015 23:02
При генерации я никаких параметров не выставлял. Это бесплатный ssl сертификат. Можно выбрать только длину — я выбрал 2048. При генерации можно указать какого типа сертификат — s/mime или web ssl/tls или xmpp Ssl/tls . Я выбрал второй.

Библиотеки OpenSSL пробовал обновлять — файлы libssl32 и libeay32.dll — не помогает. Этого достаточно?

Куда можно прислать сертификаты для разбора?
wikipost
Asm23.11.2015 23:05
startSsl уже не позволяет генерировать сертификаты с отпечатками sha1 — только sha2 (sha256)
wikipost
ac24.11.2015 03:54
У нас на https://www.eserv.ru/ сертификат как раз StartCom, в июне получал. Проверил — да, sha256 2048 бит, всё работает. Так что возьмите dll и exe из Eserv/5, наверное поможет.
wikipost
asm24.11.2015 10:02
ред: 24.11.2015 10:26
Libeay32.dll и libssl32.dll заменил на версии из E5

Причем acWEB(4) работает — устанавливается HTTPS соединение и браузер показывает все данные о сертификате, а вот ни acIMAP, ни acSMPT не работают!

acIMAP достаточно свежий
(http://www.eserv.ru/download/acIMAP_509_435_2015-05-04_2.rar)

спотыкаются серверы на:
PIG.SSL-CERTIFICATE Pig.SslVerifyMode vClientSocket SslServerSocket

судя по записи в логе:
17:27:07 99 Error 1 in the rule file "myconf\imap\STARTTLS.rules.txt", line: 1, char: 68

Насколько я понимаю vClientSocket и SslServerSocket — это функции встроенные в exe и значит наличие PIG конфига вряд ли является источником проблемы.

Что еще можно посмотреть?
wikipost
asm24.11.2015 10:25
Андрей, отправил вам сертификат на почту
wikipost
asm24.11.2015 11:42
Проверил на чистой инсталяции E5 — работает. Что может быть не так с серверами из комплекта E4? (использовать бинарники от Е5 не могу)
wikipost
pig24.11.2015 16:52
А SslVerifyClient для почты у вас как выставлено?
wikipost
asm24.11.2015 17:00
Пробовал и SslVerifyClient=0 и SslVerifyClient=SSL_VERIFY:NONE
wikipost
ac25.11.2015 13:16
asm пишет: Проверил на чистой инсталяции E5 — работает. Что может быть не так с серверами из комплекта E4? (использовать бинарники от Е5 не могу)

Попробуйте и чистый E4 тогда.

pig пишет: А SslVerifyClient для почты у вас как выставлено?

Я вот тоже сначала на ошибку верификации клиентского сертификата (точнее на ошибку, что эта верификация случайно установлена) подумал, когда "Error 1" увидел в логе. Но предположения про несовместимость шифров увели на другой путь.
wikipost
ac25.11.2015 13:19
ред: 25.11.2015 13:22
ac пишет: Попробуйте и чистый E4 тогда.

Или прямо с сбойной строкой экспериментировать. Поставить например явно:
S" путь к сертификату" 0 vClientSocket SslServerSocket
wikipost
ac25.11.2015 13:22
ред: 25.11.2015 13:25
Исходник этой функции:

: SslServerSocket { addr u verify s -- namea nameu cert } \ addr u - имя файла с сертификатом и закрытым ключем в PEM-формате SslInit 5000 SSL-MUT @ WAIT THROW DROP s uSSL_SOCKET ! dSslWaitInit addr u X509_FILETYPE_PEM SslNewServerContext uSSL_CONTEXT ! addr u verify ( SSL_VERIFY_PEER) uSSL_CONTEXT @ SslSetVerify s uSSL_CONTEXT @ ['] SslObjAccept CATCH \ 0=OK, 5=не тот сертификат, 1= нет сертификата SSL-MUT @ RELEASE-MUTEX DROP ?DUP IF NIP NIP dFailedSsl EXIT THEN DUP uSSL_OBJECT ! verify 0= IF DROP S" " 0 EXIT THEN ?DUP IF SslGetVerifyResults THROW ROT \ ." verify:" . ." (" TYPE ." )" . ELSE S" " 0 THEN ;


: FailedSsl ( ior -- namea nameu cert ) DUP 6 <> IF uSSL_SOCKET @ CloseSocket DROP uSSL_CONTEXT @ SSL_CTX_free 2DROP THEN uSSL_SOCKET 0! uSSL_CONTEXT 0! DROP S" " 0 ; ' FailedSsl TO dFailedSsl
wikipost
ac25.11.2015 13:29
Если не считать THROW на мутексе (чего не должно быть в подобных лабораторных испытаниях), то остаётся подозревать именно ветку SslGetVerifyResults, в остальных случаях возвращается нулевой указатель вместо сертификата, без бросков THROW.
wikipost
asm25.11.2015 16:31
PIG.SSL-CERTIFICATE 0 vClientSocket SslServerSocket

работает...
wikipost
asm25.11.2015 16:32
удалил параметр SslVerifyClient из конфига — заработало.. видимо что-то было все-таки со значением.

Спасибо!
wikipost
Работает на Eserv/5.05567 (10.02.2020)