#650: Получение почты по IMAP с самоподписанными сертификатами

Отредактирована: 54 дня назад

Симптомы

При попытке подключиться к IMAP серверу наблюдаются ошибки:

ERROR 2025-05-06 18:08:15,541 collect_imap_emails 533 140523956472704 Couldn't find host for EMAIL channel (UID) NAME, reason: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:1017)

Решение

ВНИМАНИЕ, Решение применимо начиная с версии Swarmica v4.6.x

Для самоподписанных (self-signed) сертификатов подключите корневые сертификаты, использованные при генерации этих сертификатов:

  1. Примонтируйте папку с сертификатами и ключами в /etc/ssl контейнера cron, добавив строчку в volumes в docker-compose.yml:
      cron:
        <<: *django
        restart: always
        depends_on:
          - postgres
          - redis
        command: /start-cron
        volumes:
          - /path/to/ssl/folder/custom-certs.crt:/etc/ssl/custom-certs.crt:ro
          - ./.env:/etc/environment:ro
          - swarmica_ai_assistant:/swarmica/swarmica/ai_assistant/articles/:z
          - swarmica_cron_d:/etc/cron.d/:z
          - swarmica_ugc:/swarmica/swarmica/attachments:z
          - swarmica_runtime:/swarmica/swarmica/runtime_scripts/:z
        labels:
          - "traefik.enable=false"
    
  2. Аналогично сделайте для django контейнера:
      django: &django
        image: reg.gl.swd.im/swarmica/backend:${SW_BACKEND_VERSION}
        depends_on:
          - postgres
          - redis
        volumes:
          - /path/to/ssl/folder/custom-certs.crt:/etc/ssl/custom-certs.crt:ro
          - swarmica_ai_assistant:/swarmica/swarmica/ai_assistant/articles/:z
          - swarmica_static:/swarmica/swarmica/static:z
    ...
    
  3. В /root/swarmica/.env добавьте строчки:
    IMAP_SSL_CUSTOM_CONTEXT=true
    IMAP_SSL_CUSTOM_LOCATIONS="/etc/ssl/custom-certs.crt"
    
  4. Перезагрузите Swarmica:
    docker compose down && docker compose up -d
    

Если необходимо так же включить менее защищенные шифры, необходимо сделать следующее:

  1. Добавить в .env строчку:
    IMAP_SSL_CUSTOM_CIFERS=DEFAULT
    
  2. Перезагрузить Swarmica:
    docker compose down && docker compose up -d
    

Причина

  1. Сервер IMAP использует самоподписанный (self-signed) сертификат
  2. Используется устаревший набор шифров (RSA) на сервере, которые отключены в Python 3.10 из соображений безопасности