forum.bitel.ru
http://forum.bitel.ru/

Подписывание исходящих mail. Возможно?
http://forum.bitel.ru/viewtopic.php?f=22&t=10205
Страница 1 из 1

Автор:  Yagoda [ 20 фев 2015, 09:37 ]
Заголовок сообщения:  Подписывание исходящих mail. Возможно?

Вопрос. Возможно ли все исходящие для клиентов email (уведомления, сообщения от модуля Bill и т.д.) подписывать имеющимся X.509 сертификатом?

В идеале бы подписывать просто pdf формируемые модулем bill (из-за него весь сыр-бор, пытаемся уйти от бумажек), но думаю это будет сложно и у клиентов должны быть определенные pdf-читалки.
Технологически наверное проще подписывать все исходящие email.

Да, и сертификат по ГОСТу...

PS. Если кто подскажет софтину SMTP-Relay под Debian с возможностью изменения сообщений (надо добавить подпись), то буду благодарен и буду копать в эту сторону.

PS.
Сервер: вер. 6.0 сборка 1811 от 13.11.2014 18:45:59
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.6.0_38

Автор:  dimOn [ 20 фев 2015, 14:07 ]
Заголовок сообщения:  Re: Подписывание исходящих mail. Возможно?

Ну всё верно, это нужно делать извне биллинга. Ставите локальный какой-то там sendmail, через него настраиваете, а туда всякие сертификаты любые и алга.

Автор:  Yagoda [ 03 мар 2015, 06:20 ]
Заголовок сообщения:  Re: Подписывание исходящих mail. Возможно?

Победил. ))
Может кому пригодится.

Исходные:
- Почтовый сервер на одной машине с биллингом, организовать на нем обработку невозможно.

Требуется:
Подписывать сообщение (само тело сообщения без заголовков) имеющимся сертификатом.

Решение:
- Для обработки сообщений ставим proxsmtp.
Конфигурация proxsmtp (может быть несколько конфигураций, для каждой должен быть файл /etc/proxsmtp/*.conf):
# cat billing.conf
Код:
Listen: 127.0.0.1:10025
MaxConnections: 64
OutAddress: 127.0.0.1:25
TransparentProxy: off
FilterCommand: /etc/proxsmtp/billing.sh
FilterType: file


Скрипт обработки:
# cat billing.sh
Код:
#! /bin/sh

#Будем подписывать только если отправитель - биллинг и есть вложения
if [ "$SENDER" = "billing@MyCompany.ru" ]; then
    att=$( cat $EMAIL | grep "Content-Disposition: attachment;" )
    if [ "qqq$att" != "qqq" ]; then
        /etc/proxsmtp/sign $EMAIL
    fi
fi

exit 0


Скрипт, который непосредственно подписывает сообщение:
# cat sign
Код:
#! /bin/sh

msg=$1

#Временные файлы
f_in=$( mktemp /tmp/in.XXXXXXXXXX )
f_line=$( mktemp /tmp/line.XXXXXXXXXX )
f_out=$( mktemp /tmp/out.XXXXXXXXXX )

#Найдем начало тела сообщения
n=$( cat $msg | awk '$0 ~ "MIME-Version: 1.0" { print NR }' )

#Сохраним отдельно тело сообщения
cat $msg | awk -v n_start=$n 'NR>=n_start { print $0 }' > $f_in
#И заголовки
cat $msg | awk -v n_start=$n 'NR<n_start { print $0 }' > $f_line

#Подпишем тело имеющимся сертификатом
openssl smime -sign -signer /etc/proxsmtp/mycert.pem -in $f_in -out $f_out

#Соберем сообщение из сохраненных заголовков + подписанное тело
cat $f_line > $msg
cat $f_out >> $msg

#Удаляем временные файлы
rm -f $f_in
rm -f $f_line
rm -f $f_out


В результате получается подписанное сообщение (вложен файл подписи, включает сертификат с публичным ключем).
Сообщения нормально открываются в MS Outlook Express и MS Outlook (если есть доверие к сертификату).

PS. В конфигурации сервера добавить строку
Код:
mail.properties.mail.smtp.port=10025

и перезапустить биллинг (достаточно сам процесс server).

PSS. Файл mycert.pem содержит сертификат + приватный ключ.
Т.е. формат:
Код:
-----BEGIN CERTIFICATE-----
*****
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
*****
-----END RSA PRIVATE KEY-----

Автор:  ok-2004 [ 03 мар 2015, 08:04 ]
Заголовок сообщения:  Re: Подписывание исходящих mail. Возможно?

Последний пост тянет на статью на Хабре.
За такие труды раньше на родине героев бронзовые бюсты отливали....

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/