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

Исходное сообщение
"не получается скрестить qpopper с ssl"

Отправлено Nickolay , 17-Янв-03 17:21 
собрал qpopper 4.0.4 с поддержкой ssl(на машине устновлен OpenSSL 0.9.6.h, OS RH 7.3)
завернул его через xinetd:
service pop3s
{
flags = REUSE NAMEINARGS
socket_type = stream
protocol = tcp
wait = no
user = root
instances = UNLIMITED
server = /usr/local/sbin/popper/popper
server_args = qpopper -s -l 2
log_on_success += HOST PID EXIT DURATION
log_on_failure += ATTEMPT HOST
disable = no
}

в qpopper.config:
set tls-support = alternate-port

ребутим xinetd
поднимается 995-ый порт
при попытке сделать telnet 127.0.0.1 995
Connection closed by foreign host.
в /var/log/maillog:
Jan 16 11:16:51 tt qpopper[15327]: Error setting certificate PEM file
Jan 16 11:16:51 tt qpopper[15327]: ...SSL error: error:0200100E:system library:fopen:Bad address
Jan 16 11:16:51 tt qpopper[15327]: ...SSL error: error:20074002:BIO routines:FILE_CTRL:system lib
Jan 16 11:16:51 tt qpopper[15327]: ...SSL error: error:140AD002:SSL routines:SSL_CTX_use_certificate_file:system lib
Jan 16 11:16:51 tt qpopper[15327]: Failed initializing TLS/SSL

p.s. сертификат самоподписанный (сделан по аналогии с работающим апачевским)

что не так?


Содержание

Сообщения в этом обсуждении
"RE: не получается скрестить qpopper с ssl"
Отправлено lavr , 17-Янв-03 17:30 
>собрал qpopper 4.0.4 с поддержкой ssl(на машине устновлен OpenSSL 0.9.6.h, OS RH
>7.3)
>завернул его через xinetd:
>service pop3s
>{
>flags = REUSE NAMEINARGS
>socket_type = stream
>protocol = tcp
>wait = no
>user = root
>instances = UNLIMITED
>server = /usr/local/sbin/popper/popper
>server_args = qpopper -s -l 2
>log_on_success += HOST PID EXIT DURATION
>log_on_failure += ATTEMPT HOST
>disable = no
>}
>
>в qpopper.config:
>set tls-support = alternate-port
>
>ребутим xinetd
>поднимается 995-ый порт
>при попытке сделать telnet 127.0.0.1 995
>Connection closed by foreign host.
>в /var/log/maillog:
>Jan 16 11:16:51 tt qpopper[15327]: Error setting certificate PEM file
>Jan 16 11:16:51 tt qpopper[15327]: ...SSL error: error:0200100E:system library:fopen:Bad address
>Jan 16 11:16:51 tt qpopper[15327]: ...SSL error: error:20074002:BIO routines:FILE_CTRL:system lib
>Jan 16 11:16:51 tt qpopper[15327]: ...SSL error: error:140AD002:SSL routines:SSL_CTX_use_certificate_file:system lib
>Jan 16 11:16:51 tt qpopper[15327]: Failed initializing TLS/SSL
>
>p.s. сертификат самоподписанный (сделан по аналогии с работающим апачевским)
>
>что не так?

1. Создаем заготовку конфига mail.cnf (название любое)

в ней все прозрачно, но by defaul строки:
---------------------------- quote for dialog ---------------------------
[ req_dn ]
countryName = Country Name (2 letter code)
countryName_default             = NO
countryName_min                 = 2
countryName_max                 = 2

stateOrProvinceName             = State or Province Name (full name)
stateOrProvinceName_default     = Some-State

localityName                    = Locality Name (eg, city)
  
0.organizationName              = Organization Name (eg, company)
0.organizationName_default      = FooBar Inc.

organizationalUnitName          = Organizational Unit Name (eg, section)
organizationalUnitName_default =

0.commonName                    = Common Name (FQDN of your server)

1.commonName                    = Common Name (default)
1.commonName_value              = localhost
---------------------------- end of quote --------------------------------

это неудобно, потому что приходится в диалоге заполнять поля по шаблону.

Тонкость в том, что в filename.cnf, чтобы избежать диалога, необходимо
добавить строку:

prompt = no
~~~~~~~~~~~
а в секции req_dn заполнить поля реальными значениями, которая задается в:
distinguished_name = req_dn

Если у нас в distinguished_name = my_data, то браться будет секция:
[ my_data ]
...
...
real parameters
---------------------------- cut mail.cnf ----------------------------
HOME= .
RANDFILE = $ENV::HOME/.rnd

[ req ]
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type
prompt = no

#[ req_dn ]
#countryName = Country Name (2 letter code)
#countryName_default             = NO
#countryName_min                 = 2
#countryName_max                 = 2
#
#stateOrProvinceName             = State or Province Name (full name)
#stateOrProvinceName_default     = Some-State
#
#localityName                    = Locality Name (eg, city)
#
#0.organizationName              = Organization Name (eg, company)
#0.organizationName_default      = FooBar Inc.
#
#organizationalUnitName          = Organizational Unit Name (eg, section)
##organizationalUnitName_default =
#
#0.commonName                    = Common Name (FQDN of your server)
#
#1.commonName                    = Common Name (default)
#1.commonName_value              = localhost

#--lavr, удалить строки комментариев (#) и пользовать в удовольствие

[ req_dn ]
#C=двухбуквенный код страны
C=RU
#ST=Штат/Провинция/Область/Район
ST=Moscow Region
#L=город/село
L=Dubna Town
#O=Наименование Организации
O=Lavr Co.
#OU=Наименование ответственной организации
OU=Lavr CA
#CN=полное доменное(FQDN) имя телеги для которой генерится сертификат и на
#   которой будет сервис работающий через SSL с этим сертификатом
CN=lavr.pp.ru
#Email=почтовый адрес ответственного лица
Email=lavr@dubna.ru

[ cert_type ]
nsCertType = server

------------------------------ end of cut -------------------------------

2. После того как конфиг готов, выполняем пару команд и сертификат в кармане:

openssl req -new -x509 -days 999 -nodes -config mail.cnf -out stunnel.pem -keyout stunnel.pem

3. Просмотр и получение требуемой информации из созданного сертификата:

openssl x509 -subject -dates -fingerprint -noout -in stunnel.pem
или
openssl x509 -text -in stunnel.pem

использование ключей зависит от того что и как хотим посмотреть

4. Проверка сервисов работающих через SSL:

openssl s_client -connect hostname:port -state -debug

- hostname - имя хоста или fqdn
- port - соответствующий порт сервиса с ssl: 443 или 993 или 995

Использование сертификатов в почтовых агентах:

1. Unix

Если у нас самоподписные сертификаты, то в pine/mutt и других MTA работающих через SSL, я обычно использую: imap/ssl/novalidate-cert (см. документацию), либо добавить сертификат как доверительный

2. Windows

Вырезаем из сгенеренного pem-файла сертификат, и кладем в доступное на шаре - для сети или на www для клиентов место для возможности download

После чего в клиенте находим место где всасываются сертификаты: в нашем случае расширение crt (это не принципиально - там любое можно задать, важно содержание этого файла, дальше получаю запрос как добавить - автоматом, Да, после чего данный сертификат кладется в trusted - доверительные)
Все, работа Windoze Mail-Agents по IMAP/POP3 via SSL происходит без вопросов.

PS. Могу ошибаться, но в четвертой версии OE какая-то хрень с работой IMAP и с работой SSL, must be upgrade (что конкретно - не помню)


"грабля осталась"
Отправлено Nickolay , 20-Янв-03 13:18 
спасибо за совет по созданию сертификата.
сертификат сделал по образу и подобию, но при проверки
$ openssl s_client -connect 127.0.0.1:995 -state -debug
CONNECTED(00000003)
SSL_connect:before/connect initialization
write to 0814ED40 [0814F378] (124 bytes => 124 (0x7C))
[bla-bla-bla]
SSL_connect:SSLv2/v3 write client hello A
read from 0814ED40 [081548D8] (7 bytes => -1 (0xFFFFFFFF))
SSL_connect:error in SSLv2/v3 read server hello A
write:errno=104

не подскажешь куда копать дальше?
вроде и qpopper'у сказал стартовать через альтернативный порт...


"RE: грабля осталась"
Отправлено lavr , 20-Янв-03 14:04 
>спасибо за совет по созданию сертификата.
>сертификат сделал по образу и подобию, но при проверки
>$ openssl s_client -connect 127.0.0.1:995 -state -debug
>CONNECTED(00000003)
>SSL_connect:before/connect initialization
>write to 0814ED40 [0814F378] (124 bytes => 124 (0x7C))
>[bla-bla-bla]
>SSL_connect:SSLv2/v3 write client hello A
>read from 0814ED40 [081548D8] (7 bytes => -1 (0xFFFFFFFF))
>SSL_connect:error in SSLv2/v3 read server hello A
>write:errno=104
>
>не подскажешь куда копать дальше?
>вроде и qpopper'у сказал стартовать через альтернативный порт...


qpopper должен знать где лежит сертификат, а сертификат должен быть
правильно сгенерен (смотри какие данные подставлял: CN=FQDN на котором висит pop daemon


"RE: грабля осталась"
Отправлено Nickolay , 20-Янв-03 17:46 
>qpopper должен знать где лежит сертификат, а сертификат должен быть
>правильно сгенерен (смотри какие данные подставлял: CN=FQDN на котором висит pop daemon
>

CN правильное(в апаче все ок)
а вот с расположением сертификата затык получается:
я указывал ему "левое" расположение - таже ошибка.
такое впечатление что он вообще не видит этого сертификата :-(

не могли бы Вы показать кусок qpopper.config и xinetd на предмет ключей запуска qpopper?


"RE: грабля осталась"
Отправлено lavr , 21-Янв-03 12:45 
>>qpopper должен знать где лежит сертификат, а сертификат должен быть
>>правильно сгенерен (смотри какие данные подставлял: CN=FQDN на котором висит pop daemon
>>
>
>CN правильное(в апаче все ок)
>а вот с расположением сертификата затык получается:
>я указывал ему "левое" расположение - таже ошибка.
>такое впечатление что он вообще не видит этого сертификата :-(
>
>не могли бы Вы показать кусок qpopper.config и xinetd на предмет ключей
>запуска qpopper?

увы, у меня нет ни qpopper'а ни xinetd


"все. огромнон спасибо. тред закрыт."
Отправлено Nickolay , 22-Янв-03 12:55 
Спасибо lavr огромное.
затык был в моих кривых руках :-)
завернув qpopper через xinetd я забыл совершенно про hosts.allow

p.s. напоследок вопрос: каким попером ты пользуешься?


"RE: все. огромнон спасибо. тред закрыт."
Отправлено lavr , 22-Янв-03 19:28 
>Спасибо lavr огромное.
>затык был в моих кривых руках :-)
>завернув qpopper через xinetd я забыл совершенно про hosts.allow
>
>p.s. напоследок вопрос: каким попером ты пользуешься?

везде по разному, где правленный комплект imap-uw с запретом доступа к
портам imap/pop3 извне и взамен imaps/pop3s, где apop3d и другие в зависимости от задач и политики конкретного сервера