Форум сайта python.su
Не получается написать клиента для подключения по 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: ╧юфъы■ўхэшх эх єёЄрэютыхэю, Є.ъ. ъюэхўэ√щ ъюья№■Єх Ё юЄтхЁу чряЁюё эр яюфъы■ўхэшх..
Офлайн
Предполагаю, что проблема в том, что не указан пароль к сертификату. Так и не нашёл как заставить twisted считать пароль.
Если упрощённо, то твистед должен сделать это:
OpenSSL s_client -connect host:port -cert сертификат.pem -pass pass:пароль
Отредактировано 1q1 (Май 20, 2014 16:48:53)
Офлайн
1q1Вряд ли строчка из моего приложения поможет, но на всякий случай дам её:
Поможете?
reactor.listenSSL(config.ws_port, site, ssl.DefaultOpenSSLContextFactory( 'f.key', 'f.crt') )
Офлайн
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
Офлайн