URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 95876
[ Назад ]

Исходное сообщение
"Проблема с ssl сертификатами"

Отправлено globus13 , 28-Ноя-14 14:19 
Доброго времени суток. На сервере стоит связка FreeBSD+apache+Courier-IMAP+MySQL+postfix+postfixadmin+fetchmail. На данном локальном почтовом сервере настроены виртуальные почтовые ящики. С помощью fetchmail данный сервер забирает почту по POP3 с внешних почтовых серверов, которые находятся на gmail.com, yandex.ru, mail.ru, rambler.ru, а затем пользователи с помощью почтовых клиентов забирают с него письма. Все работало нормально пока провайдеры не сделали обязательным SSL. Оно-то, конечно, безопасней, только вот в чем косяк... С mail, rambler и yandex почту fetchmail забирает без проблем, а вот gmail каждую неделю меняет SSL сертификаты и стабильно раз в неделю приходится их менять. Работу с сертификатами настраивал как написано здесь http://www.opennet.me/base/net/fetchmail_setup.txt.html; ПУНКТ: "Избавимся от предупреждений касающихся ssl сертификата." Как побороть сей недуг? Заранее спасибо.

Содержание

Сообщения в этом обсуждении
"Проблема с ssl сертификатами"
Отправлено михалыч , 29-Ноя-14 19:21 
Да, у gmail есть такая заморочка с сертификатами.
Меняют они его. Может боятся чего? трУсы.. ))

Ладно, на хитрую опу есть чего-то там с винтом.

Можно (нужно?) просто тупа скачивать и устанавливать новый сертификат. А?
например (у вас пути в скрипте могут быть другие):
cat replace_cert.sh


#!/bin/sh

# Удаляем все из директории /usr/local/etc/fetchmail/sslcerts/
/bin/rm -f /usr/local/etc/fetchmail/sslcerts/*

# Получаем сертификат Gmail
/bin/echo | /usr/local/bin/openssl s_client -connect imap.gmail.com:993 -showcerts \
| /usr/bin/sed -n '/^-----/,/^-----/p;/-----E/q' > /usr/local/etc/fetchmail/sslcerts/gmail.pem

# Скачиваем и получаем самый последний сертификат
/bin/echo | /usr/local/bin/openssl s_client -connect imap.gmail.com:993 -showcerts \
| /usr/bin/sed -n '/^-----B/,/^-----E/p' | /usr/bin/sed '1p;/^--*B/,/^--*B/d' > /usr/local/etc/fetchmail/sslcerts/gmail2.pem

# Выполряем хеширование сертификата
c_rehash /usr/local/etc/fetchmail/sslcerts/

# Получаем отпечаток ключа (fingerprint) сертификата
FINPR="$(/usr/local/bin/openssl x509 -in /usr/local/etc/fetchmail/sslcerts/gmail.pem -noout -md5 -fingerprint | sed 's/^.*=\(.*\)/\1/')"

# Вставляем полученный отпечаток в файл
/usr/bin/sed -i "" 's/^sslfingerprint ".*"$/sslfingerprint "'$FINPR'"/' /usr/local/etc/fetchmailrc
#/usr/bin/sed -i "" 's/\([A-F0-9]\{2\}:\)\{15\}[A-F0-9]\{2\}/'$FINPR'/' /usr/local/etc/fetchmailrc
#/usr/bin/sed -i "" 's/"\(.*\)"/"'$FINPR'"/' /usr/local/etc/fetchmailrc

# Перезапускаем fetchmail
/usr/local/etc/rc.d/fetchmail restart

Кидаем данный скрипт в /etc/crontab

@weekly root    /usr/local/etc/scripts/replace_cert/replace_cert.sh >/dev/null 2>&

теперь пусть меняют себе на здоровье


"Проблема с ssl сертификатами"
Отправлено globus13 , 01-Дек-14 11:24 
А и еще почему необходимо?
# Получаем сертификат Gmail
/bin/echo | /usr/local/bin/openssl s_client -connect imap.gmail.com:993 -showcerts \
| /usr/bin/sed -n '/^-----/,/^-----/p;/-----E/q' > /usr/local/etc/fetchmail/sslcerts/gmail.pem

# Скачиваем и получаем самый последний сертификат
/bin/echo | /usr/local/bin/openssl s_client -connect imap.gmail.com:993 -showcerts \
| /usr/bin/sed -n '/^-----B/,/^-----E/p' | /usr/bin/sed '1p;/^--*B/,/^--*B/d' > /usr/local/etc/fetchmail/sslcerts/gmail2.pem


почему нельзя получить сертификат
/bin/echo | /usr/local/bin/openssl s_client -connect imap.gmail.com:993 -showcerts \
| /usr/bin/sed -n '/^-----/,/^-----/p;/-----E/q' > /usr/local/etc/fetchmail/sslcerts/gmail.pem

и сразу хешировать?


"Проблема с ssl сертификатами"
Отправлено михалыч , 01-Дек-14 21:02 
> А и еще почему необходимо?

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

> почему нельзя получить сертификат и сразу хешировать?

можно, если не нужен последний (см. выше)

мне нужны оба сертификата и соответственно их хеши (обоих)


"Проблема с ssl сертификатами"
Отправлено universite , 02-Дек-14 16:08 
> # Удаляем все из директории /usr/local/etc/fetchmail/sslcerts/

А почему вы решили, что здесь хранятся сертификаты?
Директории /usr/local/etc/fetchmail/ не существует.
По-дефолту конфиг fetchmail в /usr/local/etc/fetchmailrc


"Проблема с ssl сертификатами"
Отправлено михалыч , 02-Дек-14 16:31 
>> # Удаляем все из директории /usr/local/etc/fetchmail/sslcerts/
> А почему вы решили, что здесь хранятся сертификаты?
> Директории /usr/local/etc/fetchmail/ не существует.
> По-дефолту конфиг fetchmail в /usr/local/etc/fetchmailrc

Хых! ну у меня так, чтобы враги не догадались ))
ну это же не принципиально!


"Проблема с ssl сертификатами"
Отправлено universite , 02-Дек-14 19:44 
>>> # Удаляем все из директории /usr/local/etc/fetchmail/sslcerts/
>> А почему вы решили, что здесь хранятся сертификаты?
>> Директории /usr/local/etc/fetchmail/ не существует.
>> По-дефолту конфиг fetchmail в /usr/local/etc/fetchmailrc
> Хых! ну у меня так, чтобы враги не догадались ))
> ну это же не принципиально!

И второе:

Если в /usr/local/etc/fetchmailrc  описаны несколько аккаунтов, то будут проблемы с заменой fingerprint строк.


"Проблема с ssl сертификатами"
Отправлено михалыч , 03-Дек-14 08:47 
> Если в /usr/local/etc/fetchmailrc  описаны несколько аккаунтов, то будут проблемы с заменой fingerprint строк.

тогда никаких скриптов автоматизации, только хардкор,
тогда только руками скачивать, править и устанавливать, только врукопашную ((

и всё же, почему будут прогблемы?
что, для каждой учетки свой сертификат и отпечаток, неужели?


"Проблема с ssl сертификатами"
Отправлено universite , 03-Дек-14 14:20 
>> Если в /usr/local/etc/fetchmailrc  описаны несколько аккаунтов, то будут проблемы с заменой fingerprint строк.
> тогда никаких скриптов автоматизации, только хардкор,
> тогда только руками скачивать, править и устанавливать, только врукопашную ((
> и всё же, почему будут прогблемы?
> что, для каждой учетки свой сертификат и отпечаток, неужели?

Ага. Сервера разные.
имхо, перед строкой fingerprint надо ставить комментарий-метку и по ней делать замену.



"Проблема с ssl сертификатами"
Отправлено globus13 , 01-Дек-14 10:43 
т.е. надо в лоб и других вариантов нет. Я понял Вас, спасибо. Еще вопрос. Я с скриптами на вы и кое-что не понятно например, что означает
'/^-----/,/^-----/p;/-----E/q'
'/^-----B/,/^-----E/p'
's/^.*=\(.*\)/\1/')
s/\([A-F0-9]\{2\}:\)\{15\}[A-F0-9]\{2\}/
s/"\(.*\)"/"'$FINPR'"/
/dev/null 2>&

"Проблема с ssl сертификатами"
Отправлено михалыч , 01-Дек-14 21:10 
> т.е. надо в лоб и других вариантов нет. Я понял Вас, спасибо.
> Еще вопрос. Я с скриптами на вы и кое-что не понятно
> например, что означает
> '/^-----/,/^-----/p;/-----E/q'
> '/^-----B/,/^-----E/p'
> 's/^.*=\(.*\)/\1/')
> s/\([A-F0-9]\{2\}:\)\{15\}[A-F0-9]\{2\}/
> s/"\(.*\)"/"'$FINPR'"/
> /dev/null 2>&

Это называется потоковый редактор sed.
Добро пожаловать! ))

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

получаем отпечаток ключа, сохраняем его в переменной $FINPR,
ищем в файле fetchmailrc строку
sslfingerprint "DA:2F:CF:56:77:8B:D9:7F:D1:BC:1B:07:F1:27:C0:E8"
и заменяем в ней старый отпечаток на полученный новый.
После перезапускаем fetchmail,
чтобы он перечитал конфиг и знал про новый сертификат и отпечаток ключа.

Вроде все.
А! это /dev/null 2>& - глушим выхлоп