Уведомления

Группа в Telegram: @pythonsu

#1 Май 20, 2014 09:45:48

1q1
От:
Зарегистрирован: 2010-02-20
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Twisted SSL

Не получается написать клиента для подключения по https к серверу.
Для подключения мне прислали ключи:
1. *.cer
2. *.pfx
При экспорте *.pfx винда запрашивает пароль (пароль у меня есть).
Установил сертификат, набрал адрес https в браузере, сервер выдал запрос на сертификат, указал только что проэкспортированный - зашёл. Т.е. сервер работает, сертификат верный.
За основу взял пример echoclient_ssl.py с оф. сайта: http://twisted.readthedocs.org/en/latest/core/examples/index.html

Единственное, в примере используется *.pem сертификат, поэтому мне пришлось переконвертировать свой *.pfx в *.pem с помощью команды:

C:\OpenSSL-Win32\bin>openssl pkcs12 -in c:\cert\key.pfx -out c:\cert\key.pem

При запуске примера выдаётся следующая ошибка:
main function encountered error
Traceback (most recent call last):
Failure: twisted.internet.error.ConnectionRefusedError: Connection was refused by other side: 10061: ╧юфъы■ўхэшх эх єёЄрэютыхэю, Є.ъ. ъюэхўэ√щ ъюья№■Єх
Ё юЄтхЁу чряЁюё эр яюфъы■ўхэшх..

Т.е. аутентификация не проходит. Буду благодарен за любую помощь.



Офлайн

#2 Май 20, 2014 16:47:58

1q1
От:
Зарегистрирован: 2010-02-20
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Twisted SSL

Предполагаю, что проблема в том, что не указан пароль к сертификату. Так и не нашёл как заставить twisted считать пароль.
Если упрощённо, то твистед должен сделать это:

OpenSSL s_client -connect host:port -cert сертификат.pem -pass pass:пароль
Поможете?



Отредактировано 1q1 (Май 20, 2014 16:48:53)

Офлайн

#3 Май 22, 2014 11:48:13

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Twisted SSL

1q1
Поможете?
Вряд ли строчка из моего приложения поможет, но на всякий случай дам её:
reactor.listenSSL(config.ws_port, site,
                          ssl.DefaultOpenSSLContextFactory(
                            'f.key',
                            'f.crt')
                          )



Офлайн

#4 Июнь 2, 2014 14:49:47

1q1
От:
Зарегистрирован: 2010-02-20
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Twisted SSL

plusplus
Спасибо!
Решил самостоятельно, но смысл тот же:
class CtxFactory(ssl.ClientContextFactory):
    def getContext(self, hostname, port):
        ctx = ssl.ClientContextFactory.getContext(self)
        ctx.use_certificate_file('key/key.pem')
        ctx.use_privatekey_file('key/key.pem')
        return ctx
key.pem это сконвертированные открытый и закрытый ключ со скинутым паролем. Может кому-нибудь пригодится.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version